diff --git a/SOURCES/0034-test-check-systemd-RPM-macros.patch b/SOURCES/0034-test-check-systemd-RPM-macros.patch new file mode 100644 index 0000000..fbab83d --- /dev/null +++ b/SOURCES/0034-test-check-systemd-RPM-macros.patch @@ -0,0 +1,240 @@ +From 29cda567564d548cce5867c9d054ebb6cefcdca0 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 3 Mar 2022 20:30:43 +0100 +Subject: [PATCH] test: check systemd RPM macros + +Make sure our RPM macros work as intended. Based on the original PR +(#16464) by Mikhail Novosyolov. + +Co-authored-by: Mikhail Novosyolov +(cherry picked from commit 55c09511e13c6a57ffe64bef4a9d0a00f34d37d9) + +Related: #2017035 +--- + .github/workflows/unit_tests.sh | 1 + + .semaphore/semaphore-runner.sh | 2 +- + test/meson.build | 16 ++++ + test/test-rpm-macros.sh | 162 ++++++++++++++++++++++++++++++++ + 4 files changed, 180 insertions(+), 1 deletion(-) + create mode 100755 test/test-rpm-macros.sh + +diff --git a/.github/workflows/unit_tests.sh b/.github/workflows/unit_tests.sh +index 9c7beb6d19..f41b070e57 100755 +--- a/.github/workflows/unit_tests.sh ++++ b/.github/workflows/unit_tests.sh +@@ -20,6 +20,7 @@ ADDITIONAL_DEPS=( + perl + python3-libevdev + python3-pyparsing ++ rpm + zstd + ) + +diff --git a/.semaphore/semaphore-runner.sh b/.semaphore/semaphore-runner.sh +index d02b449e0e..6ccf271a82 100755 +--- a/.semaphore/semaphore-runner.sh ++++ b/.semaphore/semaphore-runner.sh +@@ -42,7 +42,7 @@ apt-get -q --allow-releaseinfo-change update + apt-get -y dist-upgrade + apt-get install -y eatmydata + # The following four are needed as long as these deps are not covered by Debian's own packaging +-apt-get install -y fdisk tree libfdisk-dev libp11-kit-dev libssl-dev libpwquality-dev ++apt-get install -y fdisk tree libfdisk-dev libp11-kit-dev libssl-dev libpwquality-dev rpm + apt-get purge --auto-remove -y unattended-upgrades + systemctl unmask systemd-networkd + systemctl enable systemd-networkd +diff --git a/test/meson.build b/test/meson.build +index 8de1043e17..04ae9ebc78 100644 +--- a/test/meson.build ++++ b/test/meson.build +@@ -163,6 +163,22 @@ endif + + ############################################################ + ++rpm = find_program('rpm', required : false) ++rpmspec = find_program('rpmspec', required : false) ++test_rpm_macros = find_program('test-rpm-macros.sh') ++ ++if rpm.found() and rpmspec.found() ++ if want_tests != 'false' ++ test('test-rpm-macros', ++ test_rpm_macros, ++ args : [project_build_root]) ++ endif ++else ++ message('Skipping test-rpm-macros since rpm and/or rpmspec are not available') ++endif ++ ++############################################################ ++ + if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family()) + udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh') + +diff --git a/test/test-rpm-macros.sh b/test/test-rpm-macros.sh +new file mode 100755 +index 0000000000..5843b72346 +--- /dev/null ++++ b/test/test-rpm-macros.sh +@@ -0,0 +1,162 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++# This test makes some basic checks that RPM macros work correctly. ++# RPM is a simple C program available on different Linux distros, not only RPM-based ones, ++# and even BSD systems, so it must not be a problem to require it. ++# rpmspec utility is required (so this test will work with RPM 4 but won't work with RPM 5). ++set -eu ++ ++BUILD_DIR="${1:?Missing argument: build directory}" ++RPM_MACROS_FILE="${BUILD_DIR:?}/src/rpm/macros.systemd" ++ ++if ! command -v rpm >/dev/null || ! command -v rpmspec >/dev/null; then ++ echo >&2 "Missing necessary utilities (rpm, rpmspec), can't continue" ++ exit 1 ++fi ++ ++if [[ ! -f "${RPM_MACROS_FILE:?}" ]]; then ++ echo "RPM macros file not found in $RPM_MACROS_FILE!" ++ exit 1 ++fi ++ ++at_exit() { ++ if [[ -v WORK_DIR && -d "$WORK_DIR" ]]; then ++ rm -frv "$WORK_DIR" ++ fi ++} ++ ++trap at_exit EXIT ++ ++WORK_DIR="$(mktemp -d)" ++RPM_SPEC="$(mktemp "$WORK_DIR/systemd-test-rpm-macros-XXX.spec")" ++TEMP_LOG="$(mktemp "$WORK_DIR/out-XXX.log")" ++ ++die() { ++ echo >&2 "${1:?}" ++ exit 1 ++} ++ ++mk_mini_spec() { ++ cat >"${RPM_SPEC:?}" <>"$RPM_SPEC" ++: >"$TEMP_LOG" ++rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG" ++for i in post preun postun; do ++ echo "== Requires($i) ==" ++ grep "^Requires($i): systemd$" "$TEMP_LOG" ++done ++ ++echo "=== Test %systemd_ordering ===" ++mk_mini_spec ++echo "%systemd_ordering" >>"$RPM_SPEC" ++: >"$TEMP_LOG" ++rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG" ++for i in post preun postun; do ++ echo "== OrderWithRequires($i) ==" ++ grep "^OrderWithRequires($i): systemd$" "$TEMP_LOG" ++done ++ ++echo "=== Test macros requiring an argument without specifying such argument ===" ++for i in \ ++ systemd_post \ ++ systemd_preun \ ++ systemd_postun \ ++ systemd_postun_with_restart \ ++ systemd_user_preun \ ++ systemd_user_postun \ ++ systemd_user_postun_with_restart \ ++ tmpfiles_create \ ++ tmpfiles_create_package \ ++ sysusers_create \ ++ sysusers_create_package ++do ++ echo "== Macro: $i ==" ++ mk_mini_spec ++ echo "%${i}" >>"$RPM_SPEC" ++ if rpmspec --parse "$RPM_SPEC"; then ++ die "Unexpected pass with macro $i (no arguments)" ++ fi ++done ++ ++echo "=== Test macros requiring two arguments ===" ++for i in \ ++ tmpfiles_create_package \ ++ sysusers_create_package ++do ++ echo "== Macro: $i ==" ++ # Test with an incorrect number of arguments (0, 1, 3) ++ for args in "" "arg1" "arg1 arg2 arg3"; do ++ mk_mini_spec ++ echo "%${i} $args" >>"$RPM_SPEC" ++ if rpmspec --parse "$RPM_SPEC"; then ++ die "Unexpected pass with macro $i (arguments: $args)" ++ fi ++ done ++ ++ # Test with the correct number of arguments (2) ++ mk_mini_spec ++ echo "%${i} arg1 arg2" >>"$RPM_SPEC" ++ if ! rpmspec --parse "$RPM_SPEC"; then ++ die "Unexpected fail with macro $i (arguments: $args)" ++ fi ++done ++ ++ ++# Test that: ++# - *_create_package macros do work correctly ++# - shell syntax is correct (https://github.com/systemd/systemd/commit/93406fd37) ++# - RPM macros, loaded from macros.in, are actually expanded ++echo "=== Test %*_create_package macros ===" ++for i in sysusers tmpfiles; do ++ echo "== Macro: ${i}_create_package ==" ++ ++ PKG_DATA_FILE="$(mktemp "$WORK_DIR/pkg-data-XXX")" ++ EXP_OUT="$(mktemp "$WORK_DIR/exp-out-XXX.log")" ++ CONF_DIR="$(pkg-config --variable="${i}dir" systemd)" ++ EXTRA_ARGS=() ++ ++ if [[ "$i" == tmpfiles ]]; then ++ EXTRA_ARGS+=("--create") ++ fi ++ ++ echo "TEST_DATA" >"$PKG_DATA_FILE" ++ mk_mini_spec ++ echo "%${i}_create_package TEST_NAME ${PKG_DATA_FILE}" >>"$RPM_SPEC" ++ ++ cat >"$EXP_OUT" <"$TEMP_LOG" ++ rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG" ++ diff "$EXP_OUT" <(grep -A1 -B1 '^TEST_DATA$' "$TEMP_LOG") ++ ++ rm -f "$PKG_DATA_FILE" ++done diff --git a/SOURCES/0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch b/SOURCES/0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch new file mode 100644 index 0000000..86068c7 --- /dev/null +++ b/SOURCES/0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch @@ -0,0 +1,161 @@ +From 7cc55d22394b8583b637e7e4b8baa00eb8f0dc49 Mon Sep 17 00:00:00 2001 +From: Luca Boccassi +Date: Wed, 12 Jan 2022 22:38:22 +0000 +Subject: [PATCH] test: do not assume x86-64 arch in TEST-58-REPART + +(cherry picked from commit 8e65d93e85f06e3f28b0b7a6e33b041ddf119917) + +Related: #2017035 +--- + test/units/testsuite-58.sh | 76 ++++++++++++++++++++++++++++++++------ + 1 file changed, 65 insertions(+), 11 deletions(-) + +diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh +index 78c25051a2..4b3c984c84 100755 +--- a/test/units/testsuite-58.sh ++++ b/test/units/testsuite-58.sh +@@ -11,6 +11,60 @@ fi + export SYSTEMD_LOG_LEVEL=debug + export PAGER=cat + ++machine="$(uname -m)" ++if [ "${machine}" = "x86_64" ]; then ++ root_guid=4f68bce3-e8cd-4db1-96e7-fbcaf984b709 ++ root_uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0 ++ usr_guid=8484680c-9521-48c6-9c11-b0720656f69e ++ usr_uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16 ++ architecture="x86-64" ++elif [ "${machine}" = "i386" ] || [ "${machine}" = "i686" ] || [ "${machine}" = "x86" ]; then ++ root_guid=44479540-f297-41b2-9af7-d131d5f0458a ++ root_uuid=02b4253f-29a4-404e-8972-1669d3b03c87 ++ usr_guid=75250d76-8cc6-458e-bd66-bd47cc81a812 ++ usr_uuid=7b42ffb0-b0e1-4395-b20b-c78f4a571648 ++ architecture="x86" ++elif [ "${machine}" = "aarch64" ] || [ "${machine}" = "aarch64_be" ] || [ "${machine}" = "armv8b" ] || [ "${machine}" = "armv8l" ]; then ++ root_guid=b921b045-1df0-41c3-af44-4c6f280d3fae ++ root_uuid=055d0227-53a6-4033-85c3-9a5973eff483 ++ usr_guid=b0e01050-ee5f-4390-949a-9101b17104e9 ++ usr_uuid=fce3c75e-d6a4-44c0-87f0-4c105183fb1f ++ architecture="arm64" ++elif [ "${machine}" = "arm" ]; then ++ root_guid=69dad710-2ce4-4e3c-b16c-21a1d49abed3 ++ root_uuid=567da89e-8de2-4499-8d10-18f212dff034 ++ usr_guid=7d0359a3-02b3-4f0a-865c-654403e70625 ++ usr_uuid=71e93dc2-5073-42cb-8a84-a354e64d8966 ++ architecture="arm" ++elif [ "${machine}" = "loongarch64" ]; then ++ root_guid=77055800-792c-4f94-b39a-98c91b762bb6 ++ root_uuid=d8efc2d2-0133-41e4-bdcb-3b9f4cfddde8 ++ usr_guid=e611c702-575c-4cbe-9a46-434fa0bf7e3f ++ usr_uuid=031ffa75-00bb-49b6-a70d-911d2d82a5b7 ++ architecture="loongarch64" ++elif [ "${machine}" = "ia64" ]; then ++ root_guid=993d8d3d-f80e-4225-855a-9daf8ed7ea97 ++ root_uuid=dcf33449-0896-4ea9-bc24-7d58aeef522d ++ usr_guid=4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea ++ usr_uuid=bc2bcce7-80d6-449a-85cc-637424ce5241 ++ architecture="ia64" ++elif [ "${machine}" = "s390x" ]; then ++ root_guid=5eead9a9-fe09-4a1e-a1d7-520d00531306 ++ root_uuid=7ebe0c85-e27e-48ec-b164-f4807606232e ++ usr_guid=8a4f5770-50aa-4ed3-874a-99b710db6fea ++ usr_uuid=51171d30-35cf-4a49-b8b5-9478b9b796a5 ++ architecture="s390x" ++elif [ "${machine}" = "ppc64le" ]; then ++ root_guid=c31c45e6-3f39-412e-80fb-4809c4980599 ++ root_uuid=061e67a1-092f-482f-8150-b525d50d6654 ++ usr_guid=15bb03af-77e7-4d4a-b12b-c0d084f7491c ++ usr_uuid=c0d0823b-8040-4c7c-a629-026248e297fb ++ architecture="ppc64-le" ++else ++ echo "Unexpected uname -m: ${machine} in testsuite-58.sh, please fix me" ++ exit 1 ++fi ++ + rm -f /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump + mkdir -p /tmp/testsuite-58-defs/ + +@@ -25,7 +79,7 @@ EOF + + cat >/tmp/testsuite-58-defs/usr.conf </tmp/testsuite-58-defs/root.conf </tmp/testsuite-58-defs/usr.conf </tmp/testsuite-58-defs/root.conf </tmp/testsuite-58.3-defs/root.conf </tmp/testsuite-58-issue-21817-defs/test.conf < +Date: Mon, 7 Feb 2022 14:35:40 +0100 +Subject: [PATCH] tests: add repart tests for block devices with 1024, 2048, + 4096 byte sector sizes + +let's make sure repart works with 4K drives and exotic sector sizes. + +(cherry picked from commit 2cd341afb96486bd4afcdba23f02a27631c5b8db) + +Related: #2017035 +--- + test/units/testsuite-58.sh | 42 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 42 insertions(+) + +diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh +index 4b3c984c84..7aed965fb4 100755 +--- a/test/units/testsuite-58.sh ++++ b/test/units/testsuite-58.sh +@@ -189,6 +189,48 @@ grep -qF 'p2 : start= 104448, size= 100319,' /tmp/testsuite-58-issue-2 + rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump + rm -r /tmp/testsuite-58-issue-21817-defs/ + ++testsector() ++{ ++ echo "Running sector test with sector size $1..." ++ ++ mkdir -p /tmp/testsuite-58-sector ++ cat > /tmp/testsuite-58-sector/a.conf < /tmp/testsuite-58-sector/b.conf < /tmp/testsuite-58-sector/c.conf <= 512 and <= PAGE_SIZE, and ++# must be powers of 2. Which leaves exactly four different ones to test on ++# typical hardware ++testsector 512 ++testsector 1024 ++testsector 2048 ++testsector 4096 ++ + echo OK >/testok + + exit 0 diff --git a/SOURCES/0037-test-accept-both-unpadded-and-padded-partition-sizes.patch b/SOURCES/0037-test-accept-both-unpadded-and-padded-partition-sizes.patch new file mode 100644 index 0000000..a810f33 --- /dev/null +++ b/SOURCES/0037-test-accept-both-unpadded-and-padded-partition-sizes.patch @@ -0,0 +1,31 @@ +From c16ff9acad53e741ee121a21bd2ba5dfce1f459e Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 25 Feb 2022 15:09:07 +0100 +Subject: [PATCH] test: accept both unpadded and padded partition sizes + +Since util-linux/util-linux@921c7da55ec78350e4067b3fd6b7de6f299106ee +libfdisk aligns the last partition (on GPT) for optimal I/O. Let's +account for that. + +Fixes: #22606 +(cherry picked from commit d490188b8f6da658d8086dd53b7db95735e5cca1) + +Related: #2017035 +--- + test/units/testsuite-58.sh | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh +index 7aed965fb4..f1b690a71f 100755 +--- a/test/units/testsuite-58.sh ++++ b/test/units/testsuite-58.sh +@@ -184,7 +184,8 @@ sfdisk --dump "$LOOP" | tee /tmp/testsuite-58-issue-21817.dump + losetup -d "$LOOP" + + grep -qiF "p1 : start= 2048, size= 102400, type=${root_guid}," /tmp/testsuite-58-issue-21817.dump +-grep -qF 'p2 : start= 104448, size= 100319,' /tmp/testsuite-58-issue-21817.dump ++# Accept both unpadded (pre-v2.38 util-linux) and padded (v2.38+ util-linux) sizes ++grep -qE "p2 : start= 104448, size= (100319| 98304)," /tmp/testsuite-58-issue-21817.dump + + rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump + rm -r /tmp/testsuite-58-issue-21817-defs/ diff --git a/SOURCES/0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch b/SOURCES/0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch new file mode 100644 index 0000000..fcdd5e9 --- /dev/null +++ b/SOURCES/0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch @@ -0,0 +1,41 @@ +From fcaf368341c85285017f77333543656e1382975e Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 9 Feb 2022 22:35:03 +0100 +Subject: [PATCH] test: lvm 2.03.15 dropped the static autoactivation + +so install the respective generator only if we're running with older +lvm versions. + +See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c +(cherry picked from commit d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4) + +Related: #2017035 +--- + test/test-functions | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/test/test-functions b/test/test-functions +index 4827b6bedf..dcc893733c 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -973,16 +973,19 @@ install_lvm() { + image_install lvm + image_install "${ROOTLIBDIR:?}"/system/lvm2-lvmpolld.{service,socket} + image_install "${ROOTLIBDIR:?}"/system/{blk-availability,lvm2-monitor}.service +- image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator + image_install -o "/lib/tmpfiles.d/lvm2.conf" + if get_bool "$LOOKS_LIKE_DEBIAN"; then + inst_rules 56-lvm.rules 69-lvm-metad.rules + else + # Support the new udev autoactivation introduced in lvm 2.03.14 + # https://sourceware.org/git/?p=lvm2.git;a=commit;h=67722b312390cdab29c076c912e14bd739c5c0f6 ++ # Static autoactivation (via lvm2-activation-generator) was dropped ++ # in lvm 2.03.15 ++ # https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c + if [[ -f /lib/udev/rules.d/69-dm-lvm.rules ]]; then + inst_rules 11-dm-lvm.rules 69-dm-lvm.rules + else ++ image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator + image_install "${ROOTLIBDIR:?}"/system/lvm2-pvscan@.service + inst_rules 11-dm-lvm.rules 69-dm-lvm-metad.rules + fi diff --git a/SOURCES/0039-test-accept-GC-ed-units-in-newer-LVM.patch b/SOURCES/0039-test-accept-GC-ed-units-in-newer-LVM.patch new file mode 100644 index 0000000..3926a40 --- /dev/null +++ b/SOURCES/0039-test-accept-GC-ed-units-in-newer-LVM.patch @@ -0,0 +1,39 @@ +From 494045e03c7e1b81ac4dcea7d4bf776e2bc50c77 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 10 Feb 2022 12:29:53 +0100 +Subject: [PATCH] test: accept GC'ed units in newer LVM + +Since lvm 2.03.15 the transient units are started without `-r`, thus +disappearing once they finish and breaking the test (which expects them +to remain loaded after finishing). Let's accept `LoadState=not-found` as +a valid result as well to fix this. + +Follow-up to: d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4 +See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=fbd8b0cf43dc67f51f86f060dce748f446985855 + +(cherry picked from commit b034f02c628057c30a2136289a1b388a6fb9a737) + +Related: #2017035 +--- + test/units/testsuite-64.sh | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh +index f75382d90a..dc8b263b10 100755 +--- a/test/units/testsuite-64.sh ++++ b/test/units/testsuite-64.sh +@@ -96,6 +96,14 @@ helper_wait_for_lvm_activate() { + if [[ "$(systemctl show -P SubState "$lvm_activate_svc")" == exited ]]; then + return 0 + fi ++ else ++ # Since lvm 2.03.15 the lvm-activate transient unit no longer remains ++ # after finishing, so we have to treat non-existent units as a success ++ # as well ++ # See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=fbd8b0cf43dc67f51f86f060dce748f446985855 ++ if [[ "$(systemctl show -P LoadState "$lvm_activate_svc")" == not-found ]]; then ++ return 0 ++ fi + fi + + sleep .5 diff --git a/SOURCES/0040-shared-Add-more-dlopen-tests.patch b/SOURCES/0040-shared-Add-more-dlopen-tests.patch new file mode 100644 index 0000000..6113824 --- /dev/null +++ b/SOURCES/0040-shared-Add-more-dlopen-tests.patch @@ -0,0 +1,127 @@ +From 3ed5b365c5134cb18da8aed397c7c4551af25715 Mon Sep 17 00:00:00 2001 +From: Daan De Meyer +Date: Tue, 1 Mar 2022 17:04:13 +0000 +Subject: [PATCH] shared: Add more dlopen() tests + +Add dlopen_dw(), dlopen_elf() and dlopen_pcre2() to the dlopen test. +To enable adding dlopen_pcre2(), we move pcre2-dlopen.h/c from +src/journal to src/shared. + +(cherry picked from commit ee48779e05831a0ec5e1ba5e7ed5fe92aaca1d9e) + +Related: #2017035 +--- + src/journal/meson.build | 2 -- + src/shared/elf-util.c | 4 ++-- + src/shared/elf-util.h | 3 +++ + src/shared/meson.build | 2 ++ + src/{journal => shared}/pcre2-dlopen.c | 0 + src/{journal => shared}/pcre2-dlopen.h | 0 + src/test/test-dlopen-so.c | 11 +++++++++++ + 7 files changed, 18 insertions(+), 4 deletions(-) + rename src/{journal => shared}/pcre2-dlopen.c (100%) + rename src/{journal => shared}/pcre2-dlopen.h (100%) + +diff --git a/src/journal/meson.build b/src/journal/meson.build +index eb66bfd584..270592f2ac 100644 +--- a/src/journal/meson.build ++++ b/src/journal/meson.build +@@ -49,8 +49,6 @@ systemd_cat_sources = files('cat.c') + + journalctl_sources = files(''' + journalctl.c +- pcre2-dlopen.c +- pcre2-dlopen.h + '''.split()) + + if install_sysconfdir_samples +diff --git a/src/shared/elf-util.c b/src/shared/elf-util.c +index 4d93e7eaba..6d9fcfbbf2 100644 +--- a/src/shared/elf-util.c ++++ b/src/shared/elf-util.c +@@ -80,7 +80,7 @@ unsigned int (*sym_elf_version)(unsigned int); + GElf_Phdr *(*sym_gelf_getphdr)(Elf *, int, GElf_Phdr *); + size_t (*sym_gelf_getnote)(Elf_Data *, size_t, GElf_Nhdr *, size_t *, size_t *); + +-static int dlopen_dw(void) { ++int dlopen_dw(void) { + int r; + + r = dlopen_many_sym_or_warn( +@@ -123,7 +123,7 @@ static int dlopen_dw(void) { + return 1; + } + +-static int dlopen_elf(void) { ++int dlopen_elf(void) { + int r; + + r = dlopen_many_sym_or_warn( +diff --git a/src/shared/elf-util.h b/src/shared/elf-util.h +index cf3d9be128..b28e64cea6 100644 +--- a/src/shared/elf-util.h ++++ b/src/shared/elf-util.h +@@ -4,6 +4,9 @@ + #include "json.h" + + #if HAVE_ELFUTILS ++int dlopen_dw(void); ++int dlopen_elf(void); ++ + /* Parse an ELF object in a forked process, so that errors while iterating over + * untrusted and potentially malicious data do not propagate to the main caller's process. + * If fork_disable_dump, the child process will not dump core if it crashes. */ +diff --git a/src/shared/meson.build b/src/shared/meson.build +index 5dc58a863d..006310a917 100644 +--- a/src/shared/meson.build ++++ b/src/shared/meson.build +@@ -241,6 +241,8 @@ shared_sources = files(''' + parse-argument.h + parse-socket-bind-item.c + parse-socket-bind-item.h ++ pcre2-dlopen.c ++ pcre2-dlopen.h + pe-header.h + pkcs11-util.c + pkcs11-util.h +diff --git a/src/journal/pcre2-dlopen.c b/src/shared/pcre2-dlopen.c +similarity index 100% +rename from src/journal/pcre2-dlopen.c +rename to src/shared/pcre2-dlopen.c +diff --git a/src/journal/pcre2-dlopen.h b/src/shared/pcre2-dlopen.h +similarity index 100% +rename from src/journal/pcre2-dlopen.h +rename to src/shared/pcre2-dlopen.h +diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c +index ea2ef31b1f..002f666ed8 100644 +--- a/src/test/test-dlopen-so.c ++++ b/src/test/test-dlopen-so.c +@@ -5,10 +5,12 @@ + + #include "bpf-dlopen.h" + #include "cryptsetup-util.h" ++#include "elf-util.h" + #include "idn-util.h" + #include "libfido2-util.h" + #include "macro.h" + #include "main-func.h" ++#include "pcre2-dlopen.h" + #include "pwquality-util.h" + #include "qrcode-util.h" + #include "tests.h" +@@ -49,6 +51,15 @@ static int run(int argc, char **argv) { + assert_se(dlopen_bpf() >= 0); + #endif + ++#if HAVE_ELFUTILS ++ assert_se(dlopen_dw() >= 0); ++ assert_se(dlopen_elf() >= 0); ++#endif ++ ++#if HAVE_PCRE2 ++ assert_se(dlopen_pcre2() >= 0); ++#endif ++ + return 0; + } + diff --git a/SOURCES/0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch b/SOURCES/0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch new file mode 100644 index 0000000..a8558ed --- /dev/null +++ b/SOURCES/0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch @@ -0,0 +1,36 @@ +From b07519fd5241eacfdb735917eca4ccbf441b5a8a Mon Sep 17 00:00:00 2001 +From: Daan De Meyer +Date: Tue, 22 Feb 2022 11:06:00 +0000 +Subject: [PATCH] systemctl: Show how long a service ran for after it exited in + status output + +(cherry picked from commit 0802f62efc1d1c67d5be67223b529c93536cf2ed) + +Related: #2017035 +--- + src/systemctl/systemctl-show.c | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c +index 37c898f313..9b23471990 100644 +--- a/src/systemctl/systemctl-show.c ++++ b/src/systemctl/systemctl-show.c +@@ -433,6 +433,18 @@ static void print_status_info( + FORMAT_TIMESTAMP_STYLE(until_timestamp, arg_timestamp_style), + FORMAT_TIMESTAMP_RELATIVE(until_timestamp)); + } ++ ++ if (!endswith(i->id, ".target") && ++ STRPTR_IN_SET(i->active_state, "inactive", "failed") && ++ timestamp_is_set(i->active_enter_timestamp) && ++ timestamp_is_set(i->active_exit_timestamp) && ++ i->active_exit_timestamp >= i->active_enter_timestamp) { ++ ++ usec_t duration; ++ ++ duration = i->active_exit_timestamp - i->active_enter_timestamp; ++ printf(" Duration: %s\n", FORMAT_TIMESPAN(duration, MSEC_PER_SEC)); ++ } + } else + printf("\n"); + diff --git a/SOURCES/0042-time-util-introduce-TIMESTAMP_UNIX.patch b/SOURCES/0042-time-util-introduce-TIMESTAMP_UNIX.patch new file mode 100644 index 0000000..a71e3db --- /dev/null +++ b/SOURCES/0042-time-util-introduce-TIMESTAMP_UNIX.patch @@ -0,0 +1,130 @@ +From 5f59cc1593eaa251161061fe9a4ac4afb1592e6e Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Mon, 21 Feb 2022 13:08:20 +0100 +Subject: [PATCH] time-util: introduce TIMESTAMP_UNIX + +Allow formatting timestamps as number of seconds since the Epoch for easier +machine parsing. + +Fixes: #22567 + +``` +$ systemctl show systemd-journald | grep Timestamp +WatchdogTimestampMonotonic=0 +ExecMainStartTimestamp=Sat 2021-12-11 15:25:57 CET +ExecMainStartTimestampMonotonic=13030408 +ExecMainExitTimestampMonotonic=0 +StateChangeTimestamp=Sat 2021-12-11 15:25:57 CET +StateChangeTimestampMonotonic=13049273 +InactiveExitTimestamp=Sat 2021-12-11 15:25:57 CET +InactiveExitTimestampMonotonic=13030430 +ActiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET +ActiveEnterTimestampMonotonic=13049273 +ActiveExitTimestamp=Sat 2021-12-11 15:25:57 CET +ActiveExitTimestampMonotonic=12997236 +InactiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET +InactiveEnterTimestampMonotonic=13028890 +ConditionTimestamp=Sat 2021-12-11 15:25:57 CET +ConditionTimestampMonotonic=13029539 +AssertTimestamp=Sat 2021-12-11 15:25:57 CET +AssertTimestampMonotonic=13029540 + +$ systemctl show --timestamp=unix systemd-journald | grep Timestamp +WatchdogTimestampMonotonic=0 +ExecMainStartTimestamp=@1639232757 +ExecMainStartTimestampMonotonic=13030408 +ExecMainExitTimestampMonotonic=0 +StateChangeTimestamp=@1639232757 +StateChangeTimestampMonotonic=13049273 +InactiveExitTimestamp=@1639232757 +InactiveExitTimestampMonotonic=13030430 +ActiveEnterTimestamp=@1639232757 +ActiveEnterTimestampMonotonic=13049273 +ActiveExitTimestamp=@1639232757 +ActiveExitTimestampMonotonic=12997236 +InactiveEnterTimestamp=@1639232757 +InactiveEnterTimestampMonotonic=13028890 +ConditionTimestamp=@1639232757 +ConditionTimestampMonotonic=13029539 +AssertTimestamp=@1639232757 +AssertTimestampMonotonic=13029540 +``` + +(cherry picked from commit ed4a5b434517eeebc508379476cf112704e7981c) + +Related: #2017035 +--- + src/basic/time-util.c | 11 +++++++++++ + src/basic/time-util.h | 1 + + src/test/test-time-util.c | 5 +++++ + 3 files changed, 17 insertions(+) + +diff --git a/src/basic/time-util.c b/src/basic/time-util.c +index b659d6905d..c0841af8f3 100644 +--- a/src/basic/time-util.c ++++ b/src/basic/time-util.c +@@ -320,11 +320,13 @@ char *format_timestamp_style( + time_t sec; + size_t n; + bool utc = false, us = false; ++ int r; + + assert(buf); + + switch (style) { + case TIMESTAMP_PRETTY: ++ case TIMESTAMP_UNIX: + break; + case TIMESTAMP_US: + us = true; +@@ -350,6 +352,14 @@ char *format_timestamp_style( + if (t <= 0 || t == USEC_INFINITY) + return NULL; /* Timestamp is unset */ + ++ if (style == TIMESTAMP_UNIX) { ++ r = snprintf(buf, l, "@" USEC_FMT, t / USEC_PER_SEC); /* round down µs → s */ ++ if (r < 0 || (size_t) r >= l) ++ return NULL; /* Doesn't fit */ ++ ++ return buf; ++ } ++ + /* Let's not format times with years > 9999 */ + if (t > USEC_TIMESTAMP_FORMATTABLE_MAX) { + assert(l >= STRLEN("--- XXXX-XX-XX XX:XX:XX") + 1); +@@ -1632,6 +1642,7 @@ static const char* const timestamp_style_table[_TIMESTAMP_STYLE_MAX] = { + [TIMESTAMP_US] = "us", + [TIMESTAMP_UTC] = "utc", + [TIMESTAMP_US_UTC] = "us+utc", ++ [TIMESTAMP_UNIX] = "unix", + }; + + /* Use the macro for enum → string to allow for aliases */ +diff --git a/src/basic/time-util.h b/src/basic/time-util.h +index 895af88299..01a72026e3 100644 +--- a/src/basic/time-util.h ++++ b/src/basic/time-util.h +@@ -34,6 +34,7 @@ typedef enum TimestampStyle { + TIMESTAMP_US, + TIMESTAMP_UTC, + TIMESTAMP_US_UTC, ++ TIMESTAMP_UNIX, + _TIMESTAMP_STYLE_MAX, + _TIMESTAMP_STYLE_INVALID = -EINVAL, + } TimestampStyle; +diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c +index 554693834b..799d271a44 100644 +--- a/src/test/test-time-util.c ++++ b/src/test/test-time-util.c +@@ -325,6 +325,11 @@ TEST(format_timestamp) { + assert_se(parse_timestamp(buf, &y) >= 0); + assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC); + ++ assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UNIX)); ++ log_debug("%s", buf); ++ assert_se(parse_timestamp(buf, &y) >= 0); ++ assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC); ++ + assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UTC)); + log_debug("%s", buf); + assert_se(parse_timestamp(buf, &y) >= 0); diff --git a/SOURCES/0043-systemctl-man-update-docs-for-timestamp.patch b/SOURCES/0043-systemctl-man-update-docs-for-timestamp.patch new file mode 100644 index 0000000..fda8122 --- /dev/null +++ b/SOURCES/0043-systemctl-man-update-docs-for-timestamp.patch @@ -0,0 +1,49 @@ +From 17dfcbd7fe332e7559e168520a57b0241d688485 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Mon, 21 Feb 2022 13:14:18 +0100 +Subject: [PATCH] systemctl,man: update docs for `--timestamp=` + +(cherry picked from commit b58b4a9f379748fec667fb60606de945eaafadbe) + +Related: #2017035 +--- + man/systemctl.xml | 7 +++++++ + src/systemctl/systemctl.c | 7 ++----- + 2 files changed, 9 insertions(+), 5 deletions(-) + +diff --git a/man/systemctl.xml b/man/systemctl.xml +index 3b3d709ab3..f28579e05d 100644 +--- a/man/systemctl.xml ++++ b/man/systemctl.xml +@@ -2305,6 +2305,13 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err + + + ++ ++ ++ ++ @seconds-since-the-epoch ++ ++ ++ + + + +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 9031e685ea..0489796a75 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -296,11 +296,8 @@ static int systemctl_help(void) { + " --boot-loader-entry=NAME\n" + " Boot into a specific boot loader entry on next boot\n" + " --plain Print unit dependencies as a list instead of a tree\n" +- " --timestamp=FORMAT Change format of printed timestamps.\n" +- " 'pretty' (default): 'Day YYYY-MM-DD HH:MM:SS TZ\n" +- " 'us': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU TZ\n" +- " 'utc': 'Day YYYY-MM-DD HH:MM:SS UTC\n" +- " 'us+utc': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU UTC\n" ++ " --timestamp=FORMAT Change format of printed timestamps (pretty, unix,\n" ++ " us, utc, us+utc)\n" + " --read-only Create read-only bind mount\n" + " --mkdir Create directory before mounting, if missing\n" + " --marked Restart/reload previously marked units\n" diff --git a/SOURCES/0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch b/SOURCES/0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch new file mode 100644 index 0000000..4be9398 --- /dev/null +++ b/SOURCES/0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch @@ -0,0 +1,69 @@ +From ab458e74eccf14550711ca024e9176fba7993abc Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 18 Feb 2022 23:09:18 +0100 +Subject: [PATCH] systemctl: make `--timestamp=` affect the `show` verb as well + +Currently the `--timestamp=` option has no effect on timestamps shown by +`systemctl show`, let's fix that. + +Spotted in #22567. + +Before: +``` +$ systemctl show --timestamp=us+utc systemd-journald | grep Timestamp= +ExecMainStartTimestamp=Sat 2021-12-11 15:25:57 CET +StateChangeTimestamp=Sat 2021-12-11 15:25:57 CET +InactiveExitTimestamp=Sat 2021-12-11 15:25:57 CET +ActiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET +ActiveExitTimestamp=Sat 2021-12-11 15:25:57 CET +InactiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET +ConditionTimestamp=Sat 2021-12-11 15:25:57 CET +AssertTimestamp=Sat 2021-12-11 15:25:57 CET +``` + +After: +``` +$ systemctl show --timestamp=us+utc systemd-journald | grep Timestamp= +ExecMainStartTimestamp=Sat 2021-12-11 14:25:57.177848 UTC +StateChangeTimestamp=Sat 2021-12-11 14:25:57.196714 UTC +InactiveExitTimestamp=Sat 2021-12-11 14:25:57.177871 UTC +ActiveEnterTimestamp=Sat 2021-12-11 14:25:57.196714 UTC +ActiveExitTimestamp=Sat 2021-12-11 14:25:57.144677 UTC +InactiveEnterTimestamp=Sat 2021-12-11 14:25:57.176331 UTC +ConditionTimestamp=Sat 2021-12-11 14:25:57.176980 UTC +AssertTimestamp=Sat 2021-12-11 14:25:57.176980 UTC + +``` + +(cherry picked from commit a59e5c625da5a6e0c46e493d55f2f4212e9457ca) + +Related: #2017035 +--- + src/systemctl/systemctl-show.c | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c +index 9b23471990..7a6655da74 100644 +--- a/src/systemctl/systemctl-show.c ++++ b/src/systemctl/systemctl-show.c +@@ -1001,6 +1001,20 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m + } + break; + ++ case SD_BUS_TYPE_UINT64: ++ if (endswith(name, "Timestamp")) { ++ uint64_t timestamp; ++ ++ r = sd_bus_message_read_basic(m, bus_type, ×tamp); ++ if (r < 0) ++ return r; ++ ++ bus_print_property_value(name, expected_value, flags, FORMAT_TIMESTAMP_STYLE(timestamp, arg_timestamp_style)); ++ ++ return 1; ++ } ++ break; ++ + case SD_BUS_TYPE_STRUCT: + + if (contents[0] == SD_BUS_TYPE_UINT32 && streq(name, "Job")) { diff --git a/SOURCES/0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch b/SOURCES/0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch new file mode 100644 index 0000000..6fc7971 --- /dev/null +++ b/SOURCES/0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch @@ -0,0 +1,39 @@ +From fdd32f48af7993305f65989162dedd75a929966a Mon Sep 17 00:00:00 2001 +From: Evgeny Vereshchagin +Date: Tue, 15 Feb 2022 01:13:10 +0000 +Subject: [PATCH] tests: allow running all the services with SYSTEMD_LOG_LEVEL + +It should make it easier to figure out what exactly services do there. +For example, with SYSTEMD_LOG_LEVEL=debug userdbd (v249) prints +``` +varlink-5: New incoming message: {"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{}} +``` +before it crashes and systemd-resolved prints +``` +varlink-21: New incoming message: {"method":"io.systemd.Resolve.ResolveAddress","parameters":{"address":[127,0,0,1],"flags":0,"ifindex":1000000,"family":0}} +``` +and those messages are helpful (especially when scripts causing them +aren't clever enough to keep track of random stuff they send to systemd +:-)) + +(cherry picked from commit bf6ef6b6a9156e5f52ee69ce0c529a246f103e54) + +Related: #2017035 +--- + test/test-functions | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/test/test-functions b/test/test-functions +index dcc893733c..a299f5ff1f 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1142,6 +1142,9 @@ install_systemd() { + + # enable debug logging in PID1 + echo LogLevel=debug >>"$initdir/etc/systemd/system.conf" ++ if [[ -n "$TEST_SYSTEMD_LOG_LEVEL" ]]; then ++ echo DefaultEnvironment=SYSTEMD_LOG_LEVEL="$TEST_SYSTEMD_LOG_LEVEL" >>"$initdir/etc/systemd/system.conf" ++ fi + # store coredumps in journal + echo Storage=journal >>"$initdir/etc/systemd/coredump.conf" + # Propagate SYSTEMD_UNIT_PATH to user systemd managers diff --git a/SOURCES/0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch b/SOURCES/0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch new file mode 100644 index 0000000..44cedde --- /dev/null +++ b/SOURCES/0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch @@ -0,0 +1,46 @@ +From 19d3bf238c41c756b391fc7e66e5217cde42a896 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 8 Feb 2022 11:52:17 +0100 +Subject: [PATCH] coredump: raise the coredump save size on 64bit systems to + 32G (and lower it to 1G on 32bit systems) + +Apparently 2G is too low for various real-life systems. But raising it +universally above 2^32 sounds wrong to me, since that makes no sense on +32bit systems, that we still support. + +Hence, let's raise the limit to 32G on 64bit systems, and *lower* it to +1G on 32bit systems. + +32G is 4 orders of magnitude higher then the old settings. Let's hope +that's enough for now. Should this not be enough we can raise it +further. + +Fixes: #22076 +(cherry picked from commit e677041e7a6988f73de802db6e49d962d432944b) + +Related: #2017035 +--- + src/coredump/coredump.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c +index 6a6e9765d4..fd156370b2 100644 +--- a/src/coredump/coredump.c ++++ b/src/coredump/coredump.c +@@ -48,8 +48,14 @@ + #include "uid-alloc-range.h" + #include "user-util.h" + +-/* The maximum size up to which we process coredumps */ +-#define PROCESS_SIZE_MAX ((uint64_t) (2LLU*1024LLU*1024LLU*1024LLU)) ++/* The maximum size up to which we process coredumps. We use 1G on 32bit systems, and 32G on 64bit systems */ ++#if __SIZEOF_POINTER__ == 4 ++#define PROCESS_SIZE_MAX ((uint64_t) (1LLU*1024LLU*1024LLU*1024LLU)) ++#elif __SIZEOF_POINTER__ == 8 ++#define PROCESS_SIZE_MAX ((uint64_t) (32LLU*1024LLU*1024LLU*1024LLU)) ++#else ++#error "Unexpected pointer size" ++#endif + + /* The maximum size up to which we leave the coredump around on disk */ + #define EXTERNAL_SIZE_MAX PROCESS_SIZE_MAX diff --git a/SOURCES/0047-repart-fix-sector-size-handling.patch b/SOURCES/0047-repart-fix-sector-size-handling.patch new file mode 100644 index 0000000..361fae2 --- /dev/null +++ b/SOURCES/0047-repart-fix-sector-size-handling.patch @@ -0,0 +1,644 @@ +From 389cc9af2087aa5369ac6bf0124d14877d541966 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Fri, 4 Feb 2022 17:39:44 +0100 +Subject: [PATCH] repart: fix sector size handling + +This queries the sector size from libfdisk instead of assuming 512, and +uses that when converting from bytes to the offset/size values libfdisk +expects. + +This is an alternative to Tom Yan's #21823, but prefers using libfdisk's +own ideas of the sector size instead of going directly to the backing +device via ioctls. (libfdisk can after all also operate on regular +files, where the sector size concept doesn't necessarily apply the same +way.) + +This also makes the "grain" variable, i.e. how we'll align the +partitions. Previously this was hardcoded to 4K, and that still will be +the minimum grain we use, but should the sector size be larger than that +we'll use the next multiple of the sector size instead. + +(cherry picked from commit 994b303123ebe6a140bf3e56c66aa66119ae7d95) + +Related: #2017035 +--- + src/partition/repart.c | 212 +++++++++++++++++++++++++---------------- + 1 file changed, 132 insertions(+), 80 deletions(-) + +diff --git a/src/partition/repart.c b/src/partition/repart.c +index d08f47f2c4..0862a37a8d 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -195,6 +195,8 @@ struct Context { + uint64_t start, end, total; + + struct fdisk_context *fdisk_context; ++ uint64_t sector_size; ++ uint64_t grain_size; + + sd_id128_t seed; + }; +@@ -407,9 +409,12 @@ static bool context_drop_one_priority(Context *context) { + return true; + } + +-static uint64_t partition_min_size(const Partition *p) { ++static uint64_t partition_min_size(Context *context, const Partition *p) { + uint64_t sz; + ++ assert(context); ++ assert(p); ++ + /* Calculate the disk space we really need at minimum for this partition. If the partition already + * exists the current size is what we really need. If it doesn't exist yet refuse to allocate less + * than 4K. +@@ -428,50 +433,60 @@ static uint64_t partition_min_size(const Partition *p) { + uint64_t d = 0; + + if (p->encrypt != ENCRYPT_OFF) +- d += round_up_size(LUKS2_METADATA_SIZE, 4096); ++ d += round_up_size(LUKS2_METADATA_SIZE, context->grain_size); + + if (p->copy_blocks_size != UINT64_MAX) +- d += round_up_size(p->copy_blocks_size, 4096); ++ d += round_up_size(p->copy_blocks_size, context->grain_size); + else if (p->format || p->encrypt != ENCRYPT_OFF) { + uint64_t f; + + /* If we shall synthesize a file system, take minimal fs size into account (assumed to be 4K if not known) */ +- f = p->format ? minimal_size_by_fs_name(p->format) : UINT64_MAX; +- d += f == UINT64_MAX ? 4096 : f; ++ f = p->format ? round_up_size(minimal_size_by_fs_name(p->format), context->grain_size) : UINT64_MAX; ++ d += f == UINT64_MAX ? context->grain_size : f; + } + + if (d > sz) + sz = d; + } + +- return MAX(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, sz); ++ return MAX(round_up_size(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, context->grain_size), sz); + } + +-static uint64_t partition_max_size(const Partition *p) { ++static uint64_t partition_max_size(const Context *context, const Partition *p) { ++ uint64_t sm; ++ + /* Calculate how large the partition may become at max. This is generally the configured maximum + * size, except when it already exists and is larger than that. In that case it's the existing size, + * since we never want to shrink partitions. */ + ++ assert(context); ++ assert(p); ++ + if (PARTITION_IS_FOREIGN(p)) { + /* Don't allow changing size of partitions not managed by us */ + assert(p->current_size != UINT64_MAX); + return p->current_size; + } + ++ sm = round_down_size(p->size_max, context->grain_size); ++ + if (p->current_size != UINT64_MAX) +- return MAX(p->current_size, p->size_max); ++ return MAX(p->current_size, sm); + +- return p->size_max; ++ return sm; + } + +-static uint64_t partition_min_size_with_padding(const Partition *p) { ++static uint64_t partition_min_size_with_padding(Context *context, const Partition *p) { + uint64_t sz; + + /* Calculate the disk space we need for this partition plus any free space coming after it. This + * takes user configured padding into account as well as any additional whitespace needed to align + * the next partition to 4K again. */ + +- sz = partition_min_size(p); ++ assert(context); ++ assert(p); ++ ++ sz = partition_min_size(context, p); + + if (p->padding_min != UINT64_MAX) + sz += p->padding_min; +@@ -479,11 +494,11 @@ static uint64_t partition_min_size_with_padding(const Partition *p) { + if (PARTITION_EXISTS(p)) { + /* If the partition wasn't aligned, add extra space so that any we might add will be aligned */ + assert(p->offset != UINT64_MAX); +- return round_up_size(p->offset + sz, 4096) - p->offset; ++ return round_up_size(p->offset + sz, context->grain_size) - p->offset; + } + + /* If this is a new partition we'll place it aligned, hence we just need to round up the required size here */ +- return round_up_size(sz, 4096); ++ return round_up_size(sz, context->grain_size); + } + + static uint64_t free_area_available(const FreeArea *a) { +@@ -495,9 +510,12 @@ static uint64_t free_area_available(const FreeArea *a) { + return a->size - a->allocated; + } + +-static uint64_t free_area_available_for_new_partitions(const FreeArea *a) { ++static uint64_t free_area_available_for_new_partitions(Context *context, const FreeArea *a) { + uint64_t avail; + ++ assert(context); ++ assert(a); ++ + /* Similar to free_area_available(), but takes into account that the required size and padding of the + * preceding partition is honoured. */ + +@@ -505,16 +523,16 @@ static uint64_t free_area_available_for_new_partitions(const FreeArea *a) { + if (a->after) { + uint64_t need, space_end, new_end; + +- need = partition_min_size_with_padding(a->after); ++ need = partition_min_size_with_padding(context, a->after); + + assert(a->after->offset != UINT64_MAX); + assert(a->after->current_size != UINT64_MAX); + + /* Calculate where the free area ends, based on the offset of the partition preceding it */ +- space_end = round_up_size(a->after->offset + a->after->current_size, 4096) + avail; ++ space_end = round_up_size(a->after->offset + a->after->current_size, context->grain_size) + avail; + + /* Calculate where the partition would end when we give it as much as it needs */ +- new_end = round_up_size(a->after->offset + need, 4096); ++ new_end = round_up_size(a->after->offset + need, context->grain_size); + + /* Calculate saturated difference of the two: that's how much we have free for other partitions */ + return LESS_BY(space_end, new_end); +@@ -523,15 +541,18 @@ static uint64_t free_area_available_for_new_partitions(const FreeArea *a) { + return avail; + } + +-static int free_area_compare(FreeArea *const *a, FreeArea *const*b) { +- return CMP(free_area_available_for_new_partitions(*a), +- free_area_available_for_new_partitions(*b)); ++static int free_area_compare(FreeArea *const *a, FreeArea *const*b, Context *context) { ++ assert(context); ++ ++ return CMP(free_area_available_for_new_partitions(context, *a), ++ free_area_available_for_new_partitions(context, *b)); + } + +-static uint64_t charge_size(uint64_t total, uint64_t amount) { ++static uint64_t charge_size(Context *context, uint64_t total, uint64_t amount) { ++ assert(context); + /* Subtract the specified amount from total, rounding up to multiple of 4K if there's room */ + assert(amount <= total); +- return LESS_BY(total, round_up_size(amount, 4096)); ++ return LESS_BY(total, round_up_size(amount, context->grain_size)); + } + + static uint64_t charge_weight(uint64_t total, uint64_t amount) { +@@ -545,14 +566,14 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_ + assert(context); + + /* Sort free areas by size, putting smallest first */ +- typesafe_qsort(context->free_areas, context->n_free_areas, free_area_compare); ++ typesafe_qsort_r(context->free_areas, context->n_free_areas, free_area_compare, context); + + /* In any case return size of the largest free area (i.e. not the size of all free areas + * combined!) */ + if (ret_largest_free_area) + *ret_largest_free_area = + context->n_free_areas == 0 ? 0 : +- free_area_available_for_new_partitions(context->free_areas[context->n_free_areas-1]); ++ free_area_available_for_new_partitions(context, context->free_areas[context->n_free_areas-1]); + + /* A simple first-fit algorithm. We return true if we can fit the partitions in, otherwise false. */ + LIST_FOREACH(partitions, p, context->partitions) { +@@ -565,13 +586,13 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_ + continue; + + /* How much do we need to fit? */ +- required = partition_min_size_with_padding(p); +- assert(required % 4096 == 0); ++ required = partition_min_size_with_padding(context, p); ++ assert(required % context->grain_size == 0); + + for (size_t i = 0; i < context->n_free_areas; i++) { + a = context->free_areas[i]; + +- if (free_area_available_for_new_partitions(a) >= required) { ++ if (free_area_available_for_new_partitions(context, a) >= required) { + fits = true; + break; + } +@@ -683,8 +704,8 @@ static int context_grow_partitions_phase( + if (r < 0) + return r; + +- rsz = partition_min_size(p); +- xsz = partition_max_size(p); ++ rsz = partition_min_size(context, p); ++ xsz = partition_max_size(context, p); + + if (phase == PHASE_OVERCHARGE && rsz > share) { + /* This partition needs more than its calculated share. Let's assign +@@ -712,13 +733,13 @@ static int context_grow_partitions_phase( + /* Never change of foreign partitions (i.e. those we don't manage) */ + p->new_size = p->current_size; + else +- p->new_size = MAX(round_down_size(share, 4096), rsz); ++ p->new_size = MAX(round_down_size(share, context->grain_size), rsz); + + charge = true; + } + + if (charge) { +- *span = charge_size(*span, p->new_size); ++ *span = charge_size(context, *span, p->new_size); + *weight_sum = charge_weight(*weight_sum, p->weight); + } + +@@ -742,7 +763,7 @@ static int context_grow_partitions_phase( + charge = try_again = true; + } else if (phase == PHASE_DISTRIBUTE) { + +- p->new_padding = round_down_size(share, 4096); ++ p->new_padding = round_down_size(share, context->grain_size); + if (p->padding_min != UINT64_MAX && p->new_padding < p->padding_min) + p->new_padding = p->padding_min; + +@@ -750,7 +771,7 @@ static int context_grow_partitions_phase( + } + + if (charge) { +- *span = charge_size(*span, p->new_padding); ++ *span = charge_size(context, *span, p->new_padding); + *weight_sum = charge_weight(*weight_sum, p->padding_weight); + } + +@@ -779,7 +800,7 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) { + assert(a->after->offset != UINT64_MAX); + assert(a->after->current_size != UINT64_MAX); + +- span += round_up_size(a->after->offset + a->after->current_size, 4096) - a->after->offset; ++ span += round_up_size(a->after->offset + a->after->current_size, context->grain_size) - a->after->offset; + } + + for (GrowPartitionPhase phase = 0; phase < _GROW_PARTITION_PHASE_MAX;) { +@@ -799,13 +820,13 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) { + assert(a->after->new_size != UINT64_MAX); + + /* Calculate new size and align (but ensure this doesn't shrink the size) */ +- m = MAX(a->after->new_size, round_down_size(a->after->new_size + span, 4096)); ++ m = MAX(a->after->new_size, round_down_size(a->after->new_size + span, context->grain_size)); + +- xsz = partition_max_size(a->after); ++ xsz = partition_max_size(context, a->after); + if (xsz != UINT64_MAX && m > xsz) + m = xsz; + +- span = charge_size(span, m - a->after->new_size); ++ span = charge_size(context, span, m - a->after->new_size); + a->after->new_size = m; + } + +@@ -824,13 +845,13 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) { + continue; + + assert(p->new_size != UINT64_MAX); +- m = MAX(p->new_size, round_down_size(p->new_size + span, 4096)); ++ m = MAX(p->new_size, round_down_size(p->new_size + span, context->grain_size)); + +- xsz = partition_max_size(p); ++ xsz = partition_max_size(context, p); + if (xsz != UINT64_MAX && m > xsz) + m = xsz; + +- span = charge_size(span, m - p->new_size); ++ span = charge_size(context, span, m - p->new_size); + p->new_size = m; + + if (span == 0) +@@ -910,7 +931,7 @@ static void context_place_partitions(Context *context) { + } else + start = context->start; + +- start = round_up_size(start, 4096); ++ start = round_up_size(start, context->grain_size); + left = a->size; + + LIST_FOREACH(partitions, p, context->partitions) { +@@ -1422,6 +1443,8 @@ static int determine_current_padding( + struct fdisk_context *c, + struct fdisk_table *t, + struct fdisk_partition *p, ++ uint64_t secsz, ++ uint64_t grainsz, + uint64_t *ret) { + + size_t n_partitions; +@@ -1435,8 +1458,8 @@ static int determine_current_padding( + return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition has no end!"); + + offset = fdisk_partition_get_end(p); +- assert(offset < UINT64_MAX / 512); +- offset *= 512; ++ assert(offset < UINT64_MAX / secsz); ++ offset *= secsz; + + n_partitions = fdisk_table_get_nents(t); + for (size_t i = 0; i < n_partitions; i++) { +@@ -1454,8 +1477,8 @@ static int determine_current_padding( + continue; + + start = fdisk_partition_get_start(q); +- assert(start < UINT64_MAX / 512); +- start *= 512; ++ assert(start < UINT64_MAX / secsz); ++ start *= secsz; + + if (start >= offset && (next == UINT64_MAX || next > start)) + next = start; +@@ -1467,16 +1490,16 @@ static int determine_current_padding( + assert(next < UINT64_MAX); + next++; /* The last LBA is one sector before the end */ + +- assert(next < UINT64_MAX / 512); +- next *= 512; ++ assert(next < UINT64_MAX / secsz); ++ next *= secsz; + + if (offset > next) + return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition end beyond disk end."); + } + + assert(next >= offset); +- offset = round_up_size(offset, 4096); +- next = round_down_size(next, 4096); ++ offset = round_up_size(offset, grainsz); ++ next = round_down_size(next, grainsz); + + *ret = LESS_BY(next, offset); /* Saturated subtraction, rounding might have fucked things up */ + return 0; +@@ -1549,6 +1572,8 @@ static int context_load_partition_table( + bool from_scratch = false; + sd_id128_t disk_uuid; + size_t n_partitions; ++ unsigned long secsz; ++ uint64_t grainsz; + int r; + + assert(context); +@@ -1583,8 +1608,12 @@ static int context_load_partition_table( + if (r < 0) + return log_error_errno(errno, "Failed to stat block device '%s': %m", node); + +- if (S_ISREG(st.st_mode) && st.st_size == 0) ++ if (S_ISREG(st.st_mode) && st.st_size == 0) { ++ /* User the fallback values if we have no better idea */ ++ context->sector_size = 512; ++ context->grain_size = 4096; + return /* from_scratch = */ true; ++ } + + r = -EINVAL; + } +@@ -1602,6 +1631,23 @@ static int context_load_partition_table( + if (flock(fdisk_get_devfd(c), arg_dry_run ? LOCK_SH : LOCK_EX) < 0) + return log_error_errno(errno, "Failed to lock block device: %m"); + ++ /* The offsets/sizes libfdisk returns to us will be in multiple of the sector size of the ++ * device. This is typically 512, and sometimes 4096. Let's query libfdisk once for it, and then use ++ * it for all our needs. Note that the values we use ourselves always are in bytes though, thus mean ++ * the same thing universally. Also note that regardless what kind of sector size is in use we'll ++ * place partitions at multiples of 4K. */ ++ secsz = fdisk_get_sector_size(c); ++ ++ /* Insist on a power of two, and that it's a multiple of 512, i.e. the traditional sector size. */ ++ if (secsz < 512 || secsz != 1UL << log2u64(secsz)) ++ return log_error_errno(errno, "Sector size %lu is not a power of two larger than 512? Refusing.", secsz); ++ ++ /* Use at least 4K, and ensure it's a multiple of the sector size, regardless if that is smaller or ++ * larger */ ++ grainsz = secsz < 4096 ? 4096 : secsz; ++ ++ log_debug("Sector size of device is %lu bytes. Using grain size of %" PRIu64 ".", secsz, grainsz); ++ + switch (arg_empty) { + + case EMPTY_REFUSE: +@@ -1732,12 +1778,12 @@ static int context_load_partition_table( + } + + sz = fdisk_partition_get_size(p); +- assert_se(sz <= UINT64_MAX/512); +- sz *= 512; ++ assert_se(sz <= UINT64_MAX/secsz); ++ sz *= secsz; + + start = fdisk_partition_get_start(p); +- assert_se(start <= UINT64_MAX/512); +- start *= 512; ++ assert_se(start <= UINT64_MAX/secsz); ++ start *= secsz; + + partno = fdisk_partition_get_partno(p); + +@@ -1762,7 +1808,7 @@ static int context_load_partition_table( + pp->current_partition = p; + fdisk_ref_partition(p); + +- r = determine_current_padding(c, t, p, &pp->current_padding); ++ r = determine_current_padding(c, t, p, secsz, grainsz, &pp->current_padding); + if (r < 0) + return r; + +@@ -1795,7 +1841,7 @@ static int context_load_partition_table( + np->current_partition = p; + fdisk_ref_partition(p); + +- r = determine_current_padding(c, t, p, &np->current_padding); ++ r = determine_current_padding(c, t, p, secsz, grainsz, &np->current_padding); + if (r < 0) + return r; + +@@ -1812,26 +1858,26 @@ static int context_load_partition_table( + + add_initial_free_area: + nsectors = fdisk_get_nsectors(c); +- assert(nsectors <= UINT64_MAX/512); +- nsectors *= 512; ++ assert(nsectors <= UINT64_MAX/secsz); ++ nsectors *= secsz; + + first_lba = fdisk_get_first_lba(c); +- assert(first_lba <= UINT64_MAX/512); +- first_lba *= 512; ++ assert(first_lba <= UINT64_MAX/secsz); ++ first_lba *= secsz; + + last_lba = fdisk_get_last_lba(c); + assert(last_lba < UINT64_MAX); + last_lba++; +- assert(last_lba <= UINT64_MAX/512); +- last_lba *= 512; ++ assert(last_lba <= UINT64_MAX/secsz); ++ last_lba *= secsz; + + assert(last_lba >= first_lba); + + if (left_boundary == UINT64_MAX) { + /* No partitions at all? Then the whole disk is up for grabs. */ + +- first_lba = round_up_size(first_lba, 4096); +- last_lba = round_down_size(last_lba, 4096); ++ first_lba = round_up_size(first_lba, grainsz); ++ last_lba = round_down_size(last_lba, grainsz); + + if (last_lba > first_lba) { + r = context_add_free_area(context, last_lba - first_lba, NULL); +@@ -1842,9 +1888,9 @@ add_initial_free_area: + /* Add space left of first partition */ + assert(left_boundary >= first_lba); + +- first_lba = round_up_size(first_lba, 4096); +- left_boundary = round_down_size(left_boundary, 4096); +- last_lba = round_down_size(last_lba, 4096); ++ first_lba = round_up_size(first_lba, grainsz); ++ left_boundary = round_down_size(left_boundary, grainsz); ++ last_lba = round_down_size(last_lba, grainsz); + + if (left_boundary > first_lba) { + r = context_add_free_area(context, left_boundary - first_lba, NULL); +@@ -1856,6 +1902,8 @@ add_initial_free_area: + context->start = first_lba; + context->end = last_lba; + context->total = nsectors; ++ context->sector_size = secsz; ++ context->grain_size = grainsz; + context->fdisk_context = TAKE_PTR(c); + + return from_scratch; +@@ -2360,7 +2408,7 @@ static int context_discard_range( + if (S_ISBLK(st.st_mode)) { + uint64_t range[2], end; + +- range[0] = round_up_size(offset, 512); ++ range[0] = round_up_size(offset, context->sector_size); + + if (offset > UINT64_MAX - size) + return -ERANGE; +@@ -2369,7 +2417,7 @@ static int context_discard_range( + if (end <= range[0]) + return 0; + +- range[1] = round_down_size(end - range[0], 512); ++ range[1] = round_down_size(end - range[0], context->sector_size); + if (range[1] <= 0) + return 0; + +@@ -2519,6 +2567,7 @@ static int context_wipe_and_discard(Context *context, bool from_scratch) { + } + + static int partition_encrypt( ++ Context *context, + Partition *p, + const char *node, + struct crypt_device **ret_cd, +@@ -2532,6 +2581,7 @@ static int partition_encrypt( + sd_id128_t uuid; + int r; + ++ assert(context); + assert(p); + assert(p->encrypt != ENCRYPT_OFF); + +@@ -2579,7 +2629,7 @@ static int partition_encrypt( + volume_key_size, + &(struct crypt_params_luks2) { + .label = strempty(p->new_label), +- .sector_size = 512U, ++ .sector_size = context->sector_size, + }); + if (r < 0) + return log_error_errno(r, "Failed to LUKS2 format future partition: %m"); +@@ -2735,7 +2785,7 @@ static int context_copy_blocks(Context *context) { + if (r < 0) + return log_error_errno(r, "Failed to lock loopback device: %m"); + +- r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd); ++ r = partition_encrypt(context, p, d->node, &cd, &encrypted, &encrypted_dev_fd); + if (r < 0) + return log_error_errno(r, "Failed to encrypt device: %m"); + +@@ -2988,7 +3038,7 @@ static int context_mkfs(Context *context) { + return log_error_errno(r, "Failed to lock loopback device: %m"); + + if (p->encrypt != ENCRYPT_OFF) { +- r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd); ++ r = partition_encrypt(context, p, d->node, &cd, &encrypted, &encrypted_dev_fd); + if (r < 0) + return log_error_errno(r, "Failed to encrypt device: %m"); + +@@ -3307,13 +3357,13 @@ static int context_mangle_partitions(Context *context) { + + if (p->new_size != p->current_size) { + assert(p->new_size >= p->current_size); +- assert(p->new_size % 512 == 0); ++ assert(p->new_size % context->sector_size == 0); + + r = fdisk_partition_size_explicit(p->current_partition, true); + if (r < 0) + return log_error_errno(r, "Failed to enable explicit sizing: %m"); + +- r = fdisk_partition_set_size(p->current_partition, p->new_size / 512); ++ r = fdisk_partition_set_size(p->current_partition, p->new_size / context->sector_size); + if (r < 0) + return log_error_errno(r, "Failed to grow partition: %m"); + +@@ -3353,8 +3403,8 @@ static int context_mangle_partitions(Context *context) { + _cleanup_(fdisk_unref_parttypep) struct fdisk_parttype *t = NULL; + + assert(!p->new_partition); +- assert(p->offset % 512 == 0); +- assert(p->new_size % 512 == 0); ++ assert(p->offset % context->sector_size == 0); ++ assert(p->new_size % context->sector_size == 0); + assert(!sd_id128_is_null(p->new_uuid)); + assert(p->new_label); + +@@ -3378,11 +3428,11 @@ static int context_mangle_partitions(Context *context) { + if (r < 0) + return log_error_errno(r, "Failed to enable explicit sizing: %m"); + +- r = fdisk_partition_set_start(q, p->offset / 512); ++ r = fdisk_partition_set_start(q, p->offset / context->sector_size); + if (r < 0) + return log_error_errno(r, "Failed to position partition: %m"); + +- r = fdisk_partition_set_size(q, p->new_size / 512); ++ r = fdisk_partition_set_size(q, p->new_size / context->sector_size); + if (r < 0) + return log_error_errno(r, "Failed to grow partition: %m"); + +@@ -4746,18 +4796,20 @@ done: + } + + static int determine_auto_size(Context *c) { +- uint64_t sum = round_up_size(GPT_METADATA_SIZE, 4096); ++ uint64_t sum; + Partition *p; + + assert_se(c); + ++ sum = round_up_size(GPT_METADATA_SIZE, 4096); ++ + LIST_FOREACH(partitions, p, c->partitions) { + uint64_t m; + + if (p->dropped) + continue; + +- m = partition_min_size_with_padding(p); ++ m = partition_min_size_with_padding(c, p); + if (m > UINT64_MAX - sum) + return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Image would grow too large, refusing."); + diff --git a/SOURCES/0048-mkdir-allow-to-create-directory-whose-path-contains-.patch b/SOURCES/0048-mkdir-allow-to-create-directory-whose-path-contains-.patch new file mode 100644 index 0000000..5f06daf --- /dev/null +++ b/SOURCES/0048-mkdir-allow-to-create-directory-whose-path-contains-.patch @@ -0,0 +1,36 @@ +From 77cde7d38bf8cd3438a867a6330c314f4580e43b Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Wed, 2 Feb 2022 14:20:48 +0900 +Subject: [PATCH] mkdir: allow to create directory whose path contains symlink + +Fixes a regression caused by 3008a6f21c1c42efe852d69798a2fdd63fe657ec. + +Before the commit, when `mkdir_parents_internal()` is called from `mkdir_p()`, +it uses `_mkdir()` as `flag` is zero. But after the commit, `mkdir_safe_internal()` +is always used. Hence, if the path contains a symlink, it fails with -ENOTDIR. + +To fix the issue, this makes `mkdir_p()` calls `mkdir_parents_internal()` with +MKDIR_FOLLOW_SYMLINK flag. + +Fixes #22334. + +(cherry picked from commit 5117059ee9f84ed2fd37801ec0b90473db475422) + +Related: #2017035 +--- + src/basic/mkdir.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c +index 6e2b94d024..88782ab0d4 100644 +--- a/src/basic/mkdir.c ++++ b/src/basic/mkdir.c +@@ -162,7 +162,7 @@ int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t ui + + assert(_mkdirat != mkdirat); + +- r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags, _mkdirat); ++ r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags | MKDIR_FOLLOW_SYMLINK, _mkdirat); + if (r < 0) + return r; + diff --git a/SOURCES/0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch b/SOURCES/0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch new file mode 100644 index 0000000..3d899a4 --- /dev/null +++ b/SOURCES/0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch @@ -0,0 +1,26 @@ +From 848b8dde6fe096b317abf0b4996f21c8fe6a39ce Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Wed, 2 Feb 2022 15:06:27 +0900 +Subject: [PATCH] mkdir: CHASE_NONEXISTENT cannot used in + chase_symlinks_and_stat() + +(cherry picked from commit e22916e61d1fdb7b46918b605ebf783d9017f9d8) + +Related: #2017035 +--- + src/basic/mkdir.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c +index 88782ab0d4..51a0d74e87 100644 +--- a/src/basic/mkdir.c ++++ b/src/basic/mkdir.c +@@ -42,7 +42,7 @@ int mkdir_safe_internal( + if ((flags & MKDIR_FOLLOW_SYMLINK) && S_ISLNK(st.st_mode)) { + _cleanup_free_ char *p = NULL; + +- r = chase_symlinks_and_stat(path, NULL, CHASE_NONEXISTENT, &p, &st, NULL); ++ r = chase_symlinks_and_stat(path, NULL, 0, &p, &st, NULL); + if (r < 0) + return r; + if (r == 0) diff --git a/SOURCES/0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch b/SOURCES/0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch new file mode 100644 index 0000000..59c3aef --- /dev/null +++ b/SOURCES/0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch @@ -0,0 +1,137 @@ +From 9cfc2fd3c58609252b3fd203af95bec1aab1b832 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 23 Dec 2021 12:55:40 +0100 +Subject: [PATCH] meson: move efi file lists closer to where they are used + +The goal is to have the detection of features and paths done first, and +then the build target constructions second. + +(cherry picked from commit 65dcf9f9a0d877de0dc53558547462a7f1750c78) + +Related: #2017035 +--- + src/boot/efi/meson.build | 104 +++++++++++++++++++-------------------- + 1 file changed, 51 insertions(+), 53 deletions(-) + +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index e10e51cf4e..1125c64ea3 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -99,59 +99,6 @@ if efi_lds == '' + subdir_done() + endif + +-efi_headers = files(''' +- bcd.h +- console.h +- cpio.h +- devicetree.h +- disk.h +- drivers.h +- graphics.h +- linux.h +- measure.h +- missing_efi.h +- pe.h +- random-seed.h +- shim.h +- splash.h +- util.h +- xbootldr.h +-'''.split()) +- +-common_sources = ''' +- assert.c +- devicetree.c +- disk.c +- graphics.c +- measure.c +- pe.c +- secure-boot.c +- util.c +-'''.split() +- +-systemd_boot_sources = ''' +- bcd.c +- boot.c +- console.c +- drivers.c +- random-seed.c +- shim.c +- xbootldr.c +-'''.split() +- +-stub_sources = ''' +- cpio.c +- initrd.c +- splash.c +- stub.c +-'''.split() +- +-if efi_arch[1] in ['ia32', 'x86_64'] +- stub_sources += 'linux_x86.c' +-else +- stub_sources += 'linux.c' +-endif +- + conf.set10('HAVE_GNU_EFI', true) + conf.set_quoted('EFI_MACHINE_TYPE_NAME', efi_arch[0]) + +@@ -332,6 +279,57 @@ if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[ + efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument'] + endif + ++############################################################ ++ ++efi_headers = files( ++ 'bcd.h', ++ 'console.h', ++ 'cpio.h', ++ 'devicetree.h', ++ 'disk.h', ++ 'drivers.h', ++ 'graphics.h', ++ 'linux.h', ++ 'measure.h', ++ 'missing_efi.h', ++ 'pe.h', ++ 'random-seed.h', ++ 'shim.h', ++ 'splash.h', ++ 'util.h', ++ 'xbootldr.h') ++ ++common_sources = [ ++ 'assert.c', ++ 'devicetree.c', ++ 'disk.c', ++ 'graphics.c', ++ 'measure.c', ++ 'pe.c', ++ 'secure-boot.c', ++ 'util.c'] ++ ++systemd_boot_sources = [ ++ 'bcd.c', ++ 'boot.c', ++ 'console.c', ++ 'drivers.c', ++ 'random-seed.c', ++ 'shim.c', ++ 'xbootldr.c'] ++ ++stub_sources = [ ++ 'cpio.c', ++ 'initrd.c', ++ 'splash.c', ++ 'stub.c'] ++ ++if efi_arch[1] in ['ia32', 'x86_64'] ++ stub_sources += 'linux_x86.c' ++else ++ stub_sources += 'linux.c' ++endif ++ + systemd_boot_objects = [] + stub_objects = [] + foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources diff --git a/SOURCES/0051-meson-move-efi-summary-section-to-src-boot-efi.patch b/SOURCES/0051-meson-move-efi-summary-section-to-src-boot-efi.patch new file mode 100644 index 0000000..d448f5f --- /dev/null +++ b/SOURCES/0051-meson-move-efi-summary-section-to-src-boot-efi.patch @@ -0,0 +1,77 @@ +From a6c93d3200c0fd0eeee3a725b428cee94108cf48 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 23 Dec 2021 13:05:01 +0100 +Subject: [PATCH] meson: move efi summary() section to src/boot/efi + +This way we can add the entries more naturally in the same place where +they are defined. + +(cherry picked from commit 3f871f120520aa2d11218735b0741bacc0309b4d) + +Related: #2017035 +--- + meson.build | 16 ++++------------ + src/boot/efi/meson.build | 9 +++++++++ + 2 files changed, 13 insertions(+), 12 deletions(-) + +diff --git a/meson.build b/meson.build +index e07875a054..f040eeab99 100644 +--- a/meson.build ++++ b/meson.build +@@ -43,6 +43,10 @@ endif + skip_deps = want_ossfuzz or want_libfuzzer + fuzzer_build = want_ossfuzz or want_libfuzzer + ++# Create a title-less summary section early, so it ends up first in the output. ++# More items are added later after they have been detected. ++summary({'build mode' : get_option('mode')}) ++ + ##################################################################### + + # Try to install the git pre-commit hook +@@ -3902,7 +3906,6 @@ alt_time_epoch = run_command('date', '-Is', '-u', '-d', '@@0@'.format(time_epoch + check : true).stdout().strip() + + summary({ +- 'build mode' : get_option('mode'), + 'split /usr' : split_usr, + 'split bin-sbin' : split_bin, + 'prefix directory' : prefixdir, +@@ -3960,17 +3963,6 @@ summary({ + # CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS} + # LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS} + +-if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_GNU_EFI') == 1 +- summary({ +- 'EFI machine type' : efi_arch[0], +- 'EFI CC' : '@0@'.format(' '.join(efi_cc)), +- 'EFI LD' : efi_ld, +- 'EFI lds' : efi_lds, +- 'EFI crt0' : efi_crt0, +- 'EFI include directory' : efi_incdir}, +- section : 'Extensible Firmware Interface') +-endif +- + found = [] + missing = [] + +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 1125c64ea3..dd318079fc 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -279,6 +279,15 @@ if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[ + efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument'] + endif + ++summary({ ++ 'EFI machine type' : efi_arch[0], ++ 'EFI CC' : '@0@'.format(' '.join(efi_cc)), ++ 'EFI LD' : efi_ld, ++ 'EFI lds' : efi_lds, ++ 'EFI crt0' : efi_crt0, ++ 'EFI include directory' : efi_incdir}, ++ section : 'Extensible Firmware Interface') ++ + ############################################################ + + efi_headers = files( diff --git a/SOURCES/0052-meson-report-SBAT-settings.patch b/SOURCES/0052-meson-report-SBAT-settings.patch new file mode 100644 index 0000000..c8e5584 --- /dev/null +++ b/SOURCES/0052-meson-report-SBAT-settings.patch @@ -0,0 +1,53 @@ +From 340f8e02cf4db0e6b3733bfcc14630b3ce8181a5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 23 Dec 2021 13:19:42 +0100 +Subject: [PATCH] meson: report SBAT settings + +(cherry picked from commit e4e44a0107645891e82a538100a7590eb59a516c) + +Related: #2017035 +--- + src/boot/efi/meson.build | 14 +++++++++++++- + 1 file changed, 13 insertions(+), 1 deletion(-) + +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index dd318079fc..e628068596 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -130,7 +130,6 @@ elif get_option('sbat-distro') != '' + if (value == '' or value == 'auto') and not meson.is_cross_build() + cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1]) + value = run_command(sh, '-c', cmd).stdout().strip() +- message('@0@ (from @1@): @2@'.format(sbatvar[0], sbatvar[1], value)) + endif + if value == '' + error('Required @0@ option not set and autodetection failed'.format(sbatvar[0])) +@@ -147,8 +146,11 @@ elif get_option('sbat-distro') != '' + pkgver = get_option('sbat-distro-version') + if pkgver == '' + efi_conf.set('SBAT_DISTRO_VERSION', 'GIT_VERSION') ++ # This is determined during build, not configuration, so we can't display it yet. ++ sbat_distro_version_display = '(git version)' + else + efi_conf.set_quoted('SBAT_DISTRO_VERSION', pkgver) ++ sbat_distro_version_display = pkgver + endif + endif + +@@ -288,6 +290,16 @@ summary({ + 'EFI include directory' : efi_incdir}, + section : 'Extensible Firmware Interface') + ++if efi_conf.get('SBAT_DISTRO', '') != '' ++ summary({ ++ 'SBAT distro': efi_conf.get('SBAT_DISTRO'), ++ 'SBAT distro generation': efi_conf.get('SBAT_DISTRO_GENERATION'), ++ 'SBAT distro version': sbat_distro_version_display, ++ 'SBAT distro summary': efi_conf.get('SBAT_DISTRO_SUMMARY'), ++ 'SBAT distro URL': efi_conf.get('SBAT_DISTRO_URL')}, ++ section : 'Extensible Firmware Interface') ++endif ++ + ############################################################ + + efi_headers = files( diff --git a/SOURCES/0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch b/SOURCES/0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch new file mode 100644 index 0000000..3e6a7d4 --- /dev/null +++ b/SOURCES/0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch @@ -0,0 +1,79 @@ +From 2d3b47dcd5a4b356c481f89c483db3eb308fcab9 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Tue, 28 Dec 2021 13:10:39 +0100 +Subject: [PATCH] boot: Build BCD parser only on arches supported by Windows + +(cherry picked from commit 77fcf28cb88b302453b4c991a6571cb37f10634d) + +Related: #2017035 +--- + src/boot/efi/boot.c | 2 ++ + src/boot/efi/meson.build | 21 ++++++++++++--------- + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c +index 0286914b8b..83358406f2 100644 +--- a/src/boot/efi/boot.c ++++ b/src/boot/efi/boot.c +@@ -1941,6 +1941,7 @@ static void config_entry_add_osx(Config *config) { + } + + static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir) { ++#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__) + _cleanup_freepool_ CHAR8 *bcd = NULL; + CHAR16 *title = NULL; + EFI_STATUS err; +@@ -1961,6 +1962,7 @@ static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FIL + config_entry_add_loader_auto(config, device, root_dir, NULL, + L"auto-windows", 'w', title ?: L"Windows Boot Manager", + L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi"); ++#endif + } + + static void config_entry_add_linux( +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index e628068596..6a0c8da9ba 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -331,7 +331,6 @@ common_sources = [ + 'util.c'] + + systemd_boot_sources = [ +- 'bcd.c', + 'boot.c', + 'console.c', + 'drivers.c', +@@ -351,6 +350,18 @@ else + stub_sources += 'linux.c' + endif + ++# BCD parser only makes sense on arches that Windows supports. ++if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64'] ++ systemd_boot_sources += 'bcd.c' ++ tests += [ ++ [['src/boot/efi/test-bcd.c'], ++ [], ++ [libzstd], ++ [], ++ 'HAVE_ZSTD'], ++ ] ++endif ++ + systemd_boot_objects = [] + stub_objects = [] + foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources +@@ -408,14 +419,6 @@ endforeach + + ############################################################ + +-tests += [ +- [['src/boot/efi/test-bcd.c'], +- [], +- [libzstd], +- [], +- 'HAVE_ZSTD'], +-] +- + test_efi_disk_img = custom_target( + 'test-efi-disk.img', + input : [efi_stubs[0][0], efi_stubs[1][1]], diff --git a/SOURCES/0054-meson-Remove-efi-cc-option.patch b/SOURCES/0054-meson-Remove-efi-cc-option.patch new file mode 100644 index 0000000..ffcf6ea --- /dev/null +++ b/SOURCES/0054-meson-Remove-efi-cc-option.patch @@ -0,0 +1,96 @@ +From 38afe3074812ab355bc20a36d41871f1b4f4386b Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Wed, 29 Dec 2021 15:02:04 +0100 +Subject: [PATCH] meson: Remove efi-cc option + +Changing the efi compiler this way doesn't really work. The gnu-efi +header checks as well as supported compiler flag checks use the +regular cc that meson detects. Changing the compiler this way will +end up with bad compiler flags. For the very same reason, this does +not work with a cross-compiler without going through proper meson +cross-compilation steps either. + +The proper way to build systemd-boot with a different compiler is to +use a different build folder and then just use the proper ninja build +target to only build the bootloader/stub. + +(cherry picked from commit 52adf0e91ef00d21a2e83f7669d0823667ce6b6c) + +Related: #2017035 +--- + meson_options.txt | 2 -- + src/boot/efi/meson.build | 14 ++++---------- + 2 files changed, 4 insertions(+), 12 deletions(-) + +diff --git a/meson_options.txt b/meson_options.txt +index 401f0933d7..62cdeb4201 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -414,8 +414,6 @@ option('dbus', type : 'combo', choices : ['auto', 'true', 'false'], + + option('gnu-efi', type : 'combo', choices : ['auto', 'true', 'false'], + description : 'gnu-efi support for sd-boot') +-option('efi-cc', type : 'array', +- description : 'the compiler to use for EFI modules') + # Note that LLD does not support PE/COFF relocations + # https://lists.llvm.org/pipermail/llvm-dev/2021-March/149234.html + option('efi-ld', type : 'combo', choices : ['auto', 'bfd', 'gold'], +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 6a0c8da9ba..11e6bf2dd0 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -44,10 +44,6 @@ if not cc.has_header_symbol('efi.h', 'EFI_IMAGE_MACHINE_X64', + endif + + objcopy = find_program('objcopy') +-efi_cc = get_option('efi-cc') +-if efi_cc.length() == 0 +- efi_cc = cc.cmd_array() +-endif + + efi_ld = get_option('efi-ld') + if efi_ld == 'auto' +@@ -62,7 +58,7 @@ efi_libdir = '' + foreach dir : [get_option('efi-libdir'), + '/usr/lib/gnuefi' / efi_arch[0], + run_command('realpath', '-e', +- '/usr/lib' / run_command(efi_cc, '-print-multi-os-directory').stdout().strip()).stdout().strip()] ++ '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory').stdout().strip()).stdout().strip()] + if dir != '' and fs.is_dir(dir) + efi_libdir = dir + break +@@ -275,15 +271,13 @@ if run_command('grep', '-q', '__CTOR_LIST__', efi_lds).returncode() == 0 + ] + endif + +-efi_cc_version = run_command(efi_cc, '--version').stdout().split('\n')[0] +-if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[-1].to_int() <= 10 ++if cc.get_id() == 'clang' and cc.version().split('.')[0].to_int() <= 10 + # clang <= 10 doesn't pass -T to the linker and then even complains about it being unused + efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument'] + endif + + summary({ + 'EFI machine type' : efi_arch[0], +- 'EFI CC' : '@0@'.format(' '.join(efi_cc)), + 'EFI LD' : efi_ld, + 'EFI lds' : efi_lds, + 'EFI crt0' : efi_crt0, +@@ -368,7 +362,7 @@ foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + o_file = custom_target(file.split('/')[-1] + '.o', + input : file, + output : file.split('/')[-1] + '.o', +- command : [efi_cc, '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags], ++ command : [cc.cmd_array(), '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags], + depend_files : efi_headers + fundamental_headers) + if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file) + systemd_boot_objects += o_file +@@ -389,7 +383,7 @@ foreach tuple : [['systemd_boot.so', systemd_boot_efi_name, systemd_boot_objects + tuple[0], + input : tuple[2], + output : tuple[0], +- command : [efi_cc, '-o', '@OUTPUT@', efi_ldflags, efi_cflags, tuple[2], '-lefi', '-lgnuefi', '-lgcc'], ++ command : [cc.cmd_array(), '-o', '@OUTPUT@', efi_ldflags, efi_cflags, tuple[2], '-lefi', '-lgnuefi', '-lgcc'], + install : tuple[3], + install_dir : bootlibdir) + diff --git a/SOURCES/0055-meson-Get-objcopy-location-from-compiler.patch b/SOURCES/0055-meson-Get-objcopy-location-from-compiler.patch new file mode 100644 index 0000000..bd91bcc --- /dev/null +++ b/SOURCES/0055-meson-Get-objcopy-location-from-compiler.patch @@ -0,0 +1,25 @@ +From b077524848816638fc7d0cf3e65c062da095626f Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Wed, 29 Dec 2021 15:13:35 +0100 +Subject: [PATCH] meson: Get objcopy location from compiler + +(cherry picked from commit 2f2b07226751827303a88f3a301f2d834f3fb97b) + +Related: #2017035 +--- + src/boot/efi/meson.build | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 11e6bf2dd0..144fbb0f43 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -43,7 +43,7 @@ if not cc.has_header_symbol('efi.h', 'EFI_IMAGE_MACHINE_X64', + subdir_done() + endif + +-objcopy = find_program('objcopy') ++objcopy = run_command(cc.cmd_array(), '-print-prog-name=objcopy', check: true).stdout().strip() + + efi_ld = get_option('efi-ld') + if efi_ld == 'auto' diff --git a/SOURCES/0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch b/SOURCES/0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch new file mode 100644 index 0000000..0ae6347 --- /dev/null +++ b/SOURCES/0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch @@ -0,0 +1,123 @@ +From 3088f292855f4a525271906a5652985f01c5d7b2 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Fri, 7 Jan 2022 21:55:50 +0100 +Subject: [PATCH] meson: Use files() for source lists for boot and fundamental + +This fixes build reproducibility as otherwise the full path +of the source files ends up in the output binary. + +(cherry picked from commit b3c5a7074cd434bc02c4b560afe933d3df24759e) + +Related: #2017035 +--- + src/boot/efi/meson.build | 29 +++++++++++++++++------------ + src/fundamental/meson.build | 22 +++++++++------------- + 2 files changed, 26 insertions(+), 25 deletions(-) + +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 144fbb0f43..4cc43dc00c 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -312,9 +312,10 @@ efi_headers = files( + 'shim.h', + 'splash.h', + 'util.h', +- 'xbootldr.h') ++ 'xbootldr.h', ++) + +-common_sources = [ ++common_sources = files( + 'assert.c', + 'devicetree.c', + 'disk.c', +@@ -322,31 +323,34 @@ common_sources = [ + 'measure.c', + 'pe.c', + 'secure-boot.c', +- 'util.c'] ++ 'util.c', ++) + +-systemd_boot_sources = [ ++systemd_boot_sources = files( + 'boot.c', + 'console.c', + 'drivers.c', + 'random-seed.c', + 'shim.c', +- 'xbootldr.c'] ++ 'xbootldr.c', ++) + +-stub_sources = [ ++stub_sources = files( + 'cpio.c', + 'initrd.c', + 'splash.c', +- 'stub.c'] ++ 'stub.c', ++) + + if efi_arch[1] in ['ia32', 'x86_64'] +- stub_sources += 'linux_x86.c' ++ stub_sources += files('linux_x86.c') + else +- stub_sources += 'linux.c' ++ stub_sources += files('linux.c') + endif + + # BCD parser only makes sense on arches that Windows supports. + if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64'] +- systemd_boot_sources += 'bcd.c' ++ systemd_boot_sources += files('bcd.c') + tests += [ + [['src/boot/efi/test-bcd.c'], + [], +@@ -359,9 +363,10 @@ endif + systemd_boot_objects = [] + stub_objects = [] + foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources +- o_file = custom_target(file.split('/')[-1] + '.o', ++ # FIXME: replace ''.format(file) with fs.name(file) when meson_version requirement is >= 0.59.0 ++ o_file = custom_target('@0@.o'.format(file).split('/')[-1], + input : file, +- output : file.split('/')[-1] + '.o', ++ output : '@0@.o'.format(file).split('/')[-1], + command : [cc.cmd_array(), '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags], + depend_files : efi_headers + fundamental_headers) + if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file) +diff --git a/src/fundamental/meson.build b/src/fundamental/meson.build +index 287f0fe36a..f927788c3a 100644 +--- a/src/fundamental/meson.build ++++ b/src/fundamental/meson.build +@@ -8,20 +8,16 @@ fundamental_headers = files( + 'macro-fundamental.h', + 'sha256.h', + 'string-util-fundamental.h', +- 'types-fundamental.h') +- +-sources = ''' +- bootspec-fundamental.c +- efivars-fundamental.c +- string-util-fundamental.c +- sha256.c +-'''.split() ++ 'types-fundamental.h', ++) + + # for sd-boot +-fundamental_source_paths = [] +-foreach source : sources +- fundamental_source_paths += meson.current_source_dir() / source +-endforeach ++fundamental_source_paths = files( ++ 'bootspec-fundamental.c', ++ 'efivars-fundamental.c', ++ 'sha256.c', ++ 'string-util-fundamental.c', ++) + + # for libbasic +-fundamental_sources = files(sources) + fundamental_headers ++fundamental_sources = fundamental_source_paths + fundamental_headers diff --git a/SOURCES/0057-meson-Use-files-for-tests.patch b/SOURCES/0057-meson-Use-files-for-tests.patch new file mode 100644 index 0000000..9607bcf --- /dev/null +++ b/SOURCES/0057-meson-Use-files-for-tests.patch @@ -0,0 +1,1483 @@ +From 70cbab08c63909a671136ee9600f9818e404646c Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Tue, 11 Jan 2022 10:21:23 +0100 +Subject: [PATCH] meson: Use files() for tests + +Not having to provide the full path in the source tree is much +nicer and the produced lists can also be used anywhere in the source +tree. + +(cherry picked from commit e1eeebbb11ca0eca5dfd2ce32a928ee5174ea7ff) + +Related: #2017035 +--- + meson.build | 3 +- + src/analyze/meson.build | 6 +- + src/boot/efi/meson.build | 2 +- + src/busctl/meson.build | 6 +- + src/coredump/meson.build | 6 +- + src/import/meson.build | 6 +- + src/journal/meson.build | 14 +- + src/libsystemd-network/meson.build | 22 +- + src/libsystemd/meson.build | 70 ++--- + src/libudev/meson.build | 2 +- + src/locale/meson.build | 6 +- + src/login/meson.build | 6 +- + src/machine/meson.build | 2 +- + src/network/meson.build | 16 +- + src/nspawn/meson.build | 4 +- + src/oom/meson.build | 6 +- + src/resolve/meson.build | 16 +- + src/shutdown/meson.build | 6 +- + src/test/meson.build | 386 ++++++++++++------------ + src/timesync/meson.build | 2 +- + src/tmpfiles/meson.build | 6 +- + src/udev/meson.build | 16 +- + src/xdg-autostart-generator/meson.build | 6 +- + 23 files changed, 308 insertions(+), 307 deletions(-) + +diff --git a/meson.build b/meson.build +index f040eeab99..35ba29aecf 100644 +--- a/meson.build ++++ b/meson.build +@@ -3566,7 +3566,8 @@ foreach tuple : tests + parallel = tuple.length() > 7 ? tuple[7] : true + timeout = 30 + +- name = sources[0].split('/')[-1].split('.')[0] ++ # FIXME: Use fs.stem() with meson >= 0.54.0 ++ name = '@0@'.format(sources[0]).split('/')[-1].split('.')[0] + if type.startswith('timeout=') + timeout = type.split('=')[1].to_int() + type = '' +diff --git a/src/analyze/meson.build b/src/analyze/meson.build +index 492b79069f..fbc4d7e20d 100644 +--- a/src/analyze/meson.build ++++ b/src/analyze/meson.build +@@ -13,9 +13,9 @@ systemd_analyze_sources = files(''' + '''.split()) + + tests += [ +- [['src/analyze/test-verify.c', +- 'src/analyze/analyze-verify.c', +- 'src/analyze/analyze-verify.h'], ++ [files('test-verify.c', ++ 'analyze-verify.c', ++ 'analyze-verify.h'), + [libcore, + libshared], + [], +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 4cc43dc00c..16b34f0ac2 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -352,7 +352,7 @@ endif + if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64'] + systemd_boot_sources += files('bcd.c') + tests += [ +- [['src/boot/efi/test-bcd.c'], ++ [files('test-bcd.c'), + [], + [libzstd], + [], +diff --git a/src/busctl/meson.build b/src/busctl/meson.build +index f463436fab..295dc0926d 100644 +--- a/src/busctl/meson.build ++++ b/src/busctl/meson.build +@@ -6,7 +6,7 @@ busctl_sources = files( + 'busctl.c') + + tests += [ +- [['src/busctl/test-busctl-introspect.c', +- 'src/busctl/busctl-introspect.c', +- 'src/busctl/busctl-introspect.h']], ++ [files('test-busctl-introspect.c', ++ 'busctl-introspect.c', ++ 'busctl-introspect.h')], + ] +diff --git a/src/coredump/meson.build b/src/coredump/meson.build +index b832192c9f..49ea93965b 100644 +--- a/src/coredump/meson.build ++++ b/src/coredump/meson.build +@@ -14,8 +14,8 @@ if conf.get('ENABLE_COREDUMP') == 1 and install_sysconfdir_samples + endif + + tests += [ +- [['src/coredump/test-coredump-vacuum.c', +- 'src/coredump/coredump-vacuum.c', +- 'src/coredump/coredump-vacuum.h'], ++ [files('test-coredump-vacuum.c', ++ 'coredump-vacuum.c', ++ 'coredump-vacuum.h'), + [], [], [], '', 'manual'], + ] +diff --git a/src/import/meson.build b/src/import/meson.build +index 23f0858817..7e923072a9 100644 +--- a/src/import/meson.build ++++ b/src/import/meson.build +@@ -61,9 +61,9 @@ if conf.get('ENABLE_IMPORTD') == 1 + endif + + tests += [ +- [['src/import/test-qcow2.c', +- 'src/import/qcow2-util.c', +- 'src/import/qcow2-util.h'], ++ [files('test-qcow2.c', ++ 'qcow2-util.c', ++ 'qcow2-util.h'), + [], + [libz], + [], 'HAVE_ZLIB', 'manual'], +diff --git a/src/journal/meson.build b/src/journal/meson.build +index 270592f2ac..b9a63d5e2f 100644 +--- a/src/journal/meson.build ++++ b/src/journal/meson.build +@@ -79,7 +79,7 @@ endif + ############################################################ + + tests += [ +- [['src/journal/test-journal-syslog.c'], ++ [files('test-journal-syslog.c'), + [libjournal_core, + libshared], + [threads, +@@ -87,30 +87,30 @@ tests += [ + liblz4, + libselinux]], + +- [['src/journal/test-journal-config.c'], ++ [files('test-journal-config.c'), + [libjournal_core, + libshared], + [libxz, + liblz4, + libselinux]], + +- [['src/journal/test-journal.c'], ++ [files('test-journal.c'), + [libjournal_core, + libshared]], + +- [['src/journal/test-journal-stream.c'], ++ [files('test-journal-stream.c'), + [libjournal_core, + libshared]], + +- [['src/journal/test-journal-flush.c'], ++ [files('test-journal-flush.c'), + [libjournal_core, + libshared]], + +- [['src/journal/test-journal-verify.c'], ++ [files('test-journal-verify.c'), + [libjournal_core, + libshared]], + +- [['src/journal/test-journal-interleaving.c'], ++ [files('test-journal-interleaving.c'), + [libjournal_core, + libshared]], + ] +diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build +index a7838cdaa1..3923df48ea 100644 +--- a/src/libsystemd-network/meson.build ++++ b/src/libsystemd-network/meson.build +@@ -57,49 +57,49 @@ libsystemd_network_includes = [includes, include_directories('.')] + ############################################################ + + tests += [ +- [['src/libsystemd-network/test-dhcp-option.c'], ++ [files('test-dhcp-option.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-sd-dhcp-lease.c'], ++ [files('test-sd-dhcp-lease.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-dhcp-client.c'], ++ [files('test-dhcp-client.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-dhcp-server.c'], ++ [files('test-dhcp-server.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-ipv4ll.c'], ++ [files('test-ipv4ll.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-ipv4ll-manual.c'], ++ [files('test-ipv4ll-manual.c'), + [libshared, + libsystemd_network], + [], [], '', 'manual'], + +- [['src/libsystemd-network/test-acd.c'], ++ [files('test-acd.c'), + [libshared, + libsystemd_network], + [], [], '', 'manual'], + +- [['src/libsystemd-network/test-ndisc-rs.c'], ++ [files('test-ndisc-rs.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-ndisc-ra.c'], ++ [files('test-ndisc-ra.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-dhcp6-client.c'], ++ [files('test-dhcp6-client.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/test-lldp-rx.c'], ++ [files('test-lldp-rx.c'), + [libshared, + libsystemd_network]], + ] +diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build +index 124393d3e6..42746e560f 100644 +--- a/src/libsystemd/meson.build ++++ b/src/libsystemd/meson.build +@@ -190,43 +190,43 @@ custom_target( + ############################################################ + + tests += [ +- [['src/libsystemd/sd-journal/test-journal-send.c']], ++ [files('sd-journal/test-journal-send.c')], + +- [['src/libsystemd/sd-journal/test-journal-match.c']], ++ [files('sd-journal/test-journal-match.c')], + +- [['src/libsystemd/sd-journal/test-journal-enum.c'], ++ [files('sd-journal/test-journal-enum.c'), + [], [], [], '', 'timeout=360'], + +- [['src/libsystemd/sd-journal/test-journal-init.c']], ++ [files('sd-journal/test-journal-init.c')], + +- [['src/libsystemd/sd-journal/test-mmap-cache.c']], ++ [files('sd-journal/test-mmap-cache.c')], + +- [['src/libsystemd/sd-journal/test-catalog.c']], ++ [files('sd-journal/test-catalog.c')], + +- [['src/libsystemd/sd-journal/test-compress.c'], ++ [files('sd-journal/test-compress.c'), + [], + [liblz4, + libzstd, + libxz]], + +- [['src/libsystemd/sd-journal/test-compress-benchmark.c'], ++ [files('sd-journal/test-compress-benchmark.c'), + [], + [liblz4, + libzstd, + libxz], + [], '', 'timeout=90'], + +- [['src/libsystemd/sd-journal/test-audit-type.c']], ++ [files('sd-journal/test-audit-type.c')], + ] + + ############################################################ + + tests += [ +- [['src/libsystemd/sd-bus/test-bus-address.c'], ++ [files('sd-bus/test-bus-address.c'), + [], + [threads]], + +- [['src/libsystemd/sd-bus/test-bus-marshal.c'], ++ [files('sd-bus/test-bus-marshal.c'), + [], + [threads, + libglib, +@@ -234,82 +234,82 @@ tests += [ + libgio, + libdbus]], + +- [['src/libsystemd/sd-bus/test-bus-signature.c'], ++ [files('sd-bus/test-bus-signature.c'), + [], + [threads]], + +- [['src/libsystemd/sd-bus/test-bus-queue-ref-cycle.c'], ++ [files('sd-bus/test-bus-queue-ref-cycle.c'), + [], + [threads]], + +- [['src/libsystemd/sd-bus/test-bus-watch-bind.c'], ++ [files('sd-bus/test-bus-watch-bind.c'), + [], + [threads], + [], '', 'timeout=120'], + +- [['src/libsystemd/sd-bus/test-bus-chat.c'], ++ [files('sd-bus/test-bus-chat.c'), + [], + [threads]], + +- [['src/libsystemd/sd-bus/test-bus-cleanup.c'], ++ [files('sd-bus/test-bus-cleanup.c'), + [], + [threads, + libseccomp]], + +- [['src/libsystemd/sd-bus/test-bus-track.c'], ++ [files('sd-bus/test-bus-track.c'), + [], + [libseccomp]], + +- [['src/libsystemd/sd-bus/test-bus-server.c'], ++ [files('sd-bus/test-bus-server.c'), + [], + [threads]], + +- [['src/libsystemd/sd-bus/test-bus-objects.c'], ++ [files('sd-bus/test-bus-objects.c'), + [], + [threads]], + +- [['src/libsystemd/sd-bus/test-bus-vtable.c', +- 'src/libsystemd/sd-bus/test-vtable-data.h']], ++ [files('sd-bus/test-bus-vtable.c', ++ 'sd-bus/test-vtable-data.h')], + +- [['src/libsystemd/sd-bus/test-bus-gvariant.c'], ++ [files('sd-bus/test-bus-gvariant.c'), + [], + [libglib, + libgobject, + libgio]], + +- [['src/libsystemd/sd-bus/test-bus-creds.c']], ++ [files('sd-bus/test-bus-creds.c')], + +- [['src/libsystemd/sd-bus/test-bus-match.c']], ++ [files('sd-bus/test-bus-match.c')], + +- [['src/libsystemd/sd-bus/test-bus-benchmark.c'], ++ [files('sd-bus/test-bus-benchmark.c'), + [], + [threads], + [], '', 'manual'], + +- [['src/libsystemd/sd-bus/test-bus-introspect.c', +- 'src/libsystemd/sd-bus/test-vtable-data.h']], ++ [files('sd-bus/test-bus-introspect.c', ++ 'sd-bus/test-vtable-data.h')], + +- [['src/libsystemd/sd-event/test-event.c']], ++ [files('sd-event/test-event.c')], + +- [['src/libsystemd/sd-netlink/test-netlink.c']], ++ [files('sd-netlink/test-netlink.c')], + +- [['src/libsystemd/sd-resolve/test-resolve.c'], ++ [files('sd-resolve/test-resolve.c'), + [], + [threads], + [], '', 'timeout=120'], + +- [['src/libsystemd/sd-login/test-login.c']], ++ [files('sd-login/test-login.c')], + +- [['src/libsystemd/sd-device/test-sd-device.c']], ++ [files('sd-device/test-sd-device.c')], + +- [['src/libsystemd/sd-device/test-device-util.c']], ++ [files('sd-device/test-device-util.c')], + +- [['src/libsystemd/sd-device/test-sd-device-monitor.c']], ++ [files('sd-device/test-sd-device-monitor.c')], + ] + + if cxx_cmd != '' + tests += [ +- [['src/libsystemd/sd-bus/test-bus-vtable-cc.cc']], ++ [files('sd-bus/test-bus-vtable-cc.cc')], + ] + endif + +diff --git a/src/libudev/meson.build b/src/libudev/meson.build +index 77b31a9492..2d51ff7c58 100644 +--- a/src/libudev/meson.build ++++ b/src/libudev/meson.build +@@ -45,7 +45,7 @@ custom_target( + ############################################################ + + tests += [ +- [['src/libudev/test-libudev.c'], ++ [files('test-libudev.c'), + [libshared, + libudev_basic]], + ] +diff --git a/src/locale/meson.build b/src/locale/meson.build +index a2ff2a9873..0ccf71583d 100644 +--- a/src/locale/meson.build ++++ b/src/locale/meson.build +@@ -30,7 +30,7 @@ if conf.get('ENABLE_LOCALED') == 1 + endif + + tests += [ +- [['src/locale/test-keymap-util.c', +- 'src/locale/keymap-util.c', +- 'src/locale/keymap-util.h']], ++ [files('test-keymap-util.c', ++ 'keymap-util.c', ++ 'keymap-util.h')], + ] +diff --git a/src/login/meson.build b/src/login/meson.build +index a78c2bc2dd..92f491665c 100644 +--- a/src/login/meson.build ++++ b/src/login/meson.build +@@ -101,12 +101,12 @@ endif + ############################################################ + + tests += [ +- [['src/login/test-login-shared.c']], ++ [files('test-login-shared.c')], + +- [['src/login/test-inhibit.c'], ++ [files('test-inhibit.c'), + [], [], [], '', 'manual'], + +- [['src/login/test-login-tables.c'], ++ [files('test-login-tables.c'), + [liblogind_core, + libshared], + [threads]], +diff --git a/src/machine/meson.build b/src/machine/meson.build +index ef858a5988..87e4dde24c 100644 +--- a/src/machine/meson.build ++++ b/src/machine/meson.build +@@ -37,7 +37,7 @@ if conf.get('ENABLE_MACHINED') == 1 + endif + + tests += [ +- [['src/machine/test-machine-tables.c'], ++ [files('test-machine-tables.c'), + [libmachine_core, + libshared], + [threads]], +diff --git a/src/network/meson.build b/src/network/meson.build +index 5857439c5a..a598701e4f 100644 +--- a/src/network/meson.build ++++ b/src/network/meson.build +@@ -277,37 +277,37 @@ fuzzers += [ + ] + + tests += [ +- [['src/network/test-networkd-address.c'], ++ [files('test-networkd-address.c'), + [libnetworkd_core, + libsystemd_network], + [], + network_includes], + +- [['src/network/test-networkd-conf.c'], ++ [files('test-networkd-conf.c'), + [libnetworkd_core, + libsystemd_network], + [], + network_includes], + +- [['src/network/test-networkd-util.c'], ++ [files('test-networkd-util.c'), + [libnetworkd_core, + libsystemd_network], + [], + network_includes], + +- [['src/network/test-network.c'], ++ [files('test-network.c'), + [libnetworkd_core, + libsystemd_network], + [threads], + network_includes], + +- [['src/network/test-network-tables.c'], ++ [files('test-network-tables.c'), + [libnetworkd_core, + libsystemd_network], + [threads], + network_includes], + +- [['src/network/generator/test-network-generator.c', +- 'src/network/generator/network-generator.c', +- 'src/network/generator/network-generator.h']], ++ [files('generator/test-network-generator.c', ++ 'generator/network-generator.c', ++ 'generator/network-generator.h')], + ] +diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build +index 11ac404e99..3c1a9c6182 100644 +--- a/src/nspawn/meson.build ++++ b/src/nspawn/meson.build +@@ -53,12 +53,12 @@ systemd_nspawn_sources = files('nspawn.c') + ############################################################ + + tests += [ +- [['src/nspawn/test-nspawn-tables.c'], ++ [files('test-nspawn-tables.c'), + [libnspawn_core, + libshared], + [libseccomp]], + +- [['src/nspawn/test-patch-uid.c'], ++ [files('test-patch-uid.c'), + [libnspawn_core, + libshared], + [libacl], +diff --git a/src/oom/meson.build b/src/oom/meson.build +index 4e1c8543c8..da00cbf99e 100644 +--- a/src/oom/meson.build ++++ b/src/oom/meson.build +@@ -28,7 +28,7 @@ if conf.get('ENABLE_OOMD') == 1 + endif + + tests += [ +- [['src/oom/test-oomd-util.c', +- 'src/oom/oomd-util.c', +- 'src/oom/oomd-util.h']], ++ [files('test-oomd-util.c', ++ 'oomd-util.c', ++ 'oomd-util.h')], + ] +diff --git a/src/resolve/meson.build b/src/resolve/meson.build +index 2cdf24b1cb..4de50c3d8e 100644 +--- a/src/resolve/meson.build ++++ b/src/resolve/meson.build +@@ -174,40 +174,40 @@ custom_target( + ############################################################ + + tests += [ +- [['src/resolve/test-resolve-tables.c'], ++ [files('test-resolve-tables.c'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, + libm]], + +- [['src/resolve/test-dns-packet.c'], ++ [files('test-dns-packet.c'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, + libm]], + +- [['src/resolve/test-resolved-etc-hosts.c', +- 'src/resolve/resolved-etc-hosts.c', +- 'src/resolve/resolved-etc-hosts.h'], ++ [files('test-resolved-etc-hosts.c', ++ 'resolved-etc-hosts.c', ++ 'resolved-etc-hosts.h'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, + libm]], + +- [['src/resolve/test-resolved-packet.c'], ++ [files('test-resolved-packet.c'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, + libm]], + +- [['src/resolve/test-dnssec.c'], ++ [files('test-dnssec.c'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, + libm], + [], 'HAVE_OPENSSL_OR_GCRYPT'], + +- [['src/resolve/test-dnssec-complex.c'], ++ [files('test-dnssec-complex.c'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, +diff --git a/src/shutdown/meson.build b/src/shutdown/meson.build +index e1348d95d4..fcc9f9f0ac 100644 +--- a/src/shutdown/meson.build ++++ b/src/shutdown/meson.build +@@ -7,9 +7,9 @@ systemd_shutdown_sources = files(''' + '''.split()) + + tests += [ +- [['src/shutdown/test-umount.c', +- 'src/shutdown/umount.c', +- 'src/shutdown/umount.h'], ++ [files('test-umount.c', ++ 'umount.c', ++ 'umount.h'), + [], + [libmount]], + ] +diff --git a/src/test/meson.build b/src/test/meson.build +index 48001d17ec..9e224d69ce 100644 +--- a/src/test/meson.build ++++ b/src/test/meson.build +@@ -41,11 +41,11 @@ test_dlopen_c = files('test-dlopen.c') + ############################################################ + + tests += [ +- [['src/test/test-device-nodes.c']], ++ [files('test-device-nodes.c')], + +- [['src/test/test-ether-addr-util.c']], ++ [files('test-ether-addr-util.c')], + +- [['src/test/test-engine.c'], ++ [files('test-engine.c'), + [libcore, + libshared], + [threads, +@@ -56,21 +56,21 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-emergency-action.c'], ++ [files('test-emergency-action.c'), + [libcore, + libshared], + [], + core_includes], + +- [['src/test/test-chown-rec.c'], ++ [files('test-chown-rec.c'), + [libcore, + libshared], + [], + core_includes], + +- [['src/test/test-dlopen-so.c']], ++ [files('test-dlopen-so.c')], + +- [['src/test/test-job-type.c'], ++ [files('test-job-type.c'), + [libcore, + libshared], + [threads, +@@ -81,7 +81,7 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-ns.c'], ++ [files('test-ns.c'), + [libcore, + libshared], + [threads, +@@ -92,7 +92,7 @@ tests += [ + libblkid], + core_includes, '', 'manual'], + +- [['src/test/test-loopback.c'], ++ [files('test-loopback.c'), + [libcore, + libshared], + [threads, +@@ -103,14 +103,14 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-dns-domain.c']], ++ [files('test-dns-domain.c')], + +- [['src/test/test-boot-timestamps.c'], ++ [files('test-boot-timestamps.c'), + [], [], [], 'ENABLE_EFI'], + +- [['src/test/test-unit-file.c']], ++ [files('test-unit-file.c')], + +- [['src/test/test-unit-name.c'], ++ [files('test-unit-name.c'), + [libcore, + libshared], + [threads, +@@ -121,7 +121,7 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-load-fragment.c'], ++ [files('test-load-fragment.c'), + [libcore, + libshared], + [threads, +@@ -132,9 +132,9 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-serialize.c']], ++ [files('test-serialize.c')], + +- [['src/test/test-unit-serialize.c'], ++ [files('test-unit-serialize.c'), + [libcore, + libshared], + [threads, +@@ -145,196 +145,196 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-utf8.c']], ++ [files('test-utf8.c')], + +- [['src/test/test-kbd-util.c']], ++ [files('test-kbd-util.c')], + +- [['src/test/test-blockdev-util.c']], ++ [files('test-blockdev-util.c')], + +- [['src/test/test-dev-setup.c']], ++ [files('test-dev-setup.c')], + +- [['src/test/test-capability.c'], ++ [files('test-capability.c'), + [], + [libcap]], + +- [['src/test/test-async.c'], ++ [files('test-async.c'), + [], [], [], '', 'timeout=120'], + +- [['src/test/test-locale-util.c']], ++ [files('test-locale-util.c')], + +- [['src/test/test-copy.c']], ++ [files('test-copy.c')], + +- [['src/test/test-recurse-dir.c']], ++ [files('test-recurse-dir.c')], + +- [['src/test/test-data-fd-util.c']], ++ [files('test-data-fd-util.c')], + +- [['src/test/test-static-destruct.c']], ++ [files('test-static-destruct.c')], + +- [['src/test/test-sigbus.c']], ++ [files('test-sigbus.c')], + +- [['src/test/test-condition.c']], ++ [files('test-condition.c')], + +- [['src/test/test-fdset.c']], ++ [files('test-fdset.c')], + +- [['src/test/test-fstab-util.c']], ++ [files('test-fstab-util.c')], + +- [['src/test/test-random-util.c'], ++ [files('test-random-util.c'), + [], + [libm], + [], '', 'timeout=120'], + +- [['src/test/test-format-table.c']], ++ [files('test-format-table.c')], + +- [['src/test/test-format-util.c']], ++ [files('test-format-util.c')], + +- [['src/test/test-ratelimit.c']], ++ [files('test-ratelimit.c')], + +- [['src/test/test-util.c']], ++ [files('test-util.c')], + +- [['src/test/test-macro.c']], ++ [files('test-macro.c')], + +- [['src/test/test-json.c']], ++ [files('test-json.c')], + +- [['src/test/test-modhex.c']], ++ [files('test-modhex.c')], + +- [['src/test/test-libmount.c'], ++ [files('test-libmount.c'), + [], + [threads, + libmount]], + +- [['src/test/test-mount-util.c']], ++ [files('test-mount-util.c')], + +- [['src/test/test-mountpoint-util.c']], ++ [files('test-mountpoint-util.c')], + +- [['src/test/test-exec-util.c']], ++ [files('test-exec-util.c')], + +- [['src/test/test-hexdecoct.c']], ++ [files('test-hexdecoct.c')], + +- [['src/test/test-alloc-util.c']], ++ [files('test-alloc-util.c')], + +- [['src/test/test-xattr-util.c']], ++ [files('test-xattr-util.c')], + +- [['src/test/test-io-util.c']], ++ [files('test-io-util.c')], + +- [['src/test/test-glob-util.c']], ++ [files('test-glob-util.c')], + +- [['src/test/test-fs-util.c']], ++ [files('test-fs-util.c')], + +- [['src/test/test-install-file.c']], ++ [files('test-install-file.c')], + +- [['src/test/test-umask-util.c']], ++ [files('test-umask-util.c')], + +- [['src/test/test-proc-cmdline.c']], ++ [files('test-proc-cmdline.c')], + +- [['src/test/test-fd-util.c'], ++ [files('test-fd-util.c'), + [], + [libseccomp]], + +- [['src/test/test-web-util.c']], ++ [files('test-web-util.c')], + +- [['src/test/test-cpu-set-util.c']], ++ [files('test-cpu-set-util.c')], + +- [['src/test/test-stat-util.c']], ++ [files('test-stat-util.c')], + +- [['src/test/test-os-util.c']], ++ [files('test-os-util.c')], + +- [['src/test/test-libcrypt-util.c'], ++ [files('test-libcrypt-util.c'), + [], [libcrypt], [], '', 'timeout=120'], + +- [['src/test/test-escape.c']], ++ [files('test-escape.c')], + +- [['src/test/test-exit-status.c']], ++ [files('test-exit-status.c')], + +- [['src/test/test-specifier.c']], ++ [files('test-specifier.c')], + +- [['src/test/test-string-util.c']], ++ [files('test-string-util.c')], + +- [['src/test/test-extract-word.c']], ++ [files('test-extract-word.c')], + +- [['src/test/test-parse-argument.c']], ++ [files('test-parse-argument.c')], + +- [['src/test/test-parse-socket-bind-item.c']], ++ [files('test-parse-socket-bind-item.c')], + +- [['src/test/test-parse-util.c']], ++ [files('test-parse-util.c')], + +- [['src/test/test-sysctl-util.c']], ++ [files('test-sysctl-util.c')], + +- [['src/test/test-import-util.c']], ++ [files('test-import-util.c')], + +- [['src/test/test-uid-alloc-range.c']], ++ [files('test-uid-alloc-range.c')], + +- [['src/test/test-user-util.c']], ++ [files('test-user-util.c')], + +- [['src/test/test-hostname-setup.c']], ++ [files('test-hostname-setup.c')], + +- [['src/test/test-hostname-util.c']], ++ [files('test-hostname-util.c')], + +- [['src/test/test-process-util.c']], ++ [files('test-process-util.c')], + +- [['src/test/test-terminal-util.c']], ++ [files('test-terminal-util.c')], + +- [['src/test/test-path-lookup.c']], ++ [files('test-path-lookup.c')], + +- [['src/test/test-pretty-print.c']], ++ [files('test-pretty-print.c')], + +- [['src/test/test-uid-range.c']], ++ [files('test-uid-range.c')], + +- [['src/test/test-cap-list.c', +- generated_gperf_headers], ++ [files('test-cap-list.c') + ++ generated_gperf_headers, + [], + [libcap]], + +- [['src/test/test-socket-util.c']], ++ [files('test-socket-util.c')], + +- [['src/test/test-socket-netlink.c']], ++ [files('test-socket-netlink.c')], + +- [['src/test/test-in-addr-util.c']], ++ [files('test-in-addr-util.c')], + +- [['src/test/test-in-addr-prefix-util.c']], ++ [files('test-in-addr-prefix-util.c')], + +- [['src/test/test-barrier.c']], ++ [files('test-barrier.c')], + +- [['src/test/test-tmpfiles.c']], ++ [files('test-tmpfiles.c')], + +- [['src/test/test-namespace.c'], ++ [files('test-namespace.c'), + [libcore, + libshared], + [threads, + libblkid], + core_includes], + +- [['src/test/test-verbs.c']], ++ [files('test-verbs.c')], + +- [['src/test/test-install-root.c']], ++ [files('test-install-root.c')], + +- [['src/test/test-acl-util.c'], ++ [files('test-acl-util.c'), + [], [], [], 'HAVE_ACL'], + +- [['src/test/test-seccomp.c'], ++ [files('test-seccomp.c'), + [], + [libseccomp], + [], 'HAVE_SECCOMP'], + +- [['src/test/test-rlimit-util.c']], ++ [files('test-rlimit-util.c')], + +- [['src/test/test-ask-password-api.c'], ++ [files('test-ask-password-api.c'), + [], [], [], '', 'manual'], + +- [['src/test/test-signal-util.c']], ++ [files('test-signal-util.c')], + +- [['src/test/test-loop-block.c'], ++ [files('test-loop-block.c'), + [libcore, + libshared], + [threads, + libblkid], + core_includes, '', '', [], false], + +- [['src/test/test-selinux.c']], ++ [files('test-selinux.c')], + +- [['src/test/test-sizeof.c'], ++ [files('test-sizeof.c'), + [libbasic]], + +- [['src/test/test-bpf-devices.c'], ++ [files('test-bpf-devices.c'), + [libcore, + libshared], + [libmount, +@@ -345,7 +345,7 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-bpf-firewall.c'], ++ [files('test-bpf-firewall.c'), + [libcore, + libshared], + [libmount, +@@ -356,13 +356,13 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-bpf-foreign-programs.c'], ++ [files('test-bpf-foreign-programs.c'), + [libcore, + libshared], + [], + core_includes], + +- [['src/test/test-bpf-lsm.c'], ++ [files('test-bpf-lsm.c'), + [libcore, + libshared], + [libmount, +@@ -373,7 +373,7 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-watch-pid.c'], ++ [files('test-watch-pid.c'), + [libcore, + libshared], + [libmount, +@@ -384,32 +384,32 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-hashmap.c', +- 'src/test/test-hashmap-plain.c', +- test_hashmap_ordered_c], ++ [files('test-hashmap.c', ++ 'test-hashmap-plain.c') + ++ [test_hashmap_ordered_c], + [], [], [], '', 'timeout=180'], + +- [['src/test/test-set.c']], ++ [files('test-set.c')], + +- [['src/test/test-ordered-set.c']], ++ [files('test-ordered-set.c')], + +- [['src/test/test-set-disable-mempool.c'], ++ [files('test-set-disable-mempool.c'), + [], + [threads]], + +- [['src/test/test-hash-funcs.c']], ++ [files('test-hash-funcs.c')], + +- [['src/test/test-bitmap.c']], ++ [files('test-bitmap.c')], + +- [['src/test/test-xml.c']], ++ [files('test-xml.c')], + +- [['src/test/test-list.c']], ++ [files('test-list.c')], + +- [['src/test/test-procfs-util.c']], ++ [files('test-procfs-util.c')], + +- [['src/test/test-unaligned.c']], ++ [files('test-unaligned.c')], + +- [['src/test/test-tables.c'], ++ [files('test-tables.c'), + [libcore, + libjournal_core, + libudevd_core, +@@ -422,70 +422,70 @@ tests += [ + libblkid], + [core_includes, journal_includes, udev_includes]], + +- [['src/test/test-prioq.c']], ++ [files('test-prioq.c')], + +- [['src/test/test-fileio.c']], ++ [files('test-fileio.c')], + +- [['src/test/test-time-util.c']], ++ [files('test-time-util.c')], + +- [['src/test/test-clock.c']], ++ [files('test-clock.c')], + +- [['src/test/test-tmpfile-util.c']], ++ [files('test-tmpfile-util.c')], + +- [['src/test/test-architecture.c']], ++ [files('test-architecture.c')], + +- [['src/test/test-gpt.c']], ++ [files('test-gpt.c')], + +- [['src/test/test-log.c']], ++ [files('test-log.c')], + +- [['src/test/test-ipcrm.c'], ++ [files('test-ipcrm.c'), + [], [], [], '', 'unsafe'], + +- [['src/test/test-btrfs.c'], ++ [files('test-btrfs.c'), + [], [], [], '', 'manual'], + +- [['src/test/test-firewall-util.c']], ++ [files('test-firewall-util.c')], + +- [['src/test/test-net-naming-scheme.c']], ++ [files('test-net-naming-scheme.c')], + +- [['src/test/test-netlink-manual.c'], ++ [files('test-netlink-manual.c'), + [], + [libkmod], + [], 'HAVE_KMOD', 'manual'], + +- [['src/test/test-ellipsize.c']], ++ [files('test-ellipsize.c')], + +- [['src/test/test-date.c']], ++ [files('test-date.c')], + +- [['src/test/test-sleep.c']], ++ [files('test-sleep.c')], + +- [['src/test/test-tpm2.c']], ++ [files('test-tpm2.c')], + +- [['src/test/test-replace-var.c']], ++ [files('test-replace-var.c')], + +- [['src/test/test-calendarspec.c']], ++ [files('test-calendarspec.c')], + +- [['src/test/test-strip-tab-ansi.c']], ++ [files('test-strip-tab-ansi.c')], + +- [['src/test/test-coredump-util.c']], ++ [files('test-coredump-util.c')], + +- [['src/test/test-daemon.c']], ++ [files('test-daemon.c')], + +- [['src/test/test-cgroup.c']], ++ [files('test-cgroup.c')], + +- [['src/test/test-cgroup-cpu.c'], ++ [files('test-cgroup-cpu.c'), + [libcore, + libshared], + [], + core_includes], + +- [['src/test/test-cgroup-unit-default.c'], ++ [files('test-cgroup-unit-default.c'), + [libcore, + libshared], + [], + core_includes], + +- [['src/test/test-cgroup-mask.c'], ++ [files('test-cgroup-mask.c'), + [libcore, + libshared], + [threads, +@@ -496,30 +496,30 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-varlink.c'], ++ [files('test-varlink.c'), + [], + [threads]], + +- [['src/test/test-cgroup-util.c']], ++ [files('test-cgroup-util.c')], + +- [['src/test/test-cgroup-setup.c']], ++ [files('test-cgroup-setup.c')], + +- [['src/test/test-env-file.c']], ++ [files('test-env-file.c')], + +- [['src/test/test-env-util.c']], ++ [files('test-env-util.c')], + +- [['src/test/test-strbuf.c']], ++ [files('test-strbuf.c')], + +- [['src/test/test-strv.c']], ++ [files('test-strv.c')], + +- [['src/test/test-path-util.c']], ++ [files('test-path-util.c')], + +- [['src/test/test-rm-rf.c']], ++ [files('test-rm-rf.c')], + +- [['src/test/test-chase-symlinks.c'], ++ [files('test-chase-symlinks.c'), + [], [], [], '', 'manual'], + +- [['src/test/test-path.c'], ++ [files('test-path.c'), + [libcore, + libshared], + [threads, +@@ -530,7 +530,7 @@ tests += [ + libblkid], + core_includes, '', 'timeout=120'], + +- [['src/test/test-execute.c'], ++ [files('test-execute.c'), + [libcore, + libshared], + [threads, +@@ -541,20 +541,20 @@ tests += [ + libblkid], + core_includes, '', 'timeout=360'], + +- [['src/test/test-siphash24.c']], ++ [files('test-siphash24.c')], + +- [['src/test/test-strxcpyx.c']], ++ [files('test-strxcpyx.c')], + +- [['src/test/test-install.c'], ++ [files('test-install.c'), + [libcore, + libshared], + [], + core_includes, '', 'manual'], + +- [['src/test/test-watchdog.c'], ++ [files('test-watchdog.c'), + [], [], [], '', 'unsafe'], + +- [['src/test/test-sched-prio.c'], ++ [files('test-sched-prio.c'), + [libcore, + libshared], + [threads, +@@ -565,25 +565,25 @@ tests += [ + libblkid], + core_includes], + +- [['src/test/test-conf-files.c']], ++ [files('test-conf-files.c')], + +- [['src/test/test-conf-parser.c']], ++ [files('test-conf-parser.c')], + +- [['src/test/test-af-list.c', +- generated_gperf_headers]], ++ [files('test-af-list.c') + ++ generated_gperf_headers], + +- [['src/test/test-arphrd-util.c', +- generated_gperf_headers]], ++ [files('test-arphrd-util.c') + ++ generated_gperf_headers], + +- [['src/test/test-errno-list.c', +- generated_gperf_headers]], ++ [files('test-errno-list.c') + ++ generated_gperf_headers], + +- [['src/test/test-ip-protocol-list.c', +- shared_generated_gperf_headers]], ++ [files('test-ip-protocol-list.c') + ++ shared_generated_gperf_headers], + +- [['src/test/test-journal-importer.c']], ++ [files('test-journal-importer.c')], + +- [['src/test/test-udev.c'], ++ [files('test-udev.c'), + [libudevd_core, + libshared], + [threads, +@@ -594,49 +594,49 @@ tests += [ + libselinux], + udev_includes, '', 'manual'], + +- [['src/test/test-udev-util.c']], ++ [files('test-udev-util.c')], + +- [['src/test/test-id128.c']], ++ [files('test-id128.c')], + +- [['src/test/test-cryptolib.c'], ++ [files('test-cryptolib.c'), + [libshared], + [lib_openssl_or_gcrypt], + [], 'HAVE_OPENSSL_OR_GCRYPT'], + +- [['src/test/test-nss-hosts.c', +- 'src/test/nss-test-util.c', +- 'src/test/nss-test-util.h'], ++ [files('test-nss-hosts.c', ++ 'nss-test-util.c', ++ 'nss-test-util.h'), + [], + [libdl], + [], 'ENABLE_NSS', 'manual'], + +- [['src/test/test-nss-users.c', +- 'src/test/nss-test-util.c', +- 'src/test/nss-test-util.h'], ++ [files('test-nss-users.c', ++ 'nss-test-util.c', ++ 'nss-test-util.h'), + [], + [libdl], + [], 'ENABLE_NSS', 'manual'], + +- [['src/test/test-bus-util.c']], ++ [files('test-bus-util.c')], + +- [['src/test/test-percent-util.c']], ++ [files('test-percent-util.c')], + +- [['src/test/test-sd-hwdb.c']], ++ [files('test-sd-hwdb.c')], + +- [['src/test/test-sd-path.c']], ++ [files('test-sd-path.c')], + +- [['src/test/test-local-addresses.c']], ++ [files('test-local-addresses.c')], + +- [['src/test/test-psi-util.c']], ++ [files('test-psi-util.c')], + +- [['src/test/test-qrcode-util.c'], ++ [files('test-qrcode-util.c'), + [], + [libdl]], + +- [['src/test/test-nscd-flush.c'], ++ [files('test-nscd-flush.c'), + [], [], [], 'ENABLE_NSCD', 'manual'], + +- [['src/test/test-hmac.c']], ++ [files('test-hmac.c')], + ] + + ############################################################ +@@ -644,23 +644,23 @@ tests += [ + # define some tests here, because the link_with deps were not defined earlier + + tests += [ +- [['src/libsystemd/sd-bus/test-bus-error.c'], ++ [files('../libsystemd/sd-bus/test-bus-error.c'), + [libshared_static, + libsystemd_static]], + +- [['src/libsystemd/sd-device/test-sd-device-thread.c'], ++ [files('../libsystemd/sd-device/test-sd-device-thread.c'), + [libsystemd], + [threads]], + +- [['src/libudev/test-udev-device-thread.c'], ++ [files('../libudev/test-udev-device-thread.c'), + [libudev], + [threads]], + ] + + tests += [ +- [['src/test/test-socket-bind.c'], +- [libcore, +- libshared], ++ [files('test-socket-bind.c'), ++ [libcore, ++ libshared], + [libdl], + core_includes, + 'BPF_FRAMEWORK'], +diff --git a/src/timesync/meson.build b/src/timesync/meson.build +index 83dd7c8f67..8ecfbfab82 100644 +--- a/src/timesync/meson.build ++++ b/src/timesync/meson.build +@@ -55,7 +55,7 @@ endif + ############################################################ + + tests += [ +- [['src/timesync/test-timesync.c'], ++ [files('test-timesync.c'), + [libtimesyncd_core, + libshared], + [libm]], +diff --git a/src/tmpfiles/meson.build b/src/tmpfiles/meson.build +index c72b386cda..cfa3d370a7 100644 +--- a/src/tmpfiles/meson.build ++++ b/src/tmpfiles/meson.build +@@ -6,7 +6,7 @@ systemd_tmpfiles_sources = files( + 'offline-passwd.h') + + tests += [ +- [['src/tmpfiles/test-offline-passwd.c', +- 'src/tmpfiles/offline-passwd.c', +- 'src/tmpfiles/offline-passwd.h']], ++ [files('test-offline-passwd.c', ++ 'offline-passwd.c', ++ 'offline-passwd.h')], + ] +diff --git a/src/udev/meson.build b/src/udev/meson.build +index 29ac85da12..57fbf8c8fc 100644 +--- a/src/udev/meson.build ++++ b/src/udev/meson.build +@@ -195,28 +195,28 @@ fuzzers += [ + ] + + tests += [ +- [['src/udev/test-udev-event.c'], ++ [files('test-udev-event.c'), + [libudevd_core, + libshared], + [threads, + libacl]], + +- [['src/udev/test-udev-node.c'], ++ [files('test-udev-node.c'), + [libudevd_core, + libshared], + [threads, + libacl]], + +- [['src/udev/test-udev-builtin.c'], ++ [files('test-udev-builtin.c'), + [libudevd_core, + libshared], + [threads, + libacl]], + +- [['src/udev/test-udev-netlink.c', +- 'src/udev/udev-netlink.c', +- 'src/udev/udev-netlink.h']], ++ [files('test-udev-netlink.c', ++ 'udev-netlink.c', ++ 'udev-netlink.h')], + +- [['src/udev/fido_id/test-fido-id-desc.c', +- 'src/udev/fido_id/fido_id_desc.c']], ++ [files('fido_id/test-fido-id-desc.c', ++ 'fido_id/fido_id_desc.c')], + ] +diff --git a/src/xdg-autostart-generator/meson.build b/src/xdg-autostart-generator/meson.build +index aa722f7f3c..6418f57c40 100644 +--- a/src/xdg-autostart-generator/meson.build ++++ b/src/xdg-autostart-generator/meson.build +@@ -6,9 +6,9 @@ systemd_xdg_autostart_generator_sources = files( + 'xdg-autostart-service.h') + + tests += [ +- [['src/xdg-autostart-generator/test-xdg-autostart.c', +- 'src/xdg-autostart-generator/xdg-autostart-service.c', +- 'src/xdg-autostart-generator/xdg-autostart-service.h']], ++ [files('test-xdg-autostart.c', ++ 'xdg-autostart-service.c', ++ 'xdg-autostart-service.h')], + ] + + fuzzers += [ diff --git a/SOURCES/0058-tests-add-fuzz-bcd.patch b/SOURCES/0058-tests-add-fuzz-bcd.patch new file mode 100644 index 0000000..3669c13 --- /dev/null +++ b/SOURCES/0058-tests-add-fuzz-bcd.patch @@ -0,0 +1,95 @@ +From f06002981d2bd2a582d2252f7d509205bcc2a9ed Mon Sep 17 00:00:00 2001 +From: Evgeny Vereshchagin +Date: Sun, 26 Dec 2021 23:26:56 +0000 +Subject: [PATCH] tests: add fuzz-bcd + +(cherry picked from commit 4b65fc8725fa169bf870eb022d7b346796977c21) + +Related: #2017035 +--- + src/boot/efi/fuzz-bcd.c | 26 ++++++++++++++++++++++++++ + src/boot/efi/meson.build | 3 +++ + tools/oss-fuzz.sh | 16 ++++++++++++++++ + 3 files changed, 45 insertions(+) + create mode 100644 src/boot/efi/fuzz-bcd.c + +diff --git a/src/boot/efi/fuzz-bcd.c b/src/boot/efi/fuzz-bcd.c +new file mode 100644 +index 0000000000..e5ed6638a4 +--- /dev/null ++++ b/src/boot/efi/fuzz-bcd.c +@@ -0,0 +1,26 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++ ++#include "alloc-util.h" ++#include "fd-util.h" ++#include "fuzz.h" ++#include "utf8.h" ++ ++#include "bcd.c" ++ ++int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { ++ _cleanup_free_ void *p = NULL; ++ ++ /* This limit was borrowed from src/boot/efi/boot.c */ ++ if (size > 100*1024) ++ return 0; ++ ++ if (!getenv("SYSTEMD_LOG_LEVEL")) ++ log_set_max_level(LOG_CRIT); ++ ++ p = memdup(data, size); ++ assert_se(p); ++ ++ char16_t *title = get_bcd_title(p, size); ++ assert_se(!title || char16_strlen(title) >= 0); ++ return 0; ++} +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 16b34f0ac2..229771026d 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -358,6 +358,9 @@ if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64'] + [], + 'HAVE_ZSTD'], + ] ++ fuzzers += [ ++ [['src/boot/efi/fuzz-bcd.c']], ++ ] + endif + + systemd_boot_objects = [] +diff --git a/tools/oss-fuzz.sh b/tools/oss-fuzz.sh +index 8a19da665e..ae57fc25d5 100755 +--- a/tools/oss-fuzz.sh ++++ b/tools/oss-fuzz.sh +@@ -36,6 +36,13 @@ else + apt-get install -y gperf m4 gettext python3-pip \ + libcap-dev libmount-dev libkmod-dev \ + pkg-config wget python3-jinja2 ++ ++ # gnu-efi is installed here to enable -Dgnu-efi behind which fuzz-bcd ++ # is hidden. It isn't linked against efi. It doesn't ++ # even include "efi.h" because "bcd.c" can work in "unit test" mode ++ # where it isn't necessary. ++ apt-get install -y gnu-efi zstd ++ + pip3 install -r .github/workflows/requirements.txt --require-hashes + + # https://github.com/google/oss-fuzz/issues/6868 +@@ -56,6 +63,15 @@ fi + + ninja -v -C "$build" fuzzers + ++# Compressed BCD files are kept in test/test-bcd so let's unpack them ++# and put them all in the seed corpus. ++bcd=$(mktemp -d) ++for i in test/test-bcd/*.zst; do ++ unzstd "$i" -o "$bcd/$(basename "${i%.zst}")"; ++done ++zip -jqr "$OUT/fuzz-bcd_seed_corpus.zip" "$bcd" ++rm -rf "$bcd" ++ + # The seed corpus is a separate flat archive for each fuzzer, + # with a fixed name ${fuzzer}_seed_corpus.zip. + for d in "$(dirname "$0")/../test/fuzz/fuzz-"*; do diff --git a/SOURCES/0059-meson-Use-files-for-fuzzers.patch b/SOURCES/0059-meson-Use-files-for-fuzzers.patch new file mode 100644 index 0000000..44a6669 --- /dev/null +++ b/SOURCES/0059-meson-Use-files-for-fuzzers.patch @@ -0,0 +1,335 @@ +From a21bc03df9504c7a9b0c8e0e894d94f226a7a038 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Tue, 11 Jan 2022 10:47:01 +0100 +Subject: [PATCH] meson: Use files() for fuzzers + +Not having to provide the full path in the source tree is much +nicer and the produced lists can also be used anywhere in the source +tree. + +(cherry picked from commit bbec46c817951225f1e535d3df95b82a114e502a) + +Related: #2017035 +--- + meson.build | 3 ++- + src/boot/efi/meson.build | 2 +- + src/core/meson.build | 2 +- + src/fuzz/meson.build | 20 ++++++++++---------- + src/journal-remote/meson.build | 2 +- + src/journal/meson.build | 24 ++++++++++++------------ + src/libsystemd-network/meson.build | 8 ++++---- + src/libsystemd/meson.build | 4 ++-- + src/network/meson.build | 4 ++-- + src/nspawn/meson.build | 4 ++-- + src/resolve/meson.build | 2 +- + src/systemctl/meson.build | 7 ++++--- + src/udev/meson.build | 11 +++++------ + src/xdg-autostart-generator/meson.build | 6 +++--- + 14 files changed, 50 insertions(+), 49 deletions(-) + +diff --git a/meson.build b/meson.build +index 35ba29aecf..fdf02b8110 100644 +--- a/meson.build ++++ b/meson.build +@@ -3677,7 +3677,8 @@ foreach tuple : fuzzers + sources += 'src/fuzz/fuzz-main.c' + endif + +- name = sources[0].split('/')[-1].split('.')[0] ++ # FIXME: Use fs.stem() with meson >= 0.54.0 ++ name = '@0@'.format(sources[0]).split('/')[-1].split('.')[0] + + exe = executable( + name, +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 229771026d..3e948281f2 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -359,7 +359,7 @@ if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64'] + 'HAVE_ZSTD'], + ] + fuzzers += [ +- [['src/boot/efi/fuzz-bcd.c']], ++ [files('fuzz-bcd.c')], + ] + endif + +diff --git a/src/core/meson.build b/src/core/meson.build +index d229d46779..97ac431763 100644 +--- a/src/core/meson.build ++++ b/src/core/meson.build +@@ -228,7 +228,7 @@ endif + ############################################################ + + fuzzers += [ +- [['src/core/fuzz-unit-file.c'], ++ [files('fuzz-unit-file.c'), + [libcore, + libshared], + [libmount]], +diff --git a/src/fuzz/meson.build b/src/fuzz/meson.build +index 1ed1dd8251..d987f32b08 100644 +--- a/src/fuzz/meson.build ++++ b/src/fuzz/meson.build +@@ -1,23 +1,23 @@ + # SPDX-License-Identifier: LGPL-2.1-or-later + + fuzzers += [ +- [['src/fuzz/fuzz-catalog.c']], ++ [files('fuzz-catalog.c')], + +- [['src/fuzz/fuzz-json.c']], ++ [files('fuzz-json.c')], + +- [['src/fuzz/fuzz-varlink.c']], ++ [files('fuzz-varlink.c')], + +- [['src/fuzz/fuzz-udev-database.c']], ++ [files('fuzz-udev-database.c')], + +- [['src/fuzz/fuzz-compress.c']], ++ [files('fuzz-compress.c')], + +- [['src/fuzz/fuzz-bus-label.c']], ++ [files('fuzz-bus-label.c')], + +- [['src/fuzz/fuzz-env-file.c']], ++ [files('fuzz-env-file.c')], + +- [['src/fuzz/fuzz-hostname-setup.c']], ++ [files('fuzz-hostname-setup.c')], + +- [['src/fuzz/fuzz-calendarspec.c']], ++ [files('fuzz-calendarspec.c')], + +- [['src/fuzz/fuzz-time-util.c']], ++ [files('fuzz-time-util.c')], + ] +diff --git a/src/journal-remote/meson.build b/src/journal-remote/meson.build +index 168d0ed6a3..1f3e0878ae 100644 +--- a/src/journal-remote/meson.build ++++ b/src/journal-remote/meson.build +@@ -76,7 +76,7 @@ endif + ############################################################ + + fuzzers += [ +- [['src/journal-remote/fuzz-journal-remote.c'], ++ [files('fuzz-journal-remote.c'), + [libsystemd_journal_remote, + libshared], + [], +diff --git a/src/journal/meson.build b/src/journal/meson.build +index b9a63d5e2f..21c4d2561c 100644 +--- a/src/journal/meson.build ++++ b/src/journal/meson.build +@@ -116,38 +116,38 @@ tests += [ + ] + + fuzzers += [ +- [['src/journal/fuzz-journald-audit.c', +- 'src/journal/fuzz-journald.c'], ++ [files('fuzz-journald-audit.c', ++ 'fuzz-journald.c'), + [libjournal_core, + libshared], + [libselinux]], + +- [['src/journal/fuzz-journald-kmsg.c', +- 'src/journal/fuzz-journald.c'], ++ [files('fuzz-journald-kmsg.c', ++ 'fuzz-journald.c'), + [libjournal_core, + libshared], + [libselinux]], + +- [['src/journal/fuzz-journald-native.c', +- 'src/journal/fuzz-journald.c'], ++ [files('fuzz-journald-native.c', ++ 'fuzz-journald.c'), + [libjournal_core, + libshared], + [libselinux]], + +- [['src/journal/fuzz-journald-native-fd.c', +- 'src/journal/fuzz-journald.c'], ++ [files('fuzz-journald-native-fd.c', ++ 'fuzz-journald.c'), + [libjournal_core, + libshared], + [libselinux]], + +- [['src/journal/fuzz-journald-stream.c', +- 'src/journal/fuzz-journald.c'], ++ [files('fuzz-journald-stream.c', ++ 'fuzz-journald.c'), + [libjournal_core, + libshared], + [libselinux]], + +- [['src/journal/fuzz-journald-syslog.c', +- 'src/journal/fuzz-journald.c'], ++ [files('fuzz-journald-syslog.c', ++ 'fuzz-journald.c'), + [libjournal_core, + libshared], + [libselinux]], +diff --git a/src/libsystemd-network/meson.build b/src/libsystemd-network/meson.build +index 3923df48ea..6be409d8ad 100644 +--- a/src/libsystemd-network/meson.build ++++ b/src/libsystemd-network/meson.build +@@ -105,19 +105,19 @@ tests += [ + ] + + fuzzers += [ +- [['src/libsystemd-network/fuzz-dhcp6-client.c'], ++ [files('fuzz-dhcp6-client.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/fuzz-dhcp-server.c'], ++ [files('fuzz-dhcp-server.c'), + [libsystemd_network, + libshared]], + +- [['src/libsystemd-network/fuzz-lldp-rx.c'], ++ [files('fuzz-lldp-rx.c'), + [libshared, + libsystemd_network]], + +- [['src/libsystemd-network/fuzz-ndisc-rs.c'], ++ [files('fuzz-ndisc-rs.c'), + [libshared, + libsystemd_network]], + ] +diff --git a/src/libsystemd/meson.build b/src/libsystemd/meson.build +index 42746e560f..2e5255d479 100644 +--- a/src/libsystemd/meson.build ++++ b/src/libsystemd/meson.build +@@ -316,7 +316,7 @@ endif + ############################################################ + + fuzzers += [ +- [['src/libsystemd/sd-bus/fuzz-bus-message.c']], ++ [files('sd-bus/fuzz-bus-message.c')], + +- [['src/libsystemd/sd-bus/fuzz-bus-match.c']], ++ [files('sd-bus/fuzz-bus-match.c')], + ] +diff --git a/src/network/meson.build b/src/network/meson.build +index a598701e4f..23743233fa 100644 +--- a/src/network/meson.build ++++ b/src/network/meson.build +@@ -261,14 +261,14 @@ if conf.get('ENABLE_NETWORKD') == 1 + endif + + fuzzers += [ +- [['src/network/fuzz-netdev-parser.c'], ++ [files('fuzz-netdev-parser.c'), + [libnetworkd_core, + libsystemd_network, + networkd_link_with], + [threads], + network_includes], + +- [['src/network/fuzz-network-parser.c'], ++ [files('fuzz-network-parser.c'), + [libnetworkd_core, + libsystemd_network, + networkd_link_with], +diff --git a/src/nspawn/meson.build b/src/nspawn/meson.build +index 3c1a9c6182..2934672e9a 100644 +--- a/src/nspawn/meson.build ++++ b/src/nspawn/meson.build +@@ -66,12 +66,12 @@ tests += [ + ] + + fuzzers += [ +- [['src/nspawn/fuzz-nspawn-settings.c'], ++ [files('fuzz-nspawn-settings.c'), + [libshared, + libnspawn_core], + [libseccomp]], + +- [['src/nspawn/fuzz-nspawn-oci.c'], ++ [files('fuzz-nspawn-oci.c'), + [libshared, + libnspawn_core], + [libseccomp]], +diff --git a/src/resolve/meson.build b/src/resolve/meson.build +index 4de50c3d8e..1fee993d0a 100644 +--- a/src/resolve/meson.build ++++ b/src/resolve/meson.build +@@ -216,7 +216,7 @@ tests += [ + ] + + fuzzers += [ +- [['src/resolve/fuzz-dns-packet.c'], ++ [files('fuzz-dns-packet.c'), + [libsystemd_resolve_core, + libshared], + [lib_openssl_or_gcrypt, +diff --git a/src/systemctl/meson.build b/src/systemctl/meson.build +index 38bf33d49a..f0d405bb58 100644 +--- a/src/systemctl/meson.build ++++ b/src/systemctl/meson.build +@@ -83,7 +83,8 @@ else + endif + + fuzzers += [ +- [['src/systemctl/fuzz-systemctl-parse-argv.c', +- systemctl_sources], ++ [files('fuzz-systemctl-parse-argv.c') + ++ systemctl_sources, + systemctl_link_with, +- [], [], ['-DFUZZ_SYSTEMCTL_PARSE_ARGV']]] ++ [], [], ['-DFUZZ_SYSTEMCTL_PARSE_ARGV']] ++] +diff --git a/src/udev/meson.build b/src/udev/meson.build +index 57fbf8c8fc..9fd0bcdd0e 100644 +--- a/src/udev/meson.build ++++ b/src/udev/meson.build +@@ -174,24 +174,23 @@ if install_sysconfdir + endif + + fuzzers += [ +- [['src/udev/net/fuzz-link-parser.c', +- 'src/fuzz/fuzz.h'], ++ [files('net/fuzz-link-parser.c'), + [libudevd_core, + libshared], + [threads, + libacl], + udev_includes], + +- [['src/udev/fuzz-udev-rules.c'], ++ [files('fuzz-udev-rules.c'), + [libudevd_core, + libshared], + [threads, + libacl]], + +- [['src/udev/fuzz-udev-rule-parse-value.c']], ++ [files('fuzz-udev-rule-parse-value.c')], + +- [['src/udev/fido_id/fuzz-fido-id-desc.c', +- 'src/udev/fido_id/fido_id_desc.c']], ++ [files('fido_id/fuzz-fido-id-desc.c', ++ 'fido_id/fido_id_desc.c')], + ] + + tests += [ +diff --git a/src/xdg-autostart-generator/meson.build b/src/xdg-autostart-generator/meson.build +index 6418f57c40..cdce66b6fc 100644 +--- a/src/xdg-autostart-generator/meson.build ++++ b/src/xdg-autostart-generator/meson.build +@@ -12,7 +12,7 @@ tests += [ + ] + + fuzzers += [ +- [['src/xdg-autostart-generator/fuzz-xdg-desktop.c', +- 'src/xdg-autostart-generator/xdg-autostart-service.c', +- 'src/xdg-autostart-generator/xdg-autostart-service.h']], ++ [files('fuzz-xdg-desktop.c', ++ 'xdg-autostart-service.c', ++ 'xdg-autostart-service.h')], + ] diff --git a/SOURCES/0060-meson-Add-check-argument-to-remaining-run_command-ca.patch b/SOURCES/0060-meson-Add-check-argument-to-remaining-run_command-ca.patch new file mode 100644 index 0000000..6ba403f --- /dev/null +++ b/SOURCES/0060-meson-Add-check-argument-to-remaining-run_command-ca.patch @@ -0,0 +1,137 @@ +From 5a35f08026cad007f460170fe6a3e43bd51f60f9 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Tue, 11 Jan 2022 10:56:22 +0100 +Subject: [PATCH] meson: Add check argument to remaining run_command() calls + +(cherry picked from commit 68a06b3cdfe35ff08092e139033edb4a5189a439) + +Related: #2017035 +--- + man/meson.build | 2 +- + src/basic/meson.build | 2 +- + src/boot/efi/meson.build | 11 +++++++---- + src/test/meson.build | 2 +- + test/fuzz/meson.build | 7 ++++--- + test/meson.build | 8 +++++--- + 6 files changed, 19 insertions(+), 13 deletions(-) + +diff --git a/man/meson.build b/man/meson.build +index a06a601767..710b4ca008 100644 +--- a/man/meson.build ++++ b/man/meson.build +@@ -105,7 +105,7 @@ endforeach + + ############################################################ + +-have_lxml = run_command(xml_helper_py).returncode() == 0 ++have_lxml = run_command(xml_helper_py, check: false).returncode() == 0 + if not have_lxml + message('python-lxml not available, not making man page indices') + endif +diff --git a/src/basic/meson.build b/src/basic/meson.build +index 229ac97c69..5a9e13d741 100644 +--- a/src/basic/meson.build ++++ b/src/basic/meson.build +@@ -384,7 +384,7 @@ filesystem_includes = ['linux/magic.h', + 'linux/gfs2_ondisk.h'] + + check_filesystems = find_program('check-filesystems.sh') +-r = run_command([check_filesystems, cpp, 'filesystems-gperf.gperf'] + filesystem_includes) ++r = run_command([check_filesystems, cpp, 'filesystems-gperf.gperf'] + filesystem_includes, check: false) + if r.returncode() != 0 + error('found unknown filesystem(s) defined in kernel headers:\n\n' + r.stdout()) + r.stdout() +diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build +index 3e948281f2..fad92f09a1 100644 +--- a/src/boot/efi/meson.build ++++ b/src/boot/efi/meson.build +@@ -57,8 +57,11 @@ endif + efi_libdir = '' + foreach dir : [get_option('efi-libdir'), + '/usr/lib/gnuefi' / efi_arch[0], +- run_command('realpath', '-e', +- '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory').stdout().strip()).stdout().strip()] ++ run_command( ++ 'realpath', '-e', ++ '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory', check: false).stdout().strip(), ++ check: false ++ ).stdout().strip()] + if dir != '' and fs.is_dir(dir) + efi_libdir = dir + break +@@ -125,7 +128,7 @@ elif get_option('sbat-distro') != '' + value = get_option(sbatvar[0]) + if (value == '' or value == 'auto') and not meson.is_cross_build() + cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1]) +- value = run_command(sh, '-c', cmd).stdout().strip() ++ value = run_command(sh, '-c', cmd, check: true).stdout().strip() + endif + if value == '' + error('Required @0@ option not set and autodetection failed'.format(sbatvar[0])) +@@ -254,7 +257,7 @@ if efi_arch[1] == 'arm' + efi_ldflags += ['-Wl,--no-warn-mismatch'] + endif + +-if run_command('grep', '-q', '__CTOR_LIST__', efi_lds).returncode() == 0 ++if run_command('grep', '-q', '__CTOR_LIST__', efi_lds, check: false).returncode() == 0 + # fedora has a patched gnu-efi that adds support for ELF constructors. + # If ld is called by gcc something about these symbols breaks, resulting + # in sd-boot freezing when gnu-efi runs the constructors. Force defining +diff --git a/src/test/meson.build b/src/test/meson.build +index 9e224d69ce..75f78e2e1a 100644 +--- a/src/test/meson.build ++++ b/src/test/meson.build +@@ -11,7 +11,7 @@ test_hashmap_ordered_c = custom_target( + + test_include_dir = include_directories('.') + +-path = run_command(sh, '-c', 'echo "$PATH"').stdout().strip() ++path = run_command(sh, '-c', 'echo "$PATH"', check: true).stdout().strip() + test_env = environment() + test_env.set('SYSTEMD_LANGUAGE_FALLBACK_MAP', language_fallback_map) + test_env.set('PATH', project_build_root + ':' + path) +diff --git a/test/fuzz/meson.build b/test/fuzz/meson.build +index 30e26b09cf..b4766de3eb 100644 +--- a/test/fuzz/meson.build ++++ b/test/fuzz/meson.build +@@ -13,12 +13,13 @@ sanitize_address_undefined = custom_target( + + sanitizers = [['address,undefined', sanitize_address_undefined]] + +-if git.found() ++if git.found() and fs.exists(project_source_root / '.git') + out = run_command(env, '-u', 'GIT_WORK_TREE', + git, '--git-dir=@0@/.git'.format(project_source_root), +- 'ls-files', ':/test/fuzz/*/*') ++ 'ls-files', ':/test/fuzz/*/*', ++ check: true) + else +- out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root)) ++ out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root), check: true) + endif + + fuzz_regression_tests = [] +diff --git a/test/meson.build b/test/meson.build +index 04ae9ebc78..baf94703ea 100644 +--- a/test/meson.build ++++ b/test/meson.build +@@ -182,14 +182,16 @@ endif + if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family()) + udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh') + +- if git.found() ++ if git.found() and fs.exists(project_source_root / '.git') + out = run_command( + env, '-u', 'GIT_WORK_TREE', + git, '--git-dir=@0@/.git'.format(project_source_root), +- 'ls-files', ':/test/dmidecode-dumps/*.bin') ++ 'ls-files', ':/test/dmidecode-dumps/*.bin', ++ check: true) + else + out = run_command( +- sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root)) ++ sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root), ++ check: true) + endif + + foreach p : out.stdout().split() diff --git a/SOURCES/0061-meson-Use-echo-to-list-files.patch b/SOURCES/0061-meson-Use-echo-to-list-files.patch new file mode 100644 index 0000000..2e9b302 --- /dev/null +++ b/SOURCES/0061-meson-Use-echo-to-list-files.patch @@ -0,0 +1,43 @@ +From 5de4b00e4150080e68064fa1de003039a0901468 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Tue, 11 Jan 2022 11:27:27 +0100 +Subject: [PATCH] meson: Use echo to list files + +No need to invoke ls when we are just interested in file names. +Also, the cd to source root makes the output identical to +"git ls-files" (relative instead of absolute paths). + +(cherry picked from commit 3a469802f4d7b0a59fe1644cb53d34aee4e56bab) + +Related: #2017035 +--- + test/fuzz/meson.build | 2 +- + test/meson.build | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/fuzz/meson.build b/test/fuzz/meson.build +index b4766de3eb..39730a615c 100644 +--- a/test/fuzz/meson.build ++++ b/test/fuzz/meson.build +@@ -19,7 +19,7 @@ if git.found() and fs.exists(project_source_root / '.git') + 'ls-files', ':/test/fuzz/*/*', + check: true) + else +- out = run_command(sh, '-c', 'ls @0@/test/fuzz/*/*'.format(project_source_root), check: true) ++ out = run_command(sh, '-c', 'cd "@0@"; echo test/fuzz/*/*'.format(project_source_root), check: true) + endif + + fuzz_regression_tests = [] +diff --git a/test/meson.build b/test/meson.build +index baf94703ea..c5d8d6917b 100644 +--- a/test/meson.build ++++ b/test/meson.build +@@ -190,7 +190,7 @@ if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family()) + check: true) + else + out = run_command( +- sh, '-c', 'ls @0@/test/dmidecode-dumps/*.bin'.format(project_source_root), ++ sh, '-c', 'cd "@0@"; echo test/dmidecode-dumps/*.bin'.format(project_source_root), + check: true) + endif + diff --git a/SOURCES/0062-test-add-a-test-for-mkdir_p.patch b/SOURCES/0062-test-add-a-test-for-mkdir_p.patch new file mode 100644 index 0000000..40ebe72 --- /dev/null +++ b/SOURCES/0062-test-add-a-test-for-mkdir_p.patch @@ -0,0 +1,63 @@ +From 010c5dc6b7f18eba37f3df015b3e36b4f28bd559 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Wed, 2 Feb 2022 15:08:18 +0900 +Subject: [PATCH] test: add a test for mkdir_p() + +(cherry picked from commit 6f6b017b9bc69df3f3e308c36c95597002ce6e29) + +Related: #2017035 +--- + src/test/meson.build | 2 ++ + src/test/test-mkdir.c | 30 ++++++++++++++++++++++++++++++ + 2 files changed, 32 insertions(+) + create mode 100644 src/test/test-mkdir.c + +diff --git a/src/test/meson.build b/src/test/meson.build +index 75f78e2e1a..14b7939b1f 100644 +--- a/src/test/meson.build ++++ b/src/test/meson.build +@@ -193,6 +193,8 @@ tests += [ + + [files('test-macro.c')], + ++ [files('test-mkdir.c')], ++ + [files('test-json.c')], + + [files('test-modhex.c')], +diff --git a/src/test/test-mkdir.c b/src/test/test-mkdir.c +new file mode 100644 +index 0000000000..c715d5f096 +--- /dev/null ++++ b/src/test/test-mkdir.c +@@ -0,0 +1,30 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++ ++#include ++ ++#include "mkdir.h" ++#include "path-util.h" ++#include "rm-rf.h" ++#include "tests.h" ++#include "tmpfile-util.h" ++ ++TEST(mkdir_p) { ++ _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL; ++ _cleanup_free_ char *p = NULL; ++ ++ assert_se(mkdtemp_malloc("/tmp/test-mkdir-XXXXXX", &tmp) >= 0); ++ ++ assert_se(p = path_join(tmp, "run")); ++ assert_se(mkdir_p(p, 0755) >= 0); ++ ++ p = mfree(p); ++ assert_se(p = path_join(tmp, "var/run")); ++ assert_se(mkdir_parents(p, 0755) >= 0); ++ assert_se(symlink("../run", p) >= 0); ++ ++ p = mfree(p); ++ assert_se(p = path_join(tmp, "var/run/hoge/foo/baz")); ++ assert_se(mkdir_p(p, 0755) >= 0); ++} ++ ++DEFINE_TEST_MAIN(LOG_DEBUG); diff --git a/SOURCES/0063-util-another-set-of-CVE-2021-4034-assert-s.patch b/SOURCES/0063-util-another-set-of-CVE-2021-4034-assert-s.patch new file mode 100644 index 0000000..6671776 --- /dev/null +++ b/SOURCES/0063-util-another-set-of-CVE-2021-4034-assert-s.patch @@ -0,0 +1,32 @@ +From c134e85526f160ad4392edb333caadc5e425957d Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Tue, 1 Feb 2022 12:06:21 +0100 +Subject: [PATCH] util: another set of CVE-2021-4034 assert()s + +It's a good idea that we validate argc/argv when we are supposed to +store them away. + +(cherry picked from commit 007e03b284e8ffc0b92edb2122cd9d2d16f049ef) + +Related: #2017035 +--- + src/basic/util.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/basic/util.h b/src/basic/util.h +index 94804f28e3..68ae3b51e0 100644 +--- a/src/basic/util.h ++++ b/src/basic/util.h +@@ -9,6 +9,12 @@ extern int saved_argc; + extern char **saved_argv; + + static inline void save_argc_argv(int argc, char **argv) { ++ ++ /* Protect against CVE-2021-4034 style attacks */ ++ assert_se(argc > 0); ++ assert_se(argv); ++ assert_se(argv[0]); ++ + saved_argc = argc; + saved_argv = argv; + } diff --git a/SOURCES/0064-basic-update-CIFS-magic.patch b/SOURCES/0064-basic-update-CIFS-magic.patch new file mode 100644 index 0000000..101c13e --- /dev/null +++ b/SOURCES/0064-basic-update-CIFS-magic.patch @@ -0,0 +1,69 @@ +From 75b23fa0a4916a228b2b66e73044378931862a49 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Sun, 30 Jan 2022 23:40:05 +0100 +Subject: [PATCH] basic: update CIFS magic + +Kernel commit dea2903719283c156b53741126228c4a1b40440f exposed (and +renamed) CIFS_MAGIC_NUMBER as CIFS_SUPER_MAGIC along with +SMB2_SUPER_MAGIC. + +This fixes the following build fail on current Fedora Rawhide: +``` +../src/basic/meson.build:389:8: ERROR: Problem encountered: found unknown filesystem(s) defined in kernel headers: + +Filesystem found in kernel header but not in filesystems-gperf.gperf: CIFS_SUPER_MAGIC +Filesystem found in kernel header but not in filesystems-gperf.gperf: SMB2_SUPER_MAGIC +``` + +(cherry picked from commit bbe53713455be38c0a587626439fd171f28c77fc) + +Related: #2017035 +--- + src/basic/filesystems-gperf.gperf | 4 ++-- + src/basic/missing_magic.h | 11 ++++++++--- + 2 files changed, 10 insertions(+), 5 deletions(-) + +diff --git a/src/basic/filesystems-gperf.gperf b/src/basic/filesystems-gperf.gperf +index 08c8c44510..e8c5357f91 100644 +--- a/src/basic/filesystems-gperf.gperf ++++ b/src/basic/filesystems-gperf.gperf +@@ -40,7 +40,7 @@ ceph, {CEPH_SUPER_MAGIC} + cgroup2, {CGROUP2_SUPER_MAGIC} + # note that the cgroupfs magic got reassigned from cpuset + cgroup, {CGROUP_SUPER_MAGIC} +-cifs, {CIFS_MAGIC_NUMBER} ++cifs, {CIFS_SUPER_MAGIC, SMB2_SUPER_MAGIC} + coda, {CODA_SUPER_MAGIC} + configfs, {CONFIGFS_MAGIC} + cramfs, {CRAMFS_MAGIC} +@@ -109,7 +109,7 @@ selinuxfs, {SELINUX_MAGIC} + shiftfs, {SHIFTFS_MAGIC} + smackfs, {SMACK_MAGIC} + # smb3 is an alias for cifs +-smb3, {CIFS_MAGIC_NUMBER} ++smb3, {CIFS_SUPER_MAGIC} + # smbfs was removed from the kernel in 2010, the magic remains + smbfs, {SMB_SUPER_MAGIC} + sockfs, {SOCKFS_MAGIC} +diff --git a/src/basic/missing_magic.h b/src/basic/missing_magic.h +index 7d9320bb6d..c104fcfba3 100644 +--- a/src/basic/missing_magic.h ++++ b/src/basic/missing_magic.h +@@ -38,9 +38,14 @@ + #define XFS_SB_MAGIC 0x58465342 + #endif + +-/* Not exposed yet. Defined at fs/cifs/cifsglob.h */ +-#ifndef CIFS_MAGIC_NUMBER +-#define CIFS_MAGIC_NUMBER 0xFF534D42 ++/* dea2903719283c156b53741126228c4a1b40440f (5.17) */ ++#ifndef CIFS_SUPER_MAGIC ++#define CIFS_SUPER_MAGIC 0xFF534D42 ++#endif ++ ++/* dea2903719283c156b53741126228c4a1b40440f (5.17) */ ++#ifndef SMB2_SUPER_MAGIC ++#define SMB2_SUPER_MAGIC 0xFE534D42 + #endif + + /* 257f871993474e2bde6c497b54022c362cf398e1 (4.5) */ diff --git a/SOURCES/0065-shared-be-extra-paranoid-and-check-if-argc-0.patch b/SOURCES/0065-shared-be-extra-paranoid-and-check-if-argc-0.patch new file mode 100644 index 0000000..a89cfd2 --- /dev/null +++ b/SOURCES/0065-shared-be-extra-paranoid-and-check-if-argc-0.patch @@ -0,0 +1,27 @@ +From 83845c85669084c4cd69fa8bfe60c57d36bb8713 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 28 Jan 2022 21:44:32 +0100 +Subject: [PATCH] shared: be extra paranoid and check if argc > 0 + +and also if argv[0] is non-empty as a precaution for issues similar to +CVE-2021-4034. + +(cherry picked from commit 1637e757070a61b12b26a2a4ef547330562dc77f) + +Related: #2017035 +--- + src/shared/main-func.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/shared/main-func.h b/src/shared/main-func.h +index 05cdffeec0..09103bace9 100644 +--- a/src/shared/main-func.h ++++ b/src/shared/main-func.h +@@ -15,6 +15,7 @@ + #define _DEFINE_MAIN_FUNCTION(intro, impl, ret) \ + int main(int argc, char *argv[]) { \ + int r; \ ++ assert(argc > 0 && !isempty(argv[0])); \ + save_argc_argv(argc, argv); \ + intro; \ + r = impl; \ diff --git a/SOURCES/0066-core-check-if-argc-0-and-argv-0-is-set.patch b/SOURCES/0066-core-check-if-argc-0-and-argv-0-is-set.patch new file mode 100644 index 0000000..830b64f --- /dev/null +++ b/SOURCES/0066-core-check-if-argc-0-and-argv-0-is-set.patch @@ -0,0 +1,27 @@ +From efe174ec51b9242101868e83f12cc1186fe1b71b Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 30 Jan 2022 17:54:55 +0900 +Subject: [PATCH] core: check if argc > 0 and argv[0] is set + +Follow-up for 1637e757070a61b12b26a2a4ef547330562dc77f. + +(cherry picked from commit cf3095ac2bbdba3db0d8f7fa7afcee8b8c136201) + +Related: #2017035 +--- + src/core/main.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/core/main.c b/src/core/main.c +index 7ea848ebeb..f315a44a08 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -2726,6 +2726,8 @@ int main(int argc, char *argv[]) { + Manager *m = NULL; + FDSet *fds = NULL; + ++ assert(argc > 0 && !isempty(argv[0])); ++ + /* SysV compatibility: redirect init → telinit */ + redirect_telinit(argc, argv); + diff --git a/SOURCES/0067-core-check-argc-argv-uncoditionally.patch b/SOURCES/0067-core-check-argc-argv-uncoditionally.patch new file mode 100644 index 0000000..070c1f1 --- /dev/null +++ b/SOURCES/0067-core-check-argc-argv-uncoditionally.patch @@ -0,0 +1,43 @@ +From 43622b6eed32aece624a293167a6d705c08b8d03 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Sun, 30 Jan 2022 15:49:27 +0100 +Subject: [PATCH] core: check argc/argv uncoditionally + +as `assert()` might be dropped with `-DNDEBUG`. + +Follow-up to cf3095a and 1637e75. + +(cherry picked from commit 61b9769bda465f4832080e2a7a8285d247121d70) + +Related: #2017035 +--- + src/core/main.c | 2 +- + src/shared/main-func.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/main.c b/src/core/main.c +index f315a44a08..cb3131c12a 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -2726,7 +2726,7 @@ int main(int argc, char *argv[]) { + Manager *m = NULL; + FDSet *fds = NULL; + +- assert(argc > 0 && !isempty(argv[0])); ++ assert_se(argc > 0 && !isempty(argv[0])); + + /* SysV compatibility: redirect init → telinit */ + redirect_telinit(argc, argv); +diff --git a/src/shared/main-func.h b/src/shared/main-func.h +index 09103bace9..81a5c1813c 100644 +--- a/src/shared/main-func.h ++++ b/src/shared/main-func.h +@@ -15,7 +15,7 @@ + #define _DEFINE_MAIN_FUNCTION(intro, impl, ret) \ + int main(int argc, char *argv[]) { \ + int r; \ +- assert(argc > 0 && !isempty(argv[0])); \ ++ assert_se(argc > 0 && !isempty(argv[0])); \ + save_argc_argv(argc, argv); \ + intro; \ + r = impl; \ diff --git a/SOURCES/0068-test-temporary-workaround-for-21819.patch b/SOURCES/0068-test-temporary-workaround-for-21819.patch new file mode 100644 index 0000000..bed8471 --- /dev/null +++ b/SOURCES/0068-test-temporary-workaround-for-21819.patch @@ -0,0 +1,48 @@ +From d924e5c3014a65e059fd414b90893d320e1784bd Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 27 Jan 2022 22:51:15 +0100 +Subject: [PATCH] test: temporary workaround for #21819 + +Since the TEST-64-UDEV-STORAGE fails are quite frequent now and the root +cause is yet to be discovered, let's add a kludge that attempts to retry +the test up to two more times in case it fails, so we don't +unnecessarily disturb CIs while the issue is being investigated. + +Revert this commit once #21819 is sorted out. + +(cherry picked from commit 95e35511bbdb7810c00c2e4a6cbda5b187192f74) + +Related: #2017035 +--- + test/TEST-64-UDEV-STORAGE/test.sh | 11 ++++++++--- + 1 file changed, 8 insertions(+), 3 deletions(-) + +diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh +index 0f26eaafeb..f784e65984 100755 +--- a/test/TEST-64-UDEV-STORAGE/test.sh ++++ b/test/TEST-64-UDEV-STORAGE/test.sh +@@ -119,7 +119,6 @@ test_run() { + + # Execute each currently defined function starting with "testcase_" + for testcase in "${TESTCASES[@]}"; do +- _image_cleanup + echo "------ $testcase: BEGIN ------" + # Note for my future frustrated self: `fun && xxx` (as well as ||, if, while, + # until, etc.) _DISABLES_ the `set -e` behavior in _ALL_ nested function +@@ -130,8 +129,14 @@ test_run() { + # So, be careful when adding clean up snippets in the testcase_*() functions - + # if the `test_run_one()` function isn't the last command, you have propagate + # the exit code correctly (e.g. `test_run_one() || return $?`, see below). +- ec=0 +- "$testcase" "$test_id" || ec=$? ++ ++ # FIXME: temporary workaround for intermittent fails in certain tests ++ # See: https://github.com/systemd/systemd/issues/21819 ++ for ((_i = 0; _i < 3; _i++)); do ++ _image_cleanup ++ ec=0 ++ "$testcase" "$test_id" && break || ec=$? ++ done + case $ec in + 0) + passed+=("$testcase") diff --git a/SOURCES/0069-test-don-t-leak-local-variable-to-outer-scopes.patch b/SOURCES/0069-test-don-t-leak-local-variable-to-outer-scopes.patch new file mode 100644 index 0000000..44bcc9e --- /dev/null +++ b/SOURCES/0069-test-don-t-leak-local-variable-to-outer-scopes.patch @@ -0,0 +1,52 @@ +From fe4bd1d397af0fef644c401ca5a94e4c82316b4c Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 27 Jan 2022 22:50:58 +0100 +Subject: [PATCH] test: don't leak local variable to outer scopes + +(cherry picked from commit 888d0bc074c6d11593d28c6a876787ae864604ea) + +Related: #2017035 +--- + test/TEST-64-UDEV-STORAGE/test.sh | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh +index f784e65984..c360c8b661 100755 +--- a/test/TEST-64-UDEV-STORAGE/test.sh ++++ b/test/TEST-64-UDEV-STORAGE/test.sh +@@ -171,6 +171,7 @@ testcase_megasas2_basic() { + return 77 + fi + ++ local i + local qemu_opts=( + "-device megasas-gen2,id=scsi0" + "-device megasas-gen2,id=scsi1" +@@ -197,6 +198,9 @@ testcase_nvme_basic() { + return 77 + fi + ++ local i ++ local qemu_opts=() ++ + for i in {0..27}; do + qemu_opts+=( + "-device nvme,drive=nvme$i,serial=deadbeef$i,num_queues=8" +@@ -220,7 +224,7 @@ testcase_virtio_scsi_identically_named_partitions() { + # and attach them to a virtio-scsi controller + local qemu_opts=("-device virtio-scsi-pci,id=scsi0,num_queues=4") + local diskpath="${TESTDIR:?}/namedpart0.img" +- local lodev qemu_timeout ++ local i lodev qemu_timeout + + dd if=/dev/zero of="$diskpath" bs=1M count=18 + lodev="$(losetup --show -f -P "$diskpath")" +@@ -330,7 +334,7 @@ testcase_lvm_basic() { + fi + + local qemu_opts=("-device ahci,id=ahci0") +- local diskpath ++ local diskpath i + + # Attach 4 SATA disks to the VM (and set their model and serial fields + # to something predictable, so we can refer to them later) diff --git a/SOURCES/0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch b/SOURCES/0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch new file mode 100644 index 0000000..4c3045b --- /dev/null +++ b/SOURCES/0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch @@ -0,0 +1,208 @@ +From 03bf37877f1c7045724cba12d69e93c8c411646e Mon Sep 17 00:00:00 2001 +From: Anita Zhang +Date: Wed, 26 Jan 2022 10:53:40 -0800 +Subject: [PATCH] tree-wide: don't use strjoina() on getenv() values + +Avoid doing stack allocations on environment variables. + +(cherry picked from commit 1d3b68f6e1538b6a86cbe3650d8b81df2877ef42) + +Related: #2017035 +--- + src/basic/path-lookup.c | 8 ++++++-- + src/core/dbus.c | 8 ++++++-- + src/home/homed-home.c | 10 +++++++--- + src/home/homed-manager.c | 26 ++++++++++++++++++-------- + src/run/run.c | 7 +++++-- + src/shared/pager.c | 9 +++++++-- + 6 files changed, 49 insertions(+), 19 deletions(-) + +diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c +index 6fb8c40e7a..921a30cef7 100644 +--- a/src/basic/path-lookup.c ++++ b/src/basic/path-lookup.c +@@ -238,7 +238,7 @@ static int acquire_generator_dirs( + char **generator_early, + char **generator_late) { + +- _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL; ++ _cleanup_free_ char *x = NULL, *y = NULL, *z = NULL, *p = NULL; + const char *prefix; + + assert(generator); +@@ -261,7 +261,11 @@ static int acquire_generator_dirs( + if (!e) + return -ENXIO; + +- prefix = strjoina(e, "/systemd"); ++ p = path_join(e, "/systemd"); ++ if (!p) ++ return -ENOMEM; ++ ++ prefix = p; + } + + x = path_join(prefix, "generator"); +diff --git a/src/core/dbus.c b/src/core/dbus.c +index 2c5bda58f9..073675ceef 100644 +--- a/src/core/dbus.c ++++ b/src/core/dbus.c +@@ -925,14 +925,18 @@ int bus_init_private(Manager *m) { + + r = sockaddr_un_set_path(&sa.un, "/run/systemd/private"); + } else { +- const char *e, *joined; ++ _cleanup_free_ char *joined = NULL; ++ const char *e; + + e = secure_getenv("XDG_RUNTIME_DIR"); + if (!e) + return log_error_errno(SYNTHETIC_ERRNO(EHOSTDOWN), + "XDG_RUNTIME_DIR is not set, refusing."); + +- joined = strjoina(e, "/systemd/private"); ++ joined = path_join(e, "/systemd/private"); ++ if (!joined) ++ return log_oom(); ++ + r = sockaddr_un_set_path(&sa.un, joined); + } + if (r < 0) +diff --git a/src/home/homed-home.c b/src/home/homed-home.c +index 470c7f07f6..1340cf30d3 100644 +--- a/src/home/homed-home.c ++++ b/src/home/homed-home.c +@@ -1185,14 +1185,18 @@ static int home_start_work(Home *h, const char *verb, UserRecord *hr, UserRecord + if (r < 0) + return r; + if (r == 0) { ++ _cleanup_free_ char *joined = NULL; + const char *homework, *suffix, *unix_path; + + /* Child */ + + suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX"); +- if (suffix) +- unix_path = strjoina("/run/systemd/home/notify.", suffix); +- else ++ if (suffix) { ++ joined = strjoin("/run/systemd/home/notify.", suffix); ++ if (!joined) ++ return log_oom(); ++ unix_path = joined; ++ } else + unix_path = "/run/systemd/home/notify"; + + if (setenv("NOTIFY_SOCKET", unix_path, 1) < 0) { +diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c +index 6c178b8a0e..c1ec555cac 100644 +--- a/src/home/homed-manager.c ++++ b/src/home/homed-manager.c +@@ -936,6 +936,7 @@ int manager_enumerate_images(Manager *m) { + } + + static int manager_connect_bus(Manager *m) { ++ _cleanup_free_ char *b = NULL; + const char *suffix, *busname; + int r; + +@@ -955,9 +956,12 @@ static int manager_connect_bus(Manager *m) { + return r; + + suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX"); +- if (suffix) +- busname = strjoina("org.freedesktop.home1.", suffix); +- else ++ if (suffix) { ++ b = strjoin("org.freedesktop.home1.", suffix); ++ if (!b) ++ return log_oom(); ++ busname = b; ++ } else + busname = "org.freedesktop.home1"; + + r = sd_bus_request_name_async(m->bus, NULL, busname, 0, NULL, NULL); +@@ -974,6 +978,7 @@ static int manager_connect_bus(Manager *m) { + } + + static int manager_bind_varlink(Manager *m) { ++ _cleanup_free_ char *p = NULL; + const char *suffix, *socket_path; + int r; + +@@ -999,9 +1004,12 @@ static int manager_bind_varlink(Manager *m) { + /* To make things easier to debug, when working from a homed managed home directory, let's optionally + * use a different varlink socket name */ + suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX"); +- if (suffix) +- socket_path = strjoina("/run/systemd/userdb/io.systemd.Home.", suffix); +- else ++ if (suffix) { ++ p = strjoin("/run/systemd/userdb/io.systemd.Home.", suffix); ++ if (!p) ++ return log_oom(); ++ socket_path = p; ++ } else + socket_path = "/run/systemd/userdb/io.systemd.Home"; + + r = varlink_server_listen_address(m->varlink_server, socket_path, 0666); +@@ -1159,9 +1167,11 @@ static int manager_listen_notify(Manager *m) { + + suffix = getenv("SYSTEMD_HOME_DEBUG_SUFFIX"); + if (suffix) { +- const char *unix_path; ++ _cleanup_free_ char *unix_path = NULL; + +- unix_path = strjoina("/run/systemd/home/notify.", suffix); ++ unix_path = strjoin("/run/systemd/home/notify.", suffix); ++ if (!unix_path) ++ return log_oom(); + r = sockaddr_un_set_path(&sa.un, unix_path); + if (r < 0) + return log_error_errno(r, "Socket path %s does not fit in sockaddr_un: %m", unix_path); +diff --git a/src/run/run.c b/src/run/run.c +index ff24373847..e75b027542 100644 +--- a/src/run/run.c ++++ b/src/run/run.c +@@ -794,9 +794,12 @@ static int transient_service_set_properties(sd_bus_message *m, const char *pty_p + + e = getenv("TERM"); + if (e) { +- char *n; ++ _cleanup_free_ char *n = NULL; ++ ++ n = strjoin("TERM=", e); ++ if (!n) ++ return log_oom(); + +- n = strjoina("TERM=", e); + r = sd_bus_message_append(m, + "(sv)", + "Environment", "as", 1, n); +diff --git a/src/shared/pager.c b/src/shared/pager.c +index f75ef62d2d..9426d3ef98 100644 +--- a/src/shared/pager.c ++++ b/src/shared/pager.c +@@ -86,6 +86,7 @@ static int no_quit_on_interrupt(int exe_name_fd, const char *less_opts) { + void pager_open(PagerFlags flags) { + _cleanup_close_pair_ int fd[2] = { -1, -1 }, exe_name_pipe[2] = { -1, -1 }; + _cleanup_strv_free_ char **pager_args = NULL; ++ _cleanup_free_ char *l = NULL; + const char *pager, *less_opts; + int r; + +@@ -131,8 +132,12 @@ void pager_open(PagerFlags flags) { + less_opts = getenv("SYSTEMD_LESS"); + if (!less_opts) + less_opts = "FRSXMK"; +- if (flags & PAGER_JUMP_TO_END) +- less_opts = strjoina(less_opts, " +G"); ++ if (flags & PAGER_JUMP_TO_END) { ++ l = strjoin(less_opts, " +G"); ++ if (!l) ++ return (void) log_oom(); ++ less_opts = l; ++ } + + /* We set SIGINT as PR_DEATHSIG signal here, to match the "K" parameter we set in $LESS, which enables SIGINT behaviour. */ + r = safe_fork("(pager)", FORK_RESET_SIGNALS|FORK_DEATHSIG_SIGINT|FORK_RLIMIT_NOFILE_SAFE|FORK_LOG, &pager_pid); diff --git a/SOURCES/0071-man-clarify-Environmentfile-format.patch b/SOURCES/0071-man-clarify-Environmentfile-format.patch new file mode 100644 index 0000000..91dc2d5 --- /dev/null +++ b/SOURCES/0071-man-clarify-Environmentfile-format.patch @@ -0,0 +1,83 @@ +From 05ea18897aeafa1f2d47c5eae6c43bdd6ff71b9d Mon Sep 17 00:00:00 2001 +From: Yonathan Randolph +Date: Sun, 26 Dec 2021 17:12:00 -0800 +Subject: [PATCH] man: clarify Environmentfile format + +Remove incorrect claim that C escapes (such as \t and \n) are recognized and that control characters are disallowed. Specify the allowed characters and escapes with single quotes, with double quotes, and without quotes. + +(cherry picked from commit 4bbcde8498eb59557ebddd7830efb47c0297ff4b) + +Related: #2017035 +--- + man/systemd.exec.xml | 51 ++++++++++++++++++++++++++++---------------- + 1 file changed, 33 insertions(+), 18 deletions(-) + +diff --git a/man/systemd.exec.xml b/man/systemd.exec.xml +index cd21d5b28d..69858d5e59 100644 +--- a/man/systemd.exec.xml ++++ b/man/systemd.exec.xml +@@ -2485,18 +2485,39 @@ SystemCallErrorNumber=EPERM + + EnvironmentFile= + +- Similar to Environment= but reads the environment variables from a text +- file. The text file should contain new-line-separated variable assignments. Empty lines, lines without an +- = separator, or lines starting with ; or # will be ignored, which may be used for +- commenting. A line ending with a backslash will be concatenated with the following one, allowing multiline +- variable definitions. The parser strips leading and trailing whitespace from the values of assignments, unless +- you use double quotes ("). +- +- C escapes +- are supported, but not +- most control characters. +- \t and \n can be used to insert tabs and newlines within +- EnvironmentFile=. ++ Similar to Environment= but reads the environment variables from a text file. ++ The text file should contain newline-separated variable assignments. Empty lines, lines without an ++ = separator, or lines starting with ; or # will be ++ ignored, which may be used for commenting. The file must be UTF-8 encoded. Valid characters are unicode scalar values other than noncharacters, U+0000 NUL, and U+FEFF byte order mark. Control codes other than NUL ++ are allowed. ++ ++ In the file, an unquoted value after the = is parsed with the same backslash-escape ++ rules as unquoted ++ text in a POSIX shell, but unlike in a shell, interior whitespace is preserved and quotes after the ++ first non-whitespace character are preserved. Leading and trailing whitespace (space, tab, carriage return) is ++ discarded, but interior whitespace within the line is preserved verbatim. A line ending with a backslash will be ++ continued to the following one, with the newline itself discarded. A backslash ++ \ followed by any character other than newline will preserve the following character, so that ++ \\ will become the value \. ++ ++ In the file, a '-quoted value after the = can span multiple lines ++ and contain any character verbatim other than single quote, like single-quoted ++ text in a POSIX shell. No backslash-escape sequences are recognized. Leading and trailing whitespace ++ outside of the single quotes is discarded. ++ ++ In the file, a "-quoted value after the = can span multiple lines, ++ and the same escape sequences are recognized as in double-quoted ++ text of a POSIX shell. Backslash (\) followed by any of "\`$ will ++ preserve that character. A backslash followed by newline is a line continuation, and the newline itself is ++ discarded. A backslash followed by any other character is ignored; both the backslash and the following ++ character are preserved verbatim. Leading and trailing whitespace outside of the double quotes is ++ discarded. + + The argument passed should be an absolute filename or wildcard expression, optionally prefixed with + -, which indicates that if the file does not exist, it will not be read and no error or +@@ -2529,12 +2550,6 @@ SystemCallErrorNumber=EPERM + Variables set for invoked processes due to this setting are subject to being overridden by those + configured with Environment= or EnvironmentFile=. + +- C escapes +- are supported, but not +- most control characters. +- \t and \n can be used to insert tabs and newlines within +- EnvironmentFile=. +- + Example: + PassEnvironment=VAR1 VAR2 VAR3 + passes three variables VAR1, diff --git a/SOURCES/0072-test-load-fragment-add-a-basic-test-for-config_parse.patch b/SOURCES/0072-test-load-fragment-add-a-basic-test-for-config_parse.patch new file mode 100644 index 0000000..c0ca80d --- /dev/null +++ b/SOURCES/0072-test-load-fragment-add-a-basic-test-for-config_parse.patch @@ -0,0 +1,88 @@ +From 01df4d485c8a6f3493a83a2a61572e9f2bccb649 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 09:39:55 +0100 +Subject: [PATCH] test-load-fragment: add a basic test for + config_parse_unit_env_file() + +(cherry picked from commit 3ef86964ed151aa2464701eef46d665adfd70895) + +Related: #2017035 +--- + src/test/test-load-fragment.c | 64 +++++++++++++++++++++++++++++++++++ + 1 file changed, 64 insertions(+) + +diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c +index 1bd68c7e0a..fbe4744333 100644 +--- a/src/test/test-load-fragment.c ++++ b/src/test/test-load-fragment.c +@@ -773,6 +773,70 @@ TEST(config_parse_pass_environ) { + assert_se(streq(passenv[0], "normal_name")); + } + ++TEST(config_parse_unit_env_file) { ++ /* int config_parse_unit_env_file( ++ const char *unit, ++ const char *filename, ++ unsigned line, ++ const char *section, ++ unsigned section_line, ++ const char *lvalue, ++ int ltype, ++ const char *rvalue, ++ void *data, ++ void *userdata) */ ++ ++ _cleanup_(manager_freep) Manager *m = NULL; ++ Unit *u; ++ _cleanup_strv_free_ char **files = NULL; ++ int r; ++ ++ r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ if (manager_errno_skip_test(r)) { ++ log_notice_errno(r, "Skipping test: manager_new: %m"); ++ return; ++ } ++ ++ assert_se(r >= 0); ++ assert_se(manager_startup(m, NULL, NULL, NULL) >= 0); ++ ++ assert_se(u = unit_new(m, sizeof(Service))); ++ assert_se(unit_add_name(u, "foobar.service") == 0); ++ ++ r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1, ++ "EnvironmentFile", 0, "not-absolute", ++ &files, u); ++ assert_se(r == 0); ++ assert_se(strv_length(files) == 0); ++ ++ r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1, ++ "EnvironmentFile", 0, "/absolute1", ++ &files, u); ++ assert_se(r == 0); ++ assert_se(strv_length(files) == 1); ++ ++ r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1, ++ "EnvironmentFile", 0, "/absolute2", ++ &files, u); ++ assert_se(r == 0); ++ assert_se(strv_length(files) == 2); ++ assert_se(streq(files[0], "/absolute1")); ++ assert_se(streq(files[1], "/absolute2")); ++ ++ r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1, ++ "EnvironmentFile", 0, "", ++ &files, u); ++ assert_se(r == 0); ++ assert_se(strv_isempty(files)); ++ ++ r = config_parse_unit_env_file(u->id, "fake", 1, "section", 1, ++ "EnvironmentFile", 0, "/path/%n.conf", ++ &files, u); ++ assert_se(r == 0); ++ assert_se(strv_length(files) == 1); ++ assert_se(streq(files[0], "/path/foobar.service.conf")); ++} ++ + TEST(unit_dump_config_items) { + unit_dump_config_items(stdout); + } diff --git a/SOURCES/0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch b/SOURCES/0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch new file mode 100644 index 0000000..bc2d6ae --- /dev/null +++ b/SOURCES/0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch @@ -0,0 +1,119 @@ +From 65aca6d552b69af81fe9588720194e0b86a160fb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 09:51:19 +0100 +Subject: [PATCH] core/execute: use _cleanup_ in + exec_context_load_environment() + +Also rename variables. + +(cherry picked from commit 398a5009169fdc0c4eb147692c0cd929b9fe4c84) + +Related: #2017035 +--- + src/core/execute.c | 51 +++++++++++++++++++--------------------------- + 1 file changed, 21 insertions(+), 30 deletions(-) + +diff --git a/src/core/execute.c b/src/core/execute.c +index 16f346f339..2ab65e9cfe 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -5363,20 +5363,18 @@ static int exec_context_named_iofds( + return targets == 0 ? 0 : -ENOENT; + } + +-static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***l) { +- char **i, **r = NULL; ++static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***ret) { ++ _cleanup_strv_free_ char **v = NULL; ++ char **i; ++ int r; + + assert(c); +- assert(l); ++ assert(ret); + + STRV_FOREACH(i, c->environment_files) { +- char *fn; +- int k; +- bool ignore = false; +- char **p; + _cleanup_globfree_ glob_t pglob = {}; +- +- fn = *i; ++ bool ignore = false; ++ char *fn = *i; + + if (fn[0] == '-') { + ignore = true; +@@ -5386,33 +5384,30 @@ static int exec_context_load_environment(const Unit *unit, const ExecContext *c, + if (!path_is_absolute(fn)) { + if (ignore) + continue; +- +- strv_free(r); + return -EINVAL; + } + + /* Filename supports globbing, take all matching files */ +- k = safe_glob(fn, 0, &pglob); +- if (k < 0) { ++ r = safe_glob(fn, 0, &pglob); ++ if (r < 0) { + if (ignore) + continue; +- +- strv_free(r); +- return k; ++ return r; + } + + /* When we don't match anything, -ENOENT should be returned */ + assert(pglob.gl_pathc > 0); + + for (unsigned n = 0; n < pglob.gl_pathc; n++) { +- k = load_env_file(NULL, pglob.gl_pathv[n], &p); +- if (k < 0) { ++ _cleanup_strv_free_ char **p = NULL; ++ ++ r = load_env_file(NULL, pglob.gl_pathv[n], &p); ++ if (r < 0) { + if (ignore) + continue; +- +- strv_free(r); +- return k; ++ return r; + } ++ + /* Log invalid environment variables with filename */ + if (p) { + InvalidEnvInfo info = { +@@ -5423,23 +5418,19 @@ static int exec_context_load_environment(const Unit *unit, const ExecContext *c, + p = strv_env_clean_with_callback(p, invalid_env, &info); + } + +- if (!r) +- r = p; ++ if (!v) ++ v = TAKE_PTR(p); + else { +- char **m; +- +- m = strv_env_merge(r, p); +- strv_free(r); +- strv_free(p); ++ char **m = strv_env_merge(v, p); + if (!m) + return -ENOMEM; + +- r = m; ++ strv_free_and_replace(v, m); + } + } + } + +- *l = r; ++ *ret = TAKE_PTR(v); + + return 0; + } diff --git a/SOURCES/0074-test-env-file-add-tests-for-quoting-in-env-files.patch b/SOURCES/0074-test-env-file-add-tests-for-quoting-in-env-files.patch new file mode 100644 index 0000000..6b1fdce --- /dev/null +++ b/SOURCES/0074-test-env-file-add-tests-for-quoting-in-env-files.patch @@ -0,0 +1,118 @@ +From 402854a52a0a659fd914279eae17b4e065a9c294 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 10:15:50 +0100 +Subject: [PATCH] test-env-file: add tests for quoting in env files + +(cherry picked from commit e9e982a29d52834375e5fb553cecb45bc905cf91) + +Related: #2017035 +--- + src/test/test-env-file.c | 68 +++++++++++++++++++++++++++++----------- + 1 file changed, 50 insertions(+), 18 deletions(-) + +diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c +index 6cc2455c1f..7b132447bf 100644 +--- a/src/test/test-env-file.c ++++ b/src/test/test-env-file.c +@@ -13,11 +13,11 @@ + "a=a\n" \ + "b=b\\\n" \ + "c\n" \ +- "d=d\\\n" \ +- "e\\\n" \ +- "f\n" \ ++ "d= d\\\n" \ ++ "e \\\n" \ ++ "f \n" \ + "g=g\\ \n" \ +- "h=h\n" \ ++ "h= ąęół\\ śćńźżµ \n" \ + "i=i\\" + + #define env_file_2 \ +@@ -26,22 +26,34 @@ + #define env_file_3 \ + "#SPAMD_ARGS=\"-d --socketpath=/var/lib/bulwark/spamd \\\n" \ + "#--nouser-config \\\n" \ +- "normal=line" +- +-#define env_file_4 \ +- "# Generated\n" \ +- "\n" \ +- "HWMON_MODULES=\"coretemp f71882fg\"\n" \ +- "\n" \ +- "# For compatibility reasons\n" \ +- "\n" \ +- "MODULE_0=coretemp\n" \ +- "MODULE_1=f71882fg" ++ "normal=line \\\n" \ ++ ";normal=ignored \\\n" \ ++ "normal_ignored \\\n" \ ++ "normal ignored \\\n" ++ ++#define env_file_4 \ ++ "# Generated\n" \ ++ "\n" \ ++ "HWMON_MODULES=\"coretemp f71882fg\"\n" \ ++ "\n" \ ++ "# For compatibility reasons\n" \ ++ "\n" \ ++ "MODULE_0=coretemp\n" \ ++ "MODULE_1=f71882fg" + + #define env_file_5 \ +- "a=\n" \ ++ "a=\n" \ + "b=" + ++#define env_file_6 \ ++ "a=\\ \\n \\t \\x \\y \\' \n" \ ++ "b= \\$' \n" \ ++ "c= ' \\n\\t\\$\\`\\\\\n" \ ++ "' \n" \ ++ "d= \" \\n\\t\\$\\`\\\\\n" \ ++ "\" \n" ++ ++ + TEST(load_env_file_1) { + _cleanup_strv_free_ char **data = NULL; + int r; +@@ -57,9 +69,9 @@ TEST(load_env_file_1) { + assert_se(r == 0); + assert_se(streq(data[0], "a=a")); + assert_se(streq(data[1], "b=bc")); +- assert_se(streq(data[2], "d=def")); ++ assert_se(streq(data[2], "d=de f")); + assert_se(streq(data[3], "g=g ")); +- assert_se(streq(data[4], "h=h")); ++ assert_se(streq(data[4], "h=ąęół śćńźżµ")); + assert_se(streq(data[5], "i=i")); + assert_se(data[6] == NULL); + } +@@ -133,6 +145,26 @@ TEST(load_env_file_5) { + assert_se(data[2] == NULL); + } + ++TEST(load_env_file_6) { ++ _cleanup_strv_free_ char **data = NULL; ++ int r; ++ ++ _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; ++ _cleanup_close_ int fd; ++ ++ fd = mkostemp_safe(name); ++ assert_se(fd >= 0); ++ assert_se(write(fd, env_file_6, strlen(env_file_6)) == strlen(env_file_6)); ++ ++ r = load_env_file(NULL, name, &data); ++ assert_se(r == 0); ++ assert_se(streq(data[0], "a= n t x y '")); ++ assert_se(streq(data[1], "b=$'")); ++ assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n")); ++ assert_se(streq(data[3], "d= \\n\\t$`\\\n")); ++ assert_se(data[4] == NULL); ++} ++ + TEST(write_and_load_env_file) { + const char *v; + diff --git a/SOURCES/0075-core-shorten-long-unit-names-that-are-based-on-paths.patch b/SOURCES/0075-core-shorten-long-unit-names-that-are-based-on-paths.patch new file mode 100644 index 0000000..305ebd1 --- /dev/null +++ b/SOURCES/0075-core-shorten-long-unit-names-that-are-based-on-paths.patch @@ -0,0 +1,275 @@ +From 4bc17b038971160f94321c7be9cd924b256d9ef8 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Tue, 15 Mar 2022 19:02:05 +0100 +Subject: [PATCH] core: shorten long unit names that are based on paths and + append path hash at the end + +Fixes #18077 + +(cherry picked from commit 1d0727e76fd5e9a07cc9991ec9a10ea1d78a99c7) + +Resolves: #2083493 +--- + src/basic/string-util.h | 23 ++++++----- + src/basic/unit-name.c | 86 ++++++++++++++++++++++++++++++++++++++- + src/basic/unit-name.h | 3 ++ + src/core/mount.c | 3 ++ + src/test/test-unit-name.c | 26 ++++++++++-- + 5 files changed, 125 insertions(+), 16 deletions(-) + +diff --git a/src/basic/string-util.h b/src/basic/string-util.h +index a1d88fbb95..ffb69e69cc 100644 +--- a/src/basic/string-util.h ++++ b/src/basic/string-util.h +@@ -10,17 +10,18 @@ + #include "string-util-fundamental.h" + + /* What is interpreted as whitespace? */ +-#define WHITESPACE " \t\n\r" +-#define NEWLINE "\n\r" +-#define QUOTES "\"\'" +-#define COMMENTS "#;" +-#define GLOB_CHARS "*?[" +-#define DIGITS "0123456789" +-#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz" +-#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +-#define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS +-#define ALPHANUMERICAL LETTERS DIGITS +-#define HEXDIGITS DIGITS "abcdefABCDEF" ++#define WHITESPACE " \t\n\r" ++#define NEWLINE "\n\r" ++#define QUOTES "\"\'" ++#define COMMENTS "#;" ++#define GLOB_CHARS "*?[" ++#define DIGITS "0123456789" ++#define LOWERCASE_LETTERS "abcdefghijklmnopqrstuvwxyz" ++#define UPPERCASE_LETTERS "ABCDEFGHIJKLMNOPQRSTUVWXYZ" ++#define LETTERS LOWERCASE_LETTERS UPPERCASE_LETTERS ++#define ALPHANUMERICAL LETTERS DIGITS ++#define HEXDIGITS DIGITS "abcdefABCDEF" ++#define LOWERCASE_HEXDIGITS DIGITS "abcdef" + + static inline char* strstr_ptr(const char *haystack, const char *needle) { + if (!haystack || !needle) +diff --git a/src/basic/unit-name.c b/src/basic/unit-name.c +index 671e30a53f..6cba8ba140 100644 +--- a/src/basic/unit-name.c ++++ b/src/basic/unit-name.c +@@ -5,12 +5,17 @@ + #include + #include + ++#include "sd-id128.h" ++ + #include "alloc-util.h" + #include "glob-util.h" + #include "hexdecoct.h" + #include "memory-util.h" + #include "path-util.h" ++#include "random-util.h" ++#include "sparse-endian.h" + #include "special.h" ++#include "stdio-util.h" + #include "string-util.h" + #include "strv.h" + #include "unit-name.h" +@@ -31,6 +36,9 @@ + VALID_CHARS_WITH_AT \ + "[]!-*?" + ++#define LONG_UNIT_NAME_HASH_KEY SD_ID128_MAKE(ec,f2,37,fb,58,32,4a,32,84,9f,06,9b,0d,21,eb,9a) ++#define UNIT_NAME_HASH_LENGTH_CHARS 16 ++ + bool unit_name_is_valid(const char *n, UnitNameFlags flags) { + const char *e, *i, *at; + +@@ -507,6 +515,68 @@ int unit_name_template(const char *f, char **ret) { + return 0; + } + ++bool unit_name_is_hashed(const char *name) { ++ char *s; ++ ++ if (!unit_name_is_valid(name, UNIT_NAME_PLAIN)) ++ return false; ++ ++ assert_se(s = strrchr(name, '.')); ++ ++ if (s - name < UNIT_NAME_HASH_LENGTH_CHARS + 1) ++ return false; ++ ++ s -= UNIT_NAME_HASH_LENGTH_CHARS; ++ if (s[-1] != '_') ++ return false; ++ ++ for (size_t i = 0; i < UNIT_NAME_HASH_LENGTH_CHARS; i++) ++ if (!strchr(LOWERCASE_HEXDIGITS, s[i])) ++ return false; ++ ++ return true; ++} ++ ++int unit_name_hash_long(const char *name, char **ret) { ++ _cleanup_free_ char *n = NULL, *hash = NULL; ++ char *suffix; ++ le64_t h; ++ size_t len; ++ ++ if (strlen(name) < UNIT_NAME_MAX) ++ return -EMSGSIZE; ++ ++ suffix = strrchr(name, '.'); ++ if (!suffix) ++ return -EINVAL; ++ ++ if (unit_type_from_string(suffix+1) < 0) ++ return -EINVAL; ++ ++ h = htole64(siphash24_string(name, LONG_UNIT_NAME_HASH_KEY.bytes)); ++ ++ hash = hexmem(&h, sizeof(h)); ++ if (!hash) ++ return -ENOMEM; ++ ++ assert_se(strlen(hash) == UNIT_NAME_HASH_LENGTH_CHARS); ++ ++ len = UNIT_NAME_MAX - 1 - strlen(suffix+1) - UNIT_NAME_HASH_LENGTH_CHARS - 2; ++ assert(len > 0 && len < UNIT_NAME_MAX); ++ ++ n = strndup(name, len); ++ if (!n) ++ return -ENOMEM; ++ ++ if (!strextend(&n, "_", hash, suffix)) ++ return -ENOMEM; ++ assert_se(unit_name_is_valid(n, UNIT_NAME_PLAIN)); ++ ++ *ret = TAKE_PTR(n); ++ ++ return 0; ++} ++ + int unit_name_from_path(const char *path, const char *suffix, char **ret) { + _cleanup_free_ char *p = NULL, *s = NULL; + int r; +@@ -526,8 +596,17 @@ int unit_name_from_path(const char *path, const char *suffix, char **ret) { + if (!s) + return -ENOMEM; + +- if (strlen(s) >= UNIT_NAME_MAX) /* Return a slightly more descriptive error for this specific condition */ +- return -ENAMETOOLONG; ++ if (strlen(s) >= UNIT_NAME_MAX) { ++ _cleanup_free_ char *n = NULL; ++ ++ log_debug("Unit name \"%s\" too long, falling back to hashed unit name.", s); ++ ++ r = unit_name_hash_long(s, &n); ++ if (r < 0) ++ return r; ++ ++ free_and_replace(s, n); ++ } + + /* Refuse if this for some other reason didn't result in a valid name */ + if (!unit_name_is_valid(s, UNIT_NAME_PLAIN)) +@@ -581,6 +660,9 @@ int unit_name_to_path(const char *name, char **ret) { + if (r < 0) + return r; + ++ if (unit_name_is_hashed(name)) ++ return -ENAMETOOLONG; ++ + return unit_name_path_unescape(prefix, ret); + } + +diff --git a/src/basic/unit-name.h b/src/basic/unit-name.h +index b62b3e034e..eaa701e9f6 100644 +--- a/src/basic/unit-name.h ++++ b/src/basic/unit-name.h +@@ -44,6 +44,9 @@ int unit_name_replace_instance(const char *f, const char *i, char **ret); + + int unit_name_template(const char *f, char **ret); + ++int unit_name_hash_long(const char *name, char **ret); ++bool unit_name_is_hashed(const char *name); ++ + int unit_name_from_path(const char *path, const char *suffix, char **ret); + int unit_name_from_path_instance(const char *prefix, const char *path, const char *suffix, char **ret); + int unit_name_to_path(const char *name, char **ret); +diff --git a/src/core/mount.c b/src/core/mount.c +index 4d407ca4e5..d63884e47e 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -622,6 +622,9 @@ static int mount_add_extras(Mount *m) { + + if (!m->where) { + r = unit_name_to_path(u->id, &m->where); ++ if (r == -ENAMETOOLONG) ++ log_unit_error_errno(u, r, "Failed to derive mount point path from unit name, because unit name is hashed. " ++ "Set \"Where=\" in the unit file explicitly."); + if (r < 0) + return r; + } +diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c +index 8cd0e0b4a1..b6137333aa 100644 +--- a/src/test/test-unit-name.c ++++ b/src/test/test-unit-name.c +@@ -106,6 +106,7 @@ TEST(unit_name_replace_instance) { + + static void test_unit_name_from_path_one(const char *path, const char *suffix, const char *expected, int ret) { + _cleanup_free_ char *t = NULL; ++ int r; + + assert_se(unit_name_from_path(path, suffix, &t) == ret); + puts(strna(t)); +@@ -113,12 +114,31 @@ static void test_unit_name_from_path_one(const char *path, const char *suffix, c + + if (t) { + _cleanup_free_ char *k = NULL; +- assert_se(unit_name_to_path(t, &k) == 0); ++ ++ /* We don't support converting hashed unit names back to paths */ ++ r = unit_name_to_path(t, &k); ++ if (r == -ENAMETOOLONG) ++ return; ++ assert(r == 0); ++ + puts(strna(k)); + assert_se(path_equal(k, empty_to_root(path))); + } + } + ++TEST(unit_name_is_hashed) { ++ assert_se(!unit_name_is_hashed("")); ++ assert_se(!unit_name_is_hashed("foo@bar.service")); ++ assert_se(!unit_name_is_hashed("foo@.service")); ++ assert_se(unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9ed33c2ec55.mount")); ++ assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736D9ED33C2EC55.mount")); ++ assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!7736d9ed33c2ec55.mount")); ++ assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9gd33c2ec55.mount")); ++ assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_.mount")); ++ assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_2103e1466b87f7f7@waldo.mount")); ++ assert_se(!unit_name_is_hashed("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_2103e1466b87f7f7@.mount")); ++} ++ + TEST(unit_name_from_path) { + test_unit_name_from_path_one("/waldo", ".mount", "waldo.mount", 0); + test_unit_name_from_path_one("/waldo/quuix", ".mount", "waldo-quuix.mount", 0); +@@ -128,7 +148,8 @@ TEST(unit_name_from_path) { + test_unit_name_from_path_one("///", ".mount", "-.mount", 0); + test_unit_name_from_path_one("/foo/../bar", ".mount", NULL, -EINVAL); + test_unit_name_from_path_one("/foo/./bar", ".mount", "foo-bar.mount", 0); +- test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", NULL, -ENAMETOOLONG); ++ test_unit_name_from_path_one("/waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", ".mount", ++ "waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa_7736d9ed33c2ec55.mount", 0); + } + + static void test_unit_name_from_path_instance_one(const char *pattern, const char *path, const char *suffix, const char *expected, int ret) { +@@ -156,7 +177,6 @@ TEST(unit_name_from_path_instance) { + test_unit_name_from_path_instance_one("waldo", "..", ".mount", NULL, -EINVAL); + test_unit_name_from_path_instance_one("waldo", "/foo", ".waldi", NULL, -EINVAL); + test_unit_name_from_path_instance_one("wa--ldo", "/--", ".mount", "wa--ldo@\\x2d\\x2d.mount", 0); +- test_unit_name_from_path_instance_one("waldoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa", "/waldo", ".mount", NULL, -ENAMETOOLONG); + } + + static void test_unit_name_to_path_one(const char *unit, const char *path, int ret) { diff --git a/SOURCES/0076-tests-add-test-case-for-long-unit-names.patch b/SOURCES/0076-tests-add-test-case-for-long-unit-names.patch new file mode 100644 index 0000000..5a267c0 --- /dev/null +++ b/SOURCES/0076-tests-add-test-case-for-long-unit-names.patch @@ -0,0 +1,42 @@ +From 1121def1f02c847df894611e171a1025f859fb3d Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 23 Mar 2022 13:35:44 +0100 +Subject: [PATCH] tests: add test case for long unit names + +(cherry picked from commit 2ef0101e0b2813e8c99fc8f137dbaa763ca16057) + +Related: #2083493 +--- + test/units/testsuite-60.sh | 19 +++++++++++++++++++ + 1 file changed, 19 insertions(+) + +diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh +index eb174f00ed..239d7b0d4c 100755 +--- a/test/units/testsuite-60.sh ++++ b/test/units/testsuite-60.sh +@@ -8,6 +8,25 @@ systemd-analyze log-target journal + + NUM_DIRS=20 + ++# make sure we can handle mounts at very long paths such that mount unit name must be hashed to fall within our unit name limit ++LONGPATH="$(printf "/$(printf "x%0.s" {1..255})%0.s" {1..7})" ++LONGMNT="$(systemd-escape --suffix=mount --path "$LONGPATH")" ++TS="$(date '+%H:%M:%S')" ++ ++mkdir -p "$LONGPATH" ++mount -t tmpfs tmpfs "$LONGPATH" ++systemctl daemon-reload ++ ++# check that unit is active(mounted) ++systemctl --no-pager show -p SubState --value "$LONGPATH" | grep -q mounted ++ ++# check that relevant part of journal doesn't contain any errors related to unit ++[ "$(journalctl -b --since="$TS" --priority=err | grep -c "$LONGMNT")" = "0" ] ++ ++# check that we can successfully stop the mount unit ++systemctl stop "$LONGPATH" ++rm -rf "$LONGPATH" ++ + # mount/unmount enough times to trigger the /proc/self/mountinfo parsing rate limiting + + for ((i = 0; i < NUM_DIRS; i++)); do diff --git a/SOURCES/0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch b/SOURCES/0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch new file mode 100644 index 0000000..8f2e825 --- /dev/null +++ b/SOURCES/0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch @@ -0,0 +1,37 @@ +From 87e45d9c58c74ae7ba46f99a3f0e2db39cf345ff Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Thu, 24 Mar 2022 19:24:16 +0100 +Subject: [PATCH] tests: reflect that we can now handle devices with very long + sysfs paths + +(cherry picked from commit b26f4f0028e27b6ad46ef9af56aac7571caa3a25) + +Related: #2083493 +--- + test/units/testsuite-64.sh | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh +index dc8b263b10..218b2ee8d1 100755 +--- a/test/units/testsuite-64.sh ++++ b/test/units/testsuite-64.sh +@@ -674,6 +674,7 @@ testcase_long_sysfs_path() { + echo "UUID=deadbeef-dead-dead-beef-222222222222 $mpoint ext4 defaults 0 0" >>/etc/fstab + systemctl daemon-reload + mount "$mpoint" ++ systemctl status "$mpoint" + test -e "$mpoint/test" + umount "$mpoint" + +@@ -684,9 +685,9 @@ testcase_long_sysfs_path() { + udevadm settle + + logfile="$(mktemp)" +- journalctl -b -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" ++ [[ "$(journalctl -b -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" | wc -l)" -eq 0 ]] + # Make sure we don't unnecessarily spam the log +- journalctl -b -q --no-pager -o short-monotonic -p info --grep "/sys/devices/.+/vda[0-9]?" _PID=1 + UNIT=systemd-udevd.service | tee "$logfile" ++ { journalctl -b -q --no-pager -o short-monotonic -p info --grep "/sys/devices/.+/vda[0-9]?" _PID=1 + UNIT=systemd-udevd.service || :;} | tee "$logfile" + [[ "$(wc -l <"$logfile")" -lt 10 ]] + + : >/etc/fstab diff --git a/SOURCES/0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch b/SOURCES/0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch new file mode 100644 index 0000000..e824455 --- /dev/null +++ b/SOURCES/0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch @@ -0,0 +1,63 @@ +From c9fe9526f07ad24d29842fa853ee458b68660896 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 22 Apr 2022 18:03:14 +0200 +Subject: [PATCH] test: extend the "hashed" unit names coverage a bit + +Follow-up to #22759. + +(cherry picked from commit 98f8c316389177169c6599e67010ebb1789a6b26) + +Related: #2083493 +--- + test/units/testsuite-64.sh | 19 ++++++++++++++++--- + 1 file changed, 16 insertions(+), 3 deletions(-) + +diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh +index 218b2ee8d1..5f9aeee261 100755 +--- a/test/units/testsuite-64.sh ++++ b/test/units/testsuite-64.sh +@@ -646,7 +646,7 @@ testcase_iscsi_lvm() { + } + + testcase_long_sysfs_path() { +- local link logfile mpoint ++ local cursor link logfile mpoint + local expected_symlinks=( + "/dev/disk/by-label/data_vol" + "/dev/disk/by-label/swap_vol" +@@ -657,6 +657,12 @@ testcase_long_sysfs_path() { + "/dev/disk/by-uuid/deadbeef-dead-dead-beef-222222222222" + ) + ++ # Create a cursor file to skip messages generated by udevd in initrd, as it ++ # might not be the same up-to-date version as we currently run (hence generating ++ # messages we check for later and making the test fail) ++ cursor="$(mktemp)" ++ journalctl --cursor-file="${cursor:?}" -n0 -q ++ + # Make sure the test device is connected and show its "wonderful" path + stat /sys/block/vda + readlink -f /sys/block/vda/dev +@@ -685,13 +691,20 @@ testcase_long_sysfs_path() { + udevadm settle + + logfile="$(mktemp)" +- [[ "$(journalctl -b -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" | wc -l)" -eq 0 ]] ++ # Check state of affairs after https://github.com/systemd/systemd/pull/22759 ++ # Note: can't use `--cursor-file` here, since we don't want to update the cursor ++ # after using it ++ [[ "$(journalctl --after-cursor="$(<"$cursor")" -q --no-pager -o short-monotonic -p info --grep "Device path.*vda.?' too long to fit into unit name" | wc -l)" -eq 0 ]] ++ [[ "$(journalctl --after-cursor="$(<"$cursor")" -q --no-pager -o short-monotonic --grep "Unit name .*vda.?\.device\" too long, falling back to hashed unit name" | wc -l)" -gt 0 ]] ++ # Check if the respective "hashed" units exist and are active (plugged) ++ systemctl status --no-pager "$(readlink -f /sys/block/vda/vda1)" ++ systemctl status --no-pager "$(readlink -f /sys/block/vda/vda2)" + # Make sure we don't unnecessarily spam the log + { journalctl -b -q --no-pager -o short-monotonic -p info --grep "/sys/devices/.+/vda[0-9]?" _PID=1 + UNIT=systemd-udevd.service || :;} | tee "$logfile" + [[ "$(wc -l <"$logfile")" -lt 10 ]] + + : >/etc/fstab +- rm -fr "${logfile:?}" "${mpoint:?}" ++ rm -fr "${cursor:?}" "${logfile:?}" "${mpoint:?}" + } + + : >/failed diff --git a/SOURCES/0079-Revert-kernel-install-also-remove-modules.builtin.al.patch b/SOURCES/0079-Revert-kernel-install-also-remove-modules.builtin.al.patch new file mode 100644 index 0000000..a00c8c4 --- /dev/null +++ b/SOURCES/0079-Revert-kernel-install-also-remove-modules.builtin.al.patch @@ -0,0 +1,29 @@ +From 17f516c0714e05d3dea7f168304286658aead870 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Thu, 17 Mar 2022 12:35:35 +0100 +Subject: [PATCH] Revert "kernel-install: also remove + modules.builtin.alias.bin" + +This reverts commit fdcb1bf67371615f12c4b11283f2bd6a25bda019. + +Related: #2065061 + +[msekleta: this revert is done in order to make backporting easier, +patch will be reapplied later.] +--- + src/kernel-install/50-depmod.install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install +index fd00c43632..2fd959865f 100644 +--- a/src/kernel-install/50-depmod.install ++++ b/src/kernel-install/50-depmod.install +@@ -36,7 +36,7 @@ case "$COMMAND" in + remove) + [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ + echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files" +- exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin{,.alias}.bin,dep{,.bin},devname,softdep,symbols{,.bin}} ++ exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}} + ;; + *) + exit 0 diff --git a/SOURCES/0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch b/SOURCES/0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch new file mode 100644 index 0000000..95429ea --- /dev/null +++ b/SOURCES/0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch @@ -0,0 +1,29 @@ +From 3fae5c22831288c075e371e67ecc91968ab60d63 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Thu, 17 Mar 2022 12:37:57 +0100 +Subject: [PATCH] Revert "kernel-install: prefer /boot over /boot/efi for + $BOOT_ROOT" + +This reverts commit d0e98b7a1211412dccfcf4dcd2cc0772ac70b304. + +Related: #2065061 + +[msekleta: this revert is done in order to make backporting easier, +patch will be reapplied later.] +--- + src/kernel-install/kernel-install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index d85852532b..b358b03b2f 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -108,7 +108,7 @@ fi + [ -z "$MACHINE_ID" ] && MACHINE_ID="Default" + + [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do +- for pref in "/efi" "/boot" "/boot/efi" ; do ++ for pref in "/efi" "/boot/efi" "/boot"; do + if [ -d "$pref/$suff" ]; then + BOOT_ROOT="$pref" + break 2 diff --git a/SOURCES/0081-kernel-install-50-depmod-port-to-bin-sh.patch b/SOURCES/0081-kernel-install-50-depmod-port-to-bin-sh.patch new file mode 100644 index 0000000..952e1f0 --- /dev/null +++ b/SOURCES/0081-kernel-install-50-depmod-port-to-bin-sh.patch @@ -0,0 +1,60 @@ +From d90268728f268f4e5291d29bc2b899137cd7ddf5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= +Date: Thu, 16 Dec 2021 14:35:17 +0100 +Subject: [PATCH] kernel-install: 50-depmod: port to /bin/sh + +(cherry picked from commit b3ceb3d9fff69b33b8665a0137f5177f72c45cc0) + +Related: #2065061 +--- + src/kernel-install/50-depmod.install | 28 +++++++++++++++------------- + 1 file changed, 15 insertions(+), 13 deletions(-) + +diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install +index 2fd959865f..aa1f6b8e0e 100644 +--- a/src/kernel-install/50-depmod.install ++++ b/src/kernel-install/50-depmod.install +@@ -1,4 +1,4 @@ +-#!/usr/bin/env bash ++#!/bin/sh + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + # SPDX-License-Identifier: LGPL-2.1-or-later +@@ -20,23 +20,25 @@ + + COMMAND="$1" + KERNEL_VERSION="$2" +-ENTRY_DIR_ABS="$3" +-KERNEL_IMAGE="$4" +-INITRD_OPTIONS_START="5" +- +-[[ $KERNEL_VERSION ]] || exit 1 + + case "$COMMAND" in + add) +- [[ -d "/lib/modules/${KERNEL_VERSION}/kernel" ]] || exit 0 +- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "Running depmod -a ${KERNEL_VERSION}" +- exec depmod -a "${KERNEL_VERSION}" ++ [ -d "/lib/modules/$KERNEL_VERSION/kernel" ] || exit 0 ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+depmod -a $KERNEL_VERSION" ++ exec depmod -a "$KERNEL_VERSION" + ;; + remove) +- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files" +- exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}} ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Removing /lib/modules/$KERNEL_VERSION/modules.dep and associated files" ++ exec rm -f \ ++ "/lib/modules/$KERNEL_VERSION/modules.alias" \ ++ "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \ ++ "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \ ++ "/lib/modules/$KERNEL_VERSION/modules.dep" \ ++ "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \ ++ "/lib/modules/$KERNEL_VERSION/modules.devname" \ ++ "/lib/modules/$KERNEL_VERSION/modules.softdep" \ ++ "/lib/modules/$KERNEL_VERSION/modules.symbols" \ ++ "/lib/modules/$KERNEL_VERSION/modules.symbols.bin" + ;; + *) + exit 0 diff --git a/SOURCES/0082-kernel-install-90-loaderentry-port-to-bin-sh.patch b/SOURCES/0082-kernel-install-90-loaderentry-port-to-bin-sh.patch new file mode 100644 index 0000000..5502981 --- /dev/null +++ b/SOURCES/0082-kernel-install-90-loaderentry-port-to-bin-sh.patch @@ -0,0 +1,181 @@ +From 7b05dc8184e1a459d0a073dfe569560681525980 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= +Date: Thu, 16 Dec 2021 14:35:33 +0100 +Subject: [PATCH] kernel-install: 90-loaderentry: port to /bin/sh + +Also, forward the rm -f exit code on removal instead of swallowing it + +(cherry picked from commit 662f45e3ea9f6e933234b81bec532d584bda6ead) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 110 +++++++++------------- + 1 file changed, 45 insertions(+), 65 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 044eced3f0..35324e69a9 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -1,4 +1,4 @@ +-#!/usr/bin/env bash ++#!/bin/sh + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + # SPDX-License-Identifier: LGPL-2.1-or-later +@@ -22,68 +22,53 @@ COMMAND="$1" + KERNEL_VERSION="$2" + ENTRY_DIR_ABS="$3" + KERNEL_IMAGE="$4" +-INITRD_OPTIONS_START="5" ++INITRD_OPTIONS_SHIFT=4 + +-if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then +- exit 0 +-fi +- +-if [ "$KERNEL_INSTALL_LAYOUT" != "bls" ]; then +- exit 0 +-fi ++[ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0 + + MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" + BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT" + + BOOT_MNT="$(stat -c %m "$BOOT_ROOT")" +-if [[ "$BOOT_MNT" == '/' ]]; then ++if [ "$BOOT_MNT" = '/' ]; then + ENTRY_DIR="$ENTRY_DIR_ABS" + else + ENTRY_DIR="${ENTRY_DIR_ABS#$BOOT_MNT}" + fi + +-if [[ $COMMAND == remove ]]; then +- rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" +- rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf" +- exit 0 +-fi +- +-if ! [[ $COMMAND == add ]]; then +- exit 1 +-fi +- +-if ! [[ $KERNEL_IMAGE ]]; then +- exit 1 +-fi ++case "$COMMAND" in ++ remove) ++ exec rm -f \ ++ "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \ ++ "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf" ++ ;; ++ add) ++ ;; ++ *) ++ exit 1 ++ ;; ++esac + +-if [[ -f /etc/os-release ]]; then ++if [ -r /etc/os-release ]; then + . /etc/os-release +-elif [[ -f /usr/lib/os-release ]]; then ++elif [ -r /usr/lib/os-release ]; then + . /usr/lib/os-release + fi + +-if ! [[ $PRETTY_NAME ]]; then +- PRETTY_NAME="Linux $KERNEL_VERSION" +-fi ++[ -n "$PRETTY_NAME" ] || PRETTY_NAME="Linux $KERNEL_VERSION" + +-if [[ -f /etc/kernel/cmdline ]]; then +- read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline +-elif [[ -f /usr/lib/kernel/cmdline ]]; then +- read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline ++if [ -r /etc/kernel/cmdline ]; then ++ BOOT_OPTIONS="$(tr -s "$IFS" ' ' &2 + exit 1 + fi +@@ -106,43 +91,38 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || { + exit 1 + } + +-INITRD_OPTIONS=( "${@:${INITRD_OPTIONS_START}}" ) +- +-for initrd in "${INITRD_OPTIONS[@]}"; do +- if [[ -f "${initrd}" ]]; then +- initrd_basename="$(basename ${initrd})" +- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "Installing $ENTRY_DIR_ABS/${initrd_basename}" +- install -g root -o root -m 0644 "${initrd}" "$ENTRY_DIR_ABS/${initrd_basename}" || { +- echo "Could not copy '${initrd}' to '$ENTRY_DIR_ABS/${initrd_basename}'." >&2 +- exit 1 +- } +- fi +-done ++shift "$INITRD_OPTIONS_SHIFT" ++for initrd; do ++ [ -f "$initrd" ] || continue + +-# If no initrd option is supplied, fall back to "initrd" which is +-# the name used by dracut when generating it in its kernel-install hook +-[[ ${#INITRD_OPTIONS[@]} == 0 ]] && INITRD_OPTIONS=( initrd ) ++ initrd_basename="${initrd##*/}" ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename" ++ install -g root -o root -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || { ++ echo "Could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2 ++ exit 1 ++ } ++done + + mkdir -p "${LOADER_ENTRY%/*}" || { + echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 + exit 1 + } + +-[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "Creating $LOADER_ENTRY" ++# Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied ++[ $# -eq 0 ] && set -- "initrd" ++ ++[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY" + { + echo "title $PRETTY_NAME" + echo "version $KERNEL_VERSION" + echo "machine-id $MACHINE_ID" +- echo "options ${BOOT_OPTIONS[*]}" ++ echo "options $BOOT_OPTIONS" + echo "linux $ENTRY_DIR/linux" +- for initrd in "${INITRD_OPTIONS[@]}"; do +- [[ -f $ENTRY_DIR_ABS/$(basename ${initrd}) ]] && \ +- echo "initrd $ENTRY_DIR/$(basename ${initrd})" ++ for initrd; do ++ [ -f "$ENTRY_DIR_ABS/${initrd##*/}" ] && echo "initrd $ENTRY_DIR/${initrd##*/}" + done + : +-} > "$LOADER_ENTRY" || { ++} >"$LOADER_ENTRY" || { + echo "Could not create loader entry '$LOADER_ENTRY'." >&2 + exit 1 + } diff --git a/SOURCES/0083-kernel-install-fix-shellcheck.patch b/SOURCES/0083-kernel-install-fix-shellcheck.patch new file mode 100644 index 0000000..89094a2 --- /dev/null +++ b/SOURCES/0083-kernel-install-fix-shellcheck.patch @@ -0,0 +1,82 @@ +From 52f6eedb3bb4dc7a57fea6a8991b9058dedc8edc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= +Date: Thu, 16 Dec 2021 14:37:53 +0100 +Subject: [PATCH] kernel-install: fix shellcheck + +(cherry picked from commit 0bb1cb1fce5ebf307501dec1679e37f0c0157be9) + +Related: #2065061 +--- + src/kernel-install/kernel-install | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index b358b03b2f..f6da0cf7a8 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -26,8 +26,8 @@ usage() + echo " $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]" + echo " $0 [OPTIONS...] remove KERNEL-VERSION" + echo "Options:" +- echo " -h,--help Print this help" +- echo " -v,--verbose Increase verbosity" ++ echo " -h, --help Print this help" ++ echo " -v, --verbose Increase verbosity" + } + + dropindirs_sort() +@@ -58,15 +58,15 @@ dropindirs_sort() + + export LC_COLLATE=C + +-for i in "$@"; do +- if [ "$i" == "--help" -o "$i" == "-h" ]; then ++for i; do ++ if [ "$i" = "--help" ] || [ "$i" = "-h" ]; then + usage + exit 0 + fi + done + + KERNEL_INSTALL_VERBOSE=0 +-if [ "$1" == "--verbose" -o "$1" == "-v" ]; then ++if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then + shift + KERNEL_INSTALL_VERBOSE=1 + fi +@@ -185,13 +185,13 @@ case $COMMAND in + for f in "${PLUGINS[@]}"; do + if [[ -x $f ]]; then + [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[@]}" ++ echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[*]}" + "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}" + x=$? +- if [[ $x == $SKIP_REMAINING ]]; then ++ if [ $x -eq "$SKIP_REMAINING" ]; then + break + fi +- ((ret+=$x)) ++ ((ret+=x)) + fi + done + ;; +@@ -203,10 +203,10 @@ case $COMMAND in + echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS" + "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS" + x=$? +- if [[ $x == $SKIP_REMAINING ]]; then ++ if [ $x -eq "$SKIP_REMAINING" ]; then + break + fi +- ((ret+=$x)) ++ ((ret+=x)) + fi + done + +@@ -222,4 +222,4 @@ case $COMMAND in + ;; + esac + +-exit $ret ++exit "$ret" diff --git a/SOURCES/0084-kernel-install-port-to-bin-sh.patch b/SOURCES/0084-kernel-install-port-to-bin-sh.patch new file mode 100644 index 0000000..db473f9 --- /dev/null +++ b/SOURCES/0084-kernel-install-port-to-bin-sh.patch @@ -0,0 +1,205 @@ +From 1f9eec4ab2a8a2213fec66194c537086e8242a0d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= +Date: Thu, 16 Dec 2021 15:06:06 +0100 +Subject: [PATCH] kernel-install: port to /bin/sh + +(cherry picked from commit 76b1274a5cb54acaa4a0f0c2e570d751f9067c06) + +Related: #2065061 +--- + src/kernel-install/kernel-install | 109 ++++++++++++------------------ + 1 file changed, 43 insertions(+), 66 deletions(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index f6da0cf7a8..2e8f382d5f 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -1,4 +1,4 @@ +-#!/usr/bin/env bash ++#!/bin/sh + # -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- + # ex: ts=8 sw=4 sts=4 et filetype=sh + # SPDX-License-Identifier: LGPL-2.1-or-later +@@ -18,7 +18,7 @@ + # You should have received a copy of the GNU Lesser General Public License + # along with systemd; If not, see . + +-SKIP_REMAINING=77 ++skip_remaining=77 + + usage() + { +@@ -32,24 +32,17 @@ usage() + + dropindirs_sort() + { +- local suffix=$1; shift +- local -a files +- local f d i +- +- readarray -t files <<<"$( +- for d in "$@"; do +- for i in "$d/"*"$suffix"; do +- if [[ -e "$i" ]]; then +- echo "${i##*/}" +- fi +- done +- done | sort -Vu +- )" +- +- for f in "${files[@]}"; do +- for d in "$@"; do +- if [[ -e "$d/$f" ]]; then +- echo "$d/$f" ++ suffix="$1" ++ shift ++ ++ for d; do ++ for i in "$d/"*"$suffix"; do ++ [ -e "$i" ] && echo "${i##*/}" ++ done ++ done | sort -Vu | while read -r f; do ++ for d; do ++ if [ -e "$d/$f" ]; then ++ [ -x "$d/$f" ] && echo "$d/$f" + continue 2 + fi + done +@@ -65,27 +58,25 @@ for i; do + fi + done + +-KERNEL_INSTALL_VERBOSE=0 ++export KERNEL_INSTALL_VERBOSE=0 + if [ "$1" = "--verbose" ] || [ "$1" = "-v" ]; then + shift + KERNEL_INSTALL_VERBOSE=1 + fi +-export KERNEL_INSTALL_VERBOSE + +-if [[ "${0##*/}" == 'installkernel' ]]; then +- COMMAND='add' +- # make install doesn't pass any parameter wrt initrd handling +- INITRD_OPTIONS=() ++if [ "${0##*/}" = "installkernel" ]; then ++ COMMAND=add ++ # make install doesn't pass any initrds + else + COMMAND="$1" +- shift +- INITRD_OPTIONS=( "${@:3}" ) ++ [ $# -ge 1 ] && shift + fi + + KERNEL_VERSION="$1" + KERNEL_IMAGE="$2" ++[ $# -ge 2 ] && shift 2 + +-if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then ++if [ -z "$COMMAND" ] || [ -z "$KERNEL_VERSION" ]; then + echo "Not enough arguments" >&2 + exit 1 + fi +@@ -99,12 +90,11 @@ fi + # Prefer to use an existing machine ID from /etc/machine-info or /etc/machine-id. If we're using the machine + # ID /etc/machine-id, try to persist it in /etc/machine-info. If no machine ID is found, try to generate + # a new machine ID in /etc/machine-info. If that fails, use "Default". +- +-[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" +-[ -z "$MACHINE_ID" ] && [ -f /etc/machine-id ] && read -r MACHINE_ID >/etc/machine-info ++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ] && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" ++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ] && read -r MACHINE_ID >/etc/machine-info + [ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info +-[ -z "$MACHINE_ID" ] && [ -f /etc/machine-info ] && source /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" ++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ] && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" + [ -z "$MACHINE_ID" ] && MACHINE_ID="Default" + + [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do +@@ -125,11 +115,6 @@ done + [ -z "$BOOT_ROOT" ] && BOOT_ROOT="/boot" + + +-ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION" +- +-export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID" +-export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT" +- + if [ -z "$layout" ]; then + # Administrative decision: if not present, some scripts generate into /boot. + if [ -d "$BOOT_ROOT/$MACHINE_ID" ]; then +@@ -152,21 +137,23 @@ MAKE_ENTRY_DIR_ABS=$? + + ret=0 + +-readarray -t PLUGINS <<<"$( ++PLUGINS="$( + dropindirs_sort ".install" \ + "/etc/kernel/install.d" \ + "/usr/lib/kernel/install.d" + )" ++IFS=" ++" + +-case $COMMAND in ++case "$COMMAND" in + add) +- if [[ ! "$KERNEL_IMAGE" ]]; then ++ if [ -z "$KERNEL_IMAGE" ]; then + echo "Command 'add' requires an argument" >&2 + exit 1 + fi + +- if [[ ! -f "$KERNEL_IMAGE" ]]; then +- echo "Kernel image argument ${KERNEL_IMAGE} not a file" >&2 ++ if ! [ -f "$KERNEL_IMAGE" ]; then ++ echo "Kernel image argument $KERNEL_IMAGE not a file" >&2 + exit 1 + fi + +@@ -182,32 +169,22 @@ case $COMMAND in + fi + fi + +- for f in "${PLUGINS[@]}"; do +- if [[ -x $f ]]; then +- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE ${INITRD_OPTIONS[*]}" +- "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "${INITRD_OPTIONS[@]}" +- x=$? +- if [ $x -eq "$SKIP_REMAINING" ]; then +- break +- fi +- ((ret+=x)) +- fi ++ for f in $PLUGINS; do ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE $*" ++ "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "$@" ++ err=$? ++ [ $err -eq $skip_remaining ] && break ++ ret=$(( ret + err )) + done + ;; + + remove) +- for f in "${PLUGINS[@]}"; do +- if [[ -x $f ]]; then +- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS" +- "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS" +- x=$? +- if [ $x -eq "$SKIP_REMAINING" ]; then +- break +- fi +- ((ret+=x)) +- fi ++ for f in $PLUGINS; do ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f remove $KERNEL_VERSION $ENTRY_DIR_ABS" ++ "$f" remove "$KERNEL_VERSION" "$ENTRY_DIR_ABS" ++ err=$? ++ [ $err -eq $skip_remaining ] && break ++ ret=$(( ret + err )) + done + + if [ "$MAKE_ENTRY_DIR_ABS" -eq 0 ]; then diff --git a/SOURCES/0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch b/SOURCES/0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch new file mode 100644 index 0000000..95d70d4 --- /dev/null +++ b/SOURCES/0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch @@ -0,0 +1,51 @@ +From bc1c914ebdec526151964c1aa3c2aeea0d4e2680 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= +Date: Fri, 17 Dec 2021 19:51:12 +0100 +Subject: [PATCH] kernel-install: 90-loaderentry: error out on nonexistent + initrds instead of swallowing them quietly + +(cherry picked from commit 742561efbe938c45936f2e4f5d81b3ff6b352882) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 35324e69a9..e588e72bf9 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -93,7 +93,10 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || { + + shift "$INITRD_OPTIONS_SHIFT" + for initrd; do +- [ -f "$initrd" ] || continue ++ [ -f "$initrd" ] || { ++ echo "Initrd '$initrd' not a file." >&2 ++ exit 1 ++ } + + initrd_basename="${initrd##*/}" + [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename" +@@ -108,9 +111,6 @@ mkdir -p "${LOADER_ENTRY%/*}" || { + exit 1 + } + +-# Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied +-[ $# -eq 0 ] && set -- "initrd" +- + [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Creating $LOADER_ENTRY" + { + echo "title $PRETTY_NAME" +@@ -119,8 +119,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || { + echo "options $BOOT_OPTIONS" + echo "linux $ENTRY_DIR/linux" + for initrd; do +- [ -f "$ENTRY_DIR_ABS/${initrd##*/}" ] && echo "initrd $ENTRY_DIR/${initrd##*/}" ++ echo "initrd $ENTRY_DIR/${initrd##*/}" + done ++ # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied ++ [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd $ENTRY_DIR/initrd" + : + } >"$LOADER_ENTRY" || { + echo "Could not create loader entry '$LOADER_ENTRY'." >&2 diff --git a/SOURCES/0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch b/SOURCES/0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch new file mode 100644 index 0000000..1913f15 --- /dev/null +++ b/SOURCES/0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch @@ -0,0 +1,68 @@ +From 8a52c3a1797084956ddcd2acfb65a4023a4f0655 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?=D0=BD=D0=B0=D0=B1?= +Date: Mon, 20 Dec 2021 14:57:39 +0100 +Subject: [PATCH] kernel-install: don't pull out KERNEL_IMAGE + +It's part of the pack directly passed to scripts on add and ignored on +remove + +(cherry picked from commit af319a4b14bd05cd4c8460487f2c6d7a31b35640) + +Related: #2065061 +--- + src/kernel-install/kernel-install | 21 ++++++++++----------- + 1 file changed, 10 insertions(+), 11 deletions(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index 2e8f382d5f..097d6557f2 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -72,15 +72,14 @@ else + [ $# -ge 1 ] && shift + fi + +-KERNEL_VERSION="$1" +-KERNEL_IMAGE="$2" +-[ $# -ge 2 ] && shift 2 +- +-if [ -z "$COMMAND" ] || [ -z "$KERNEL_VERSION" ]; then ++if [ $# -lt 1 ]; then + echo "Not enough arguments" >&2 + exit 1 + fi + ++KERNEL_VERSION="$1" ++shift ++ + if [ -r "/etc/kernel/install.conf" ]; then + . /etc/kernel/install.conf + elif [ -r "/usr/lib/kernel/install.conf" ]; then +@@ -147,13 +146,13 @@ IFS=" + + case "$COMMAND" in + add) +- if [ -z "$KERNEL_IMAGE" ]; then +- echo "Command 'add' requires an argument" >&2 ++ if [ $# -lt 1 ]; then ++ echo "Command 'add' requires a kernel image" >&2 + exit 1 + fi + +- if ! [ -f "$KERNEL_IMAGE" ]; then +- echo "Kernel image argument $KERNEL_IMAGE not a file" >&2 ++ if ! [ -f "$1" ]; then ++ echo "Kernel image argument $1 not a file" >&2 + exit 1 + fi + +@@ -170,8 +169,8 @@ case "$COMMAND" in + fi + + for f in $PLUGINS; do +- [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $KERNEL_IMAGE $*" +- "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$KERNEL_IMAGE" "$@" ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "+$f add $KERNEL_VERSION $ENTRY_DIR_ABS $*" ++ "$f" add "$KERNEL_VERSION" "$ENTRY_DIR_ABS" "$@" + err=$? + [ $err -eq $skip_remaining ] && break + ret=$(( ret + err )) diff --git a/SOURCES/0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch b/SOURCES/0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch new file mode 100644 index 0000000..5da86e6 --- /dev/null +++ b/SOURCES/0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch @@ -0,0 +1,32 @@ +From 8bcb1df836fccb5ddb6fb071b022bfd490f94e11 Mon Sep 17 00:00:00 2001 +From: Adam Williamson +Date: Wed, 5 Jan 2022 14:07:14 -0800 +Subject: [PATCH] kernel-install: prefer /boot over /boot/efi for $BOOT_ROOT + +This restores the preference order from before 9e82a74. The code +previous to that change 'preferred' /boot over /boot/efi; that +commit changed it to check /boot/efi before checking /boot. +Changing this precedence could (and did, for me) have unexpected +effects - it seems safer to leave it how it was. + +Signed-off-by: Adam Williamson +(cherry picked from commit a5307e173bf86d695fe85b8e15e91126e8618a14) + +Related: #2065061 +--- + src/kernel-install/kernel-install | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index 097d6557f2..e56483ef96 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -97,7 +97,7 @@ fi + [ -z "$MACHINE_ID" ] && MACHINE_ID="Default" + + [ -z "$BOOT_ROOT" ] && for suff in "$MACHINE_ID" "loader/entries"; do +- for pref in "/efi" "/boot/efi" "/boot"; do ++ for pref in "/efi" "/boot" "/boot/efi" ; do + if [ -d "$pref/$suff" ]; then + BOOT_ROOT="$pref" + break 2 diff --git a/SOURCES/0088-kernel-install-also-remove-modules.builtin.alias.bin.patch b/SOURCES/0088-kernel-install-also-remove-modules.builtin.alias.bin.patch new file mode 100644 index 0000000..ba2f56a --- /dev/null +++ b/SOURCES/0088-kernel-install-also-remove-modules.builtin.alias.bin.patch @@ -0,0 +1,26 @@ +From 491f0e55e1f1095b1d52d45e5753d5f1ea621231 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sat, 15 Jan 2022 03:37:40 +0900 +Subject: [PATCH] kernel-install: also remove modules.builtin.alias.bin + +Fixes RHBZ#2016630. + +(cherry picked from commit 06006691b5c56b6123044179d934b3ed81c237ca) + +Related: #2065061 +--- + src/kernel-install/50-depmod.install | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install +index aa1f6b8e0e..be414f39d1 100644 +--- a/src/kernel-install/50-depmod.install ++++ b/src/kernel-install/50-depmod.install +@@ -33,6 +33,7 @@ case "$COMMAND" in + "/lib/modules/$KERNEL_VERSION/modules.alias" \ + "/lib/modules/$KERNEL_VERSION/modules.alias.bin" \ + "/lib/modules/$KERNEL_VERSION/modules.builtin.bin" \ ++ "/lib/modules/$KERNEL_VERSION/modules.builtin.alias.bin" \ + "/lib/modules/$KERNEL_VERSION/modules.dep" \ + "/lib/modules/$KERNEL_VERSION/modules.dep.bin" \ + "/lib/modules/$KERNEL_VERSION/modules.devname" \ diff --git a/SOURCES/0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch b/SOURCES/0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch new file mode 100644 index 0000000..120a52e --- /dev/null +++ b/SOURCES/0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch @@ -0,0 +1,77 @@ +From 931ae9749924a396a78044f8b1536085ff574ae6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 18 Jan 2022 17:40:13 +0100 +Subject: [PATCH] kernel-install: add new variable + $KERNEL_INSTALL_INITRD_GENERATOR + +The idea is that when not set, we do whatever we did in the past. But +with a new setting of initrd_generator=mkosi-initrd, mkosi-initrd will +generate an initrd. + +(cherry picked from commit 5c1b257faf87cb4f93aee8866f45a8cb98230af9) + +Related: #2065061 +--- + man/kernel-install.xml | 6 +++++- + src/kernel-install/install.conf | 1 + + src/kernel-install/kernel-install | 5 ++++- + 3 files changed, 10 insertions(+), 2 deletions(-) + +diff --git a/man/kernel-install.xml b/man/kernel-install.xml +index 83255bb932..bb76074d2e 100644 +--- a/man/kernel-install.xml ++++ b/man/kernel-install.xml +@@ -171,11 +171,15 @@ + KERNEL_INSTALL_BOOT_ROOT= is set for the plugins to the root directory (mount point, usually) of the hierarchy + where boot-loader entries, kernel images, and associated resources should be placed. Can be overridden by setting BOOT_ROOT=. + +- KERNEL_INSTALL_LAYOUT=bls|other|... specifies the installation layout. ++ KERNEL_INSTALL_LAYOUT=bls|other|... is set for the plugins to specify the installation layout. + Defaults to if $BOOT/MACHINE-ID exists, or otherwise. + Additional layout names may be defined by convention. If a plugin uses a special layout, + it's encouraged to declare its own layout name and configure layout= in install.conf upon initial installation. + ++ KERNEL_INSTALL_INITRD_GENERATOR=... is set for plugins to select the initrd generator. ++ This should be configured as initrd_generator= in install.conf. ++ ++ + + + bls +diff --git a/src/kernel-install/install.conf b/src/kernel-install/install.conf +index e4802e6fae..43b6e7d792 100644 +--- a/src/kernel-install/install.conf ++++ b/src/kernel-install/install.conf +@@ -8,3 +8,4 @@ + # See kernel-install(8) for details. + + #layout=bls|other|... ++#initrd_generator=dracut|... +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index e56483ef96..fe457c1070 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -80,6 +80,9 @@ fi + KERNEL_VERSION="$1" + shift + ++layout= ++initrd_generator= ++ + if [ -r "/etc/kernel/install.conf" ]; then + . /etc/kernel/install.conf + elif [ -r "/usr/lib/kernel/install.conf" ]; then +@@ -123,12 +126,12 @@ if [ -z "$layout" ]; then + fi + fi + +- + ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION" + + export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID" + export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT" + export KERNEL_INSTALL_LAYOUT="$layout" ++export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator" + + [ "$layout" = "bls" ] + MAKE_ENTRY_DIR_ABS=$? diff --git a/SOURCES/0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch b/SOURCES/0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch new file mode 100644 index 0000000..071ac07 --- /dev/null +++ b/SOURCES/0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch @@ -0,0 +1,32 @@ +From 27b017353a06a22d42dc8bbabbaf602200730719 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 12:10:37 +0100 +Subject: [PATCH] kernel-install: k-i already creates $ENTRY_DIR_ABS, no need + to do it again + +(cherry picked from commit a520d5dddb991cd713392d4de0e342e312547a2e) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index e588e72bf9..7b768457c1 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -78,12 +78,8 @@ else + fi + + if ! [ -d "$ENTRY_DIR_ABS" ]; then +- if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then +- echo "+mkdir -v -p $ENTRY_DIR_ABS" +- mkdir -v -p "$ENTRY_DIR_ABS" +- else +- mkdir -p "$ENTRY_DIR_ABS" +- fi ++ echo "Error: entry directory '$ENTRY_DIR_ABS' does not exist" >&2 ++ exit 1 + fi + + install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || { diff --git a/SOURCES/0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch b/SOURCES/0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch new file mode 100644 index 0000000..0bd51bb --- /dev/null +++ b/SOURCES/0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch @@ -0,0 +1,118 @@ +From 7e5ff353f8b35352f6c36233841754154b4f453b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 12:15:16 +0100 +Subject: [PATCH] kernel-install: prefix errors with "Error:", exit immediately +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +kernel-install would continue after errors… We don't want this, as it +makes the results totally unpredicatable. If we didn't install the kernel +or didn't do some important part of the setup, let's just return an error +and let the user deal with it. + +When looking at output, the error was often hard to distinguish, esp. +with -v. Add "Error:" everywhere to make the output easier to parse. + +(cherry picked from commit 680cec6b4ddb356d7dd087b197718712cb5c1662) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 10 +++++----- + src/kernel-install/kernel-install | 12 ++++++------ + 2 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 7b768457c1..6a396910cb 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -83,27 +83,27 @@ if ! [ -d "$ENTRY_DIR_ABS" ]; then + fi + + install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || { +- echo "Could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2 ++ echo "Error: could not copy '$KERNEL_IMAGE' to '$ENTRY_DIR_ABS/linux'." >&2 + exit 1 + } + + shift "$INITRD_OPTIONS_SHIFT" + for initrd; do + [ -f "$initrd" ] || { +- echo "Initrd '$initrd' not a file." >&2 ++ echo "Error: initrd '$initrd' not a file." >&2 + exit 1 + } + + initrd_basename="${initrd##*/}" + [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && echo "Installing $ENTRY_DIR_ABS/$initrd_basename" + install -g root -o root -m 0644 "$initrd" "$ENTRY_DIR_ABS/$initrd_basename" || { +- echo "Could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2 ++ echo "Error: could not copy '$initrd' to '$ENTRY_DIR_ABS/$initrd_basename'." >&2 + exit 1 + } + done + + mkdir -p "${LOADER_ENTRY%/*}" || { +- echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 ++ echo "Error: could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 + exit 1 + } + +@@ -121,7 +121,7 @@ mkdir -p "${LOADER_ENTRY%/*}" || { + [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd $ENTRY_DIR/initrd" + : + } >"$LOADER_ENTRY" || { +- echo "Could not create loader entry '$LOADER_ENTRY'." >&2 ++ echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2 + exit 1 + } + exit 0 +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index fe457c1070..a73a205d79 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -73,7 +73,7 @@ else + fi + + if [ $# -lt 1 ]; then +- echo "Not enough arguments" >&2 ++ echo "Error: not enough arguments" >&2 + exit 1 + fi + +@@ -150,12 +150,12 @@ IFS=" + case "$COMMAND" in + add) + if [ $# -lt 1 ]; then +- echo "Command 'add' requires a kernel image" >&2 ++ echo "Error: command 'add' requires a kernel image" >&2 + exit 1 + fi + + if ! [ -f "$1" ]; then +- echo "Kernel image argument $1 not a file" >&2 ++ echo "Error: kernel image argument $1 not a file" >&2 + exit 1 + fi + +@@ -165,9 +165,9 @@ case "$COMMAND" in + # to serve as the indication to use or to not use the BLS + if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then + echo "+mkdir -v -p $ENTRY_DIR_ABS" +- mkdir -v -p "$ENTRY_DIR_ABS" ++ mkdir -v -p "$ENTRY_DIR_ABS" || exit 1 + else +- mkdir -p "$ENTRY_DIR_ABS" ++ mkdir -p "$ENTRY_DIR_ABS" || exit 1 + fi + fi + +@@ -196,7 +196,7 @@ case "$COMMAND" in + ;; + + *) +- echo "Unknown command '$COMMAND'" >&2 ++ echo "Error: unknown command '$COMMAND'" >&2 + exit 1 + ;; + esac diff --git a/SOURCES/0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch b/SOURCES/0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch new file mode 100644 index 0000000..8913774 --- /dev/null +++ b/SOURCES/0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch @@ -0,0 +1,108 @@ +From 0f4ea4aee6e404dfbd6e3c4bbfb4f805e4e257f6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 12:20:22 +0100 +Subject: [PATCH] kernel-install: add "$KERNEL_INSTALL_STAGING_AREA" directory + +The general approach of kernel-install was that each plugin would drop in some +files into the entry directory. But this doesn't scale well, because if we have +multiple initrd generators, or multiple initrds, each generator would need to +recreate the logic to put the generated files in the right place. + +Also, effective cleanup is impossible if anything goes wrong on the way, so we +could end up with unused files in $BOOT. + +So let's invert the process: plugins drop files into $KERNEL_INSTALL_STAGING_AREA, +and at the end 90-loaderentry.install DTRT with those files. + +This allow new plugins like 50-mkosi-initrd.install to be significantly simpler. + +(cherry picked from commit 367165a4069ac0c04882a05a8a80f6afb1e42760) + +Related: #2065061 +--- + man/kernel-install.xml | 4 ++++ + src/kernel-install/90-loaderentry.install | 13 ++++++++++--- + src/kernel-install/kernel-install | 10 ++++++++++ + 3 files changed, 24 insertions(+), 3 deletions(-) + +diff --git a/man/kernel-install.xml b/man/kernel-install.xml +index bb76074d2e..685617863e 100644 +--- a/man/kernel-install.xml ++++ b/man/kernel-install.xml +@@ -180,6 +180,10 @@ + This should be configured as initrd_generator= in install.conf. + + ++ KERNEL_INSTALL_STAGING_AREA=... is set for plugins to a path to a directory. ++ Plugins may drop files in that directory, and they will be installed as part of the loader entry, based ++ on the file name and extension. ++ + + + bls +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 6a396910cb..0888c260e2 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -18,6 +18,8 @@ + # You should have received a copy of the GNU Lesser General Public License + # along with systemd; If not, see . + ++shopt -s nullglob ++ + COMMAND="$1" + KERNEL_VERSION="$2" + ENTRY_DIR_ABS="$3" +@@ -88,7 +90,8 @@ install -g root -o root -m 0644 "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" || { + } + + shift "$INITRD_OPTIONS_SHIFT" +-for initrd; do ++# All files listed as arguments, and staged files called "initrd*" are installed as initrds. ++for initrd in "$@" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do + [ -f "$initrd" ] || { + echo "Error: initrd '$initrd' not a file." >&2 + exit 1 +@@ -114,11 +117,15 @@ mkdir -p "${LOADER_ENTRY%/*}" || { + echo "machine-id $MACHINE_ID" + echo "options $BOOT_OPTIONS" + echo "linux $ENTRY_DIR/linux" +- for initrd; do ++ ++ have_initrd= ++ for initrd in "${@}" "${KERNEL_INSTALL_STAGING_AREA}"/initrd*; do + echo "initrd $ENTRY_DIR/${initrd##*/}" ++ have_initrd=yes + done ++ + # Try "initrd", generated by dracut in its kernel-install hook, if no initrds were supplied +- [ $# -eq 0 ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd $ENTRY_DIR/initrd" ++ [ -z "$have_initrd" ] && [ -f "$ENTRY_DIR_ABS/initrd" ] && echo "initrd $ENTRY_DIR/initrd" + : + } >"$LOADER_ENTRY" || { + echo "Error: could not create loader entry '$LOADER_ENTRY'." >&2 +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index a73a205d79..8cfef3208d 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -128,10 +128,20 @@ fi + + ENTRY_DIR_ABS="$BOOT_ROOT/$MACHINE_ID/$KERNEL_VERSION" + ++# Provide a directory where to store generated initrds ++cleanup() { ++ [ -n "$KERNEL_INSTALL_STAGING_AREA" ] && rm -rf "$KERNEL_INSTALL_STAGING_AREA" ++} ++ ++trap cleanup EXIT ++ ++KERNEL_INSTALL_STAGING_AREA="$(mktemp -d -t -p /tmp kernel-install.staging.XXXXXXX)" ++ + export KERNEL_INSTALL_MACHINE_ID="$MACHINE_ID" + export KERNEL_INSTALL_BOOT_ROOT="$BOOT_ROOT" + export KERNEL_INSTALL_LAYOUT="$layout" + export KERNEL_INSTALL_INITRD_GENERATOR="$initrd_generator" ++export KERNEL_INSTALL_STAGING_AREA + + [ "$layout" = "bls" ] + MAKE_ENTRY_DIR_ABS=$? diff --git a/SOURCES/0093-kernel-install-add-missing-log-line.patch b/SOURCES/0093-kernel-install-add-missing-log-line.patch new file mode 100644 index 0000000..da10435 --- /dev/null +++ b/SOURCES/0093-kernel-install-add-missing-log-line.patch @@ -0,0 +1,25 @@ +From 9f36dbd7cb7ca1f2e77ea6c1a3129988f346b287 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 19 Jan 2022 14:03:24 +0100 +Subject: [PATCH] kernel-install: add missing log line + +(cherry picked from commit 29f604131b2c0b82dca7d6ffaa5e6bc6a253620d) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 0888c260e2..3edefdefb4 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -40,6 +40,8 @@ fi + + case "$COMMAND" in + remove) ++ [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ ++ echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf" + exec rm -f \ + "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \ + "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf" diff --git a/SOURCES/0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch b/SOURCES/0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch new file mode 100644 index 0000000..c13105e --- /dev/null +++ b/SOURCES/0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch @@ -0,0 +1,83 @@ +From 7738d7793bc83421536f9962c794633006613725 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Wed, 9 Feb 2022 13:59:36 +0100 +Subject: [PATCH] kernel-install: don't try to persist used machine ID locally + +This reworks the how machine ID used by the boot loader spec snippet +generation logic. Instead of persisting it automatically to /etc/ we'll +append it via systemd.machined_id= to the kernel command line, and thus +persist it in the generated boot loader spec snippets instead. This has +nice benefits: + + 1. We do not collide with read-only root + 2. The machine ID remains stable across factory reset, so that we can + safely recognize the path in $BOOT we drop our kernel images in + again, i.e. kernel updates will work correctly and safely across + kernel factory resets. + 3. Previously regular systems had different machine IDs while in + initrd and after booting into the host system. With this change + they will now have the same. + +This then drops implicit persisting of KERNEL_INSTALL_MACHINE_ID, as its +unnecessary then. The field is still honoured though, for compat +reasons. + +This also drops the "Default" fallback previously used, as it actually +is without effect, the randomized ID generation already took precedence +in all cases. This means $MACHNE_ID/KERNEL_INSTALL_MACHINE_ID are now +guaranteed to look like a proper machine ID, which is useful for us, +given you need it that way to be able to pass it to the +systemd.machine_id= kernel command line option. + +(cherry picked from commit 11ce3ea2f2219ab9c0700bcf7f8ed4312d80e937) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 6 +++++- + src/kernel-install/kernel-install | 16 +++++++--------- + 2 files changed, 12 insertions(+), 10 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 3edefdefb4..046771169c 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -68,7 +68,11 @@ elif [ -r /usr/lib/kernel/cmdline ]; then + else + BOOT_OPTIONS="$(tr -s "$IFS" '\n' >/etc/machine-info +-[ -z "$MACHINE_ID" ] && NEW_MACHINE_ID="$(systemd-id128 new)" && echo "KERNEL_INSTALL_MACHINE_ID=$NEW_MACHINE_ID" >>/etc/machine-info +-[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ] && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" +-[ -z "$MACHINE_ID" ] && MACHINE_ID="Default" ++# If /etc/machine-id is initialized we'll use it, otherwise we'll use a freshly ++# generated one. If the user configured an explicit machine ID to use in ++# /etc/machine-info to use for our purpose, we'll use that instead (for ++# compatibility). ++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-info ] && . /etc/machine-info && MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" ++[ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ] && read -r MACHINE_ID +Date: Wed, 9 Feb 2022 14:29:19 +0100 +Subject: [PATCH] kernel-install: add a new $ENTRY_TOKEN variable for naming + boot entries +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This cleans up naming of boot loader spec boot entries a bit (i.e. the +naming of the .conf snippet files, and the directory in $BOOT where the +kernel images and initrds are placed), and isolates it from the actual machine +ID concept. + +Previously there was a sinlge concept for both things, because typically +the entries are just named after the machine ID. However one could also +use a different identifier, i.e. not a 128bit ID in which cases issues +pop up everywhere. For example, the "machine-id" field in the generated +snippets would not be a machine ID anymore, and the newly added +systemd.machine_id= kernel parameter would possibly get passed invalid +data. + +Hence clean this up: + +$MACHINE_ID → always a valid 128bit ID. + +$ENTRY_TOKEN → usually the $MACHINE_ID but can be any other string too. +This is used to name the directory to put kernels/initrds in. It's also +used for naming the *.conf snippets that implement the Boot Loader Type +1 spec. + +(cherry picked from commit 3907044ffa568aedf076d0f9807489ec78f87502) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 11 ++++++----- + src/kernel-install/kernel-install | 21 +++++++++++++++++---- + 2 files changed, 23 insertions(+), 9 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 046771169c..46261a2c11 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -29,6 +29,7 @@ INITRD_OPTIONS_SHIFT=4 + [ "$KERNEL_INSTALL_LAYOUT" = "bls" ] || exit 0 + + MACHINE_ID="$KERNEL_INSTALL_MACHINE_ID" ++ENTRY_TOKEN="$KERNEL_INSTALL_ENTRY_TOKEN" + BOOT_ROOT="$KERNEL_INSTALL_BOOT_ROOT" + + BOOT_MNT="$(stat -c %m "$BOOT_ROOT")" +@@ -41,10 +42,10 @@ fi + case "$COMMAND" in + remove) + [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ +- echo "Removing $BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION*.conf" ++ echo "Removing $BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION*.conf" + exec rm -f \ +- "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" \ +- "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf" ++ "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf" \ ++ "$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+"*".conf" + ;; + add) + ;; +@@ -80,9 +81,9 @@ if [ -r /etc/kernel/tries ]; then + echo "/etc/kernel/tries does not contain an integer." >&2 + exit 1 + fi +- LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+$TRIES.conf" ++ LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION+$TRIES.conf" + else +- LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" ++ LOADER_ENTRY="$BOOT_ROOT/loader/entries/$ENTRY_TOKEN-$KERNEL_VERSION.conf" + fi + + if ! [ -d "$ENTRY_DIR_ABS" ]; then +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index e94aa79bc6..75a31c62d4 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -97,7 +97,19 @@ fi + [ -z "$MACHINE_ID" ] && [ -r /etc/machine-id ] && read -r MACHINE_ID +Date: Wed, 9 Feb 2022 14:44:48 +0100 +Subject: [PATCH] kernel-install: only generate systemd.boot_id= in kernel + command line if used for naming the boot loader spec files/dirs + +Now that we can distinguish the naming of the boot loader spec +dirs/files and the machine ID let's tweak the logic for suffixing the +kernel cmdline with systemd.boot_id=: let's only do that when we +actually need the boot ID for naming these dirs/files. If we don't, +let's not bother. + +This should be beneficial for "golden" images that shall not carry any +machine IDs at all, i.e acquire their identity only once the final +userspace is actually reached. + +(cherry picked from commit 953b61004c37948dcd897265b56c1613bc73b9f9) + +Related: #2065061 +--- + src/kernel-install/90-loaderentry.install | 18 +++++++++++++----- + 1 file changed, 13 insertions(+), 5 deletions(-) + +diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install +index 46261a2c11..c1d69aa824 100644 +--- a/src/kernel-install/90-loaderentry.install ++++ b/src/kernel-install/90-loaderentry.install +@@ -70,10 +70,15 @@ else + BOOT_OPTIONS="$(tr -s "$IFS" '\n' +Date: Thu, 10 Feb 2022 14:27:22 +0100 +Subject: [PATCH] kernel-install: search harder for kernel image/initrd drop-in + dir + +If not explicitly configured, let's search a bit harder for the +ENTRY_TOKEN, and let's try the machine ID, the IMAGE_ID and ID fields of +/etc/os-release and finally "Default", all below potential $XBOOTLDR. + +(cherry picked from commit 6637cf9db67237857279262d93ee0e39023c5b85) + +Related: #2065061 +--- + src/kernel-install/kernel-install | 27 ++++++++++++++++++++++++--- + 1 file changed, 24 insertions(+), 3 deletions(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index 75a31c62d4..c42c40592a 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -103,29 +103,50 @@ fi + # for naming the .conf boot loader spec entry. Typically this is just the + # machine ID, but it can be anything else, too, if we are told so. + [ -z "$ENTRY_TOKEN" ] && [ -r /etc/kernel/entry-token ] && read -r ENTRY_TOKEN +Date: Thu, 10 Feb 2022 14:37:37 +0100 +Subject: [PATCH] kernel-install: add new "inspect" verb, showing paths and + parameters we discovered + +(cherry picked from commit c73cf4184441d3cc37a5e2195938f07420ec38b7) + +Related: #2065061 +--- + src/kernel-install/kernel-install | 29 +++++++++++++++++++++++------ + 1 file changed, 23 insertions(+), 6 deletions(-) + +diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install +index c42c40592a..b8099bd12c 100755 +--- a/src/kernel-install/kernel-install ++++ b/src/kernel-install/kernel-install +@@ -25,6 +25,7 @@ usage() + echo "Usage:" + echo " $0 [OPTIONS...] add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]" + echo " $0 [OPTIONS...] remove KERNEL-VERSION" ++ echo " $0 [OPTIONS...] inspect" + echo "Options:" + echo " -h, --help Print this help" + echo " -v, --verbose Increase verbosity" +@@ -72,13 +73,17 @@ else + [ $# -ge 1 ] && shift + fi + +-if [ $# -lt 1 ]; then +- echo "Error: not enough arguments" >&2 +- exit 1 +-fi ++if [ "$COMMAND" = "inspect" ]; then ++ KERNEL_VERSION="" ++else ++ if [ $# -lt 1 ]; then ++ echo "Error: not enough arguments" >&2 ++ exit 1 ++ fi + +-KERNEL_VERSION="$1" +-shift ++ KERNEL_VERSION="$1" ++ shift ++fi + + layout= + initrd_generator= +@@ -237,6 +242,18 @@ case "$COMMAND" in + fi + ;; + ++ inspect) ++ echo "KERNEL_INSTALL_MACHINE_ID: $KERNEL_INSTALL_MACHINE_ID" ++ echo "KERNEL_INSTALL_ENTRY_TOKEN: $KERNEL_INSTALL_ENTRY_TOKEN" ++ echo "KERNEL_INSTALL_BOOT_ROOT: $KERNEL_INSTALL_BOOT_ROOT" ++ echo "KERNEL_INSTALL_LAYOUT: $KERNEL_INSTALL_LAYOUT" ++ echo "KERNEL_INSTALL_INITRD_GENERATOR: $KERNEL_INSTALL_INITRD_GENERATOR" ++ echo "ENTRY_DIR_ABS: $KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN/\$KERNEL_VERSION" ++ ++ # Assert that ENTRY_DIR_ABS actually matches what we are printing here ++ [ "${ENTRY_DIR_ABS%/*}" = "$KERNEL_INSTALL_BOOT_ROOT/$ENTRY_TOKEN" ] || { echo "Assertion didn't pass." >&2; exit 1; } ++ ++ ;; + *) + echo "Error: unknown command '$COMMAND'" >&2 + exit 1 diff --git a/SOURCES/0099-ci-Mergify-configuration-update.patch b/SOURCES/0099-ci-Mergify-configuration-update.patch new file mode 100644 index 0000000..992cdf9 --- /dev/null +++ b/SOURCES/0099-ci-Mergify-configuration-update.patch @@ -0,0 +1,97 @@ +From caf80cd558222a08687e8db95e3e1fcad0d69946 Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Mon, 30 May 2022 15:19:16 +0200 +Subject: [PATCH] ci(Mergify): configuration update + +Add rules for `needs-ci` label management + +RHEL-only + +Related: #2087652 +--- + .mergify.yml | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 76 insertions(+) + create mode 100644 .mergify.yml + +diff --git a/.mergify.yml b/.mergify.yml +new file mode 100644 +index 0000000000..c06e0fb1be +--- /dev/null ++++ b/.mergify.yml +@@ -0,0 +1,76 @@ ++# doc: https://docs.mergify.com ++--- ++ ++pull_request_rules: ++ - name: Add `needs-ci` label on CI fail ++ conditions: ++ - or: ++ # Build test ++ - -check-success=build (gcc, 10, bfd) ++ - -check-success=build (gcc, 11, gold) ++ - -check-success=build (clang, 11, bfd) ++ - -check-success=build (clang, 12, gold) ++ - -check-success=build (clang, 13, lld) ++ # Unit tests ++ - -check-success=build (GCC, auto) ++ - -check-success=build (GCC_ASAN_UBSAN, auto) ++ - -check-success=build (CLANG, auto) ++ - -check-success=build (CLANG_ASAN_UBSAN, auto) ++ - -check-success=build (GCC, openssl) ++ - -check-success=build (CLANG, gcrypt) ++ # CentOS CI ++ - -check-success=CentOS CI (CentOS Stream 9) ++ - -check-success=CentOS CI (CentOS Stream 9 + sanitizers) ++ # LGTM ++ - and: ++ - "-check-success=LGTM analysis: JavaScript" ++ - "-check-neutral=LGTM analysis: JavaScript" ++ - and: ++ - "-check-success=LGTM analysis: Python" ++ - "-check-neutral=LGTM analysis: Python" ++ - and: ++ - "-check-success=LGTM analysis: C/C++" ++ - "-check-neutral=LGTM analysis: Python" ++ # Packit ++ - -check-success=rpm-build:centos-stream-9-aarch64 ++ - -check-success=rpm-build:centos-stream-9-x86_64 ++ actions: ++ label: ++ add: ++ - needs-ci ++ ++ - name: Remove `needs-ci` label on CI success ++ conditions: ++ # Build test ++ - check-success=build (gcc, 10, bfd) ++ - check-success=build (gcc, 11, gold) ++ - check-success=build (clang, 11, bfd) ++ - check-success=build (clang, 12, gold) ++ - check-success=build (clang, 13, lld) ++ # Unit tests ++ - check-success=build (GCC, auto) ++ - check-success=build (GCC_ASAN_UBSAN, auto) ++ - check-success=build (CLANG, auto) ++ - check-success=build (CLANG_ASAN_UBSAN, auto) ++ - check-success=build (GCC, openssl) ++ - check-success=build (CLANG, gcrypt) ++ # CentOS CI ++ - check-success=CentOS CI (CentOS Stream 9) ++ - check-success=CentOS CI (CentOS Stream 9 + sanitizers) ++ # LGTM ++ - or: ++ - "check-success=LGTM analysis: JavaScript" ++ - "check-neutral=LGTM analysis: JavaScript" ++ - or: ++ - "check-success=LGTM analysis: Python" ++ - "check-neutral=LGTM analysis: Python" ++ - or: ++ - "check-success=LGTM analysis: C/C++" ++ - "check-neutral=LGTM analysis: Python" ++ # Packit ++ - check-success=rpm-build:centos-stream-9-aarch64 ++ - check-success=rpm-build:centos-stream-9-x86_64 ++ actions: ++ label: ++ remove: ++ - needs-ci diff --git a/SOURCES/0100-ci-Mergify-fix-copy-paste-bug.patch b/SOURCES/0100-ci-Mergify-fix-copy-paste-bug.patch new file mode 100644 index 0000000..b907dea --- /dev/null +++ b/SOURCES/0100-ci-Mergify-fix-copy-paste-bug.patch @@ -0,0 +1,34 @@ +From 14b8f663049a902aac962f9a522595df9db6b6bc Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Mon, 6 Jun 2022 15:39:22 +0200 +Subject: [PATCH] ci(Mergify): fix copy&paste bug + +RHEL-only + +Related: #2087652 +--- + .mergify.yml | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/.mergify.yml b/.mergify.yml +index c06e0fb1be..b7852b201c 100644 +--- a/.mergify.yml ++++ b/.mergify.yml +@@ -30,7 +30,7 @@ pull_request_rules: + - "-check-neutral=LGTM analysis: Python" + - and: + - "-check-success=LGTM analysis: C/C++" +- - "-check-neutral=LGTM analysis: Python" ++ - "-check-neutral=LGTM analysis: C/C++" + # Packit + - -check-success=rpm-build:centos-stream-9-aarch64 + - -check-success=rpm-build:centos-stream-9-x86_64 +@@ -66,7 +66,7 @@ pull_request_rules: + - "check-neutral=LGTM analysis: Python" + - or: + - "check-success=LGTM analysis: C/C++" +- - "check-neutral=LGTM analysis: Python" ++ - "check-neutral=LGTM analysis: C/C++" + # Packit + - check-success=rpm-build:centos-stream-9-aarch64 + - check-success=rpm-build:centos-stream-9-x86_64 diff --git a/SOURCES/0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch b/SOURCES/0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch new file mode 100644 index 0000000..9b8fcce --- /dev/null +++ b/SOURCES/0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch @@ -0,0 +1,26 @@ +From 18b0bc42dc097af6147324deef100c41dedfa755 Mon Sep 17 00:00:00 2001 +From: Daan De Meyer +Date: Mon, 9 May 2022 09:50:32 +0200 +Subject: [PATCH] shared: Fix memory leak in bus_append_execute_property() + +Fixes #23317 + +(cherry picked from commit 2aaf6d407e8541985a15b7106abf6fbdfed0766a) +Related: #2087652 +--- + src/shared/bus-unit-util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c +index dcce530c99..ef134bcee4 100644 +--- a/src/shared/bus-unit-util.c ++++ b/src/shared/bus-unit-util.c +@@ -1952,7 +1952,7 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con + path_simplify(source); + + if (isempty(destination)) { +- r = strv_extend(&sources, TAKE_PTR(source)); ++ r = strv_consume(&sources, TAKE_PTR(source)); + if (r < 0) + return bus_log_create_error(r); + } else { diff --git a/SOURCES/0102-fuzz-no-longer-skip-empty-files.patch b/SOURCES/0102-fuzz-no-longer-skip-empty-files.patch new file mode 100644 index 0000000..b6f91c3 --- /dev/null +++ b/SOURCES/0102-fuzz-no-longer-skip-empty-files.patch @@ -0,0 +1,187 @@ +From 0235f9ea3d221aba513f4b6215418bf554e02791 Mon Sep 17 00:00:00 2001 +From: Evgeny Vereshchagin +Date: Mon, 3 Jan 2022 12:31:07 +0000 +Subject: [PATCH] fuzz: no longer skip empty files + +Empty files and empty strings seem to have triggered various +issues in the past so it seems they shouldn't be ignore by the +fuzzers just because fmemopen can't handle them. + +Prompted by https://github.com/systemd/systemd/pull/21939#issuecomment-1003113669 + +(cherry picked from commit 5df66d7d68006615abb4c4d3b1ebad545af4dd72) +Related: #2087652 +--- + src/core/fuzz-unit-file.c | 6 +----- + src/fuzz/fuzz-env-file.c | 5 ++--- + src/fuzz/fuzz-hostname-setup.c | 6 +----- + src/fuzz/fuzz-json.c | 6 +----- + src/fuzz/fuzz.h | 9 +++++++++ + src/nspawn/fuzz-nspawn-oci.c | 6 +----- + src/nspawn/fuzz-nspawn-settings.c | 6 +----- + 7 files changed, 16 insertions(+), 28 deletions(-) + +diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c +index aef29f4cf7..780dd3988d 100644 +--- a/src/core/fuzz-unit-file.c ++++ b/src/core/fuzz-unit-file.c +@@ -2,7 +2,6 @@ + + #include "conf-parser.h" + #include "fd-util.h" +-#include "fileio.h" + #include "fuzz.h" + #include "install.h" + #include "load-fragment.h" +@@ -22,10 +21,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + const char *name; + long offset; + +- if (size == 0) +- return 0; +- +- f = fmemopen_unlocked((char*) data, size, "re"); ++ f = data_to_file(data, size); + assert_se(f); + + if (read_line(f, LINE_MAX, &p) < 0) +diff --git a/src/fuzz/fuzz-env-file.c b/src/fuzz/fuzz-env-file.c +index e0dac260b0..3b3e625608 100644 +--- a/src/fuzz/fuzz-env-file.c ++++ b/src/fuzz/fuzz-env-file.c +@@ -4,7 +4,6 @@ + + #include "alloc-util.h" + #include "env-file.h" +-#include "fileio.h" + #include "fd-util.h" + #include "fuzz.h" + #include "strv.h" +@@ -13,10 +12,10 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + _cleanup_fclose_ FILE *f = NULL; + _cleanup_strv_free_ char **rl = NULL, **rlp = NULL; + +- if (size == 0 || size > 65535) ++ if (size > 65535) + return 0; + +- f = fmemopen_unlocked((char*) data, size, "re"); ++ f = data_to_file(data, size); + assert_se(f); + + /* We don't want to fill the logs with messages about parse errors. +diff --git a/src/fuzz/fuzz-hostname-setup.c b/src/fuzz/fuzz-hostname-setup.c +index b8d36da54a..d7c23eef12 100644 +--- a/src/fuzz/fuzz-hostname-setup.c ++++ b/src/fuzz/fuzz-hostname-setup.c +@@ -2,7 +2,6 @@ + + #include "alloc-util.h" + #include "fd-util.h" +-#include "fileio.h" + #include "fuzz.h" + #include "hostname-setup.h" + +@@ -10,10 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + _cleanup_fclose_ FILE *f = NULL; + _cleanup_free_ char *ret = NULL; + +- if (size == 0) +- return 0; +- +- f = fmemopen_unlocked((char*) data, size, "re"); ++ f = data_to_file(data, size); + assert_se(f); + + /* We don't want to fill the logs with messages about parse errors. +diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c +index f9a0e818c4..ad7460c6fd 100644 +--- a/src/fuzz/fuzz-json.c ++++ b/src/fuzz/fuzz-json.c +@@ -1,7 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" +-#include "fileio.h" + #include "fd-util.h" + #include "fuzz.h" + #include "json.h" +@@ -12,10 +11,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + _cleanup_fclose_ FILE *f = NULL, *g = NULL; + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; + +- if (size == 0) +- return 0; +- +- f = fmemopen_unlocked((char*) data, size, "re"); ++ f = data_to_file(data, size); + assert_se(f); + + if (json_parse_file(f, NULL, 0, &v, NULL, NULL) < 0) +diff --git a/src/fuzz/fuzz.h b/src/fuzz/fuzz.h +index 579b0eed73..d7cbb0bb16 100644 +--- a/src/fuzz/fuzz.h ++++ b/src/fuzz/fuzz.h +@@ -4,5 +4,14 @@ + #include + #include + ++#include "fileio.h" ++ + /* The entry point into the fuzzer */ + int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size); ++ ++static inline FILE* data_to_file(const uint8_t *data, size_t size) { ++ if (size == 0) ++ return fopen("/dev/null", "re"); ++ else ++ return fmemopen_unlocked((char*) data, size, "re"); ++} +diff --git a/src/nspawn/fuzz-nspawn-oci.c b/src/nspawn/fuzz-nspawn-oci.c +index cfebf65c00..91f2a81dfc 100644 +--- a/src/nspawn/fuzz-nspawn-oci.c ++++ b/src/nspawn/fuzz-nspawn-oci.c +@@ -2,7 +2,6 @@ + + #include "alloc-util.h" + #include "fd-util.h" +-#include "fileio.h" + #include "fuzz.h" + #include "nspawn-oci.h" + +@@ -10,10 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + _cleanup_fclose_ FILE *f = NULL; + _cleanup_(settings_freep) Settings *s = NULL; + +- if (size == 0) +- return 0; +- +- f = fmemopen_unlocked((char*) data, size, "re"); ++ f = data_to_file(data, size); + assert_se(f); + + /* We don't want to fill the logs with messages about parse errors. +diff --git a/src/nspawn/fuzz-nspawn-settings.c b/src/nspawn/fuzz-nspawn-settings.c +index bd98ed26e8..6b91e1506e 100644 +--- a/src/nspawn/fuzz-nspawn-settings.c ++++ b/src/nspawn/fuzz-nspawn-settings.c +@@ -2,7 +2,6 @@ + + #include "alloc-util.h" + #include "fd-util.h" +-#include "fileio.h" + #include "fuzz.h" + #include "nspawn-settings.h" + +@@ -10,10 +9,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + _cleanup_fclose_ FILE *f = NULL; + _cleanup_(settings_freep) Settings *s = NULL; + +- if (size == 0) +- return 0; +- +- f = fmemopen_unlocked((char*) data, size, "re"); ++ f = data_to_file(data, size); + assert_se(f); + + /* We don't want to fill the logs with messages about parse errors. diff --git a/SOURCES/0103-networkctl-open-the-bus-just-once.patch b/SOURCES/0103-networkctl-open-the-bus-just-once.patch new file mode 100644 index 0000000..d36d4d0 --- /dev/null +++ b/SOURCES/0103-networkctl-open-the-bus-just-once.patch @@ -0,0 +1,276 @@ +From 3852f94de9582dc1acb44844579873cd0e2f3162 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 11 Jan 2022 15:12:42 +0100 +Subject: [PATCH] networkctl: open the bus just once + +We'd connect to the bus twice: the first time to check networkd namespace, +and then the second time to do the deed we were asked to do. It's nicer +to open the bus just once, for efficience and also to avoid the open call +in all functions. + +An ASSERT_PTR helper is added: +- sd_bus *bus = userdata; + ... +- assert(bus); ++ sd_bus *bus = ASSERT_PTR(userdata); + ... + +It can be used in other place too, but I'm leaving that for a later +refactoring. + +(cherry picked from commit d821e40ca96d2b14216f7a18e4512364bfb83628) +Related: #2087652 +--- + src/fundamental/macro-fundamental.h | 8 ++++ + src/network/networkctl.c | 74 ++++++++++------------------- + 2 files changed, 33 insertions(+), 49 deletions(-) + +diff --git a/src/fundamental/macro-fundamental.h b/src/fundamental/macro-fundamental.h +index f87839d47b..d597c743bb 100644 +--- a/src/fundamental/macro-fundamental.h ++++ b/src/fundamental/macro-fundamental.h +@@ -66,6 +66,14 @@ + #define free(a) FreePool(a) + #endif + ++/* This passes the argument through after (if asserts are enabled) checking that it is not null. */ ++#define ASSERT_PTR(expr) \ ++ ({ \ ++ typeof(expr) _expr_ = (expr); \ ++ assert(_expr_); \ ++ _expr_; \ ++ }) ++ + #if defined(static_assert) + #define assert_cc(expr) \ + static_assert(expr, #expr) +diff --git a/src/network/networkctl.c b/src/network/networkctl.c +index 68dd4b185c..c35f851bdb 100644 +--- a/src/network/networkctl.c ++++ b/src/network/networkctl.c +@@ -79,17 +79,12 @@ static bool arg_full = false; + static unsigned arg_lines = 10; + static JsonFormatFlags arg_json_format_flags = JSON_FORMAT_OFF; + +-static int get_description(JsonVariant **ret) { ++static int get_description(sd_bus *bus, JsonVariant **ret) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + const char *text = NULL; + int r; + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + r = bus_call_method(bus, bus_network_mgr, "Describe", &error, &reply, NULL); + if (r < 0) + return log_error_errno(r, "Failed to get description: %s", bus_error_message(&error, r)); +@@ -105,11 +100,11 @@ static int get_description(JsonVariant **ret) { + return 0; + } + +-static int dump_manager_description(void) { ++static int dump_manager_description(sd_bus *bus) { + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; + int r; + +- r = get_description(&v); ++ r = get_description(bus, &v); + if (r < 0) + return r; + +@@ -117,14 +112,14 @@ static int dump_manager_description(void) { + return 0; + } + +-static int dump_link_description(char **patterns) { ++static int dump_link_description(sd_bus *bus, char **patterns) { + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; + _cleanup_free_ bool *matched_patterns = NULL; + JsonVariant *i; + size_t c = 0; + int r; + +- r = get_description(&v); ++ r = get_description(bus, &v); + if (r < 0) + return r; + +@@ -790,6 +785,7 @@ static int acquire_link_info(sd_bus *bus, sd_netlink *rtnl, char **patterns, Lin + } + + static int list_links(int argc, char *argv[], void *userdata) { ++ sd_bus *bus = ASSERT_PTR(userdata); + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + _cleanup_(link_info_array_freep) LinkInfo *links = NULL; + _cleanup_(table_unrefp) Table *table = NULL; +@@ -798,9 +794,9 @@ static int list_links(int argc, char *argv[], void *userdata) { + + if (arg_json_format_flags != JSON_FORMAT_OFF) { + if (arg_all || argc <= 1) +- return dump_manager_description(); ++ return dump_manager_description(bus); + else +- return dump_link_description(strv_skip(argv, 1)); ++ return dump_link_description(bus, strv_skip(argv, 1)); + } + + r = sd_netlink_open(&rtnl); +@@ -2383,7 +2379,7 @@ static int system_status(sd_netlink *rtnl, sd_hwdb *hwdb) { + } + + static int link_status(int argc, char *argv[], void *userdata) { +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; ++ sd_bus *bus = ASSERT_PTR(userdata); + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL; + _cleanup_(link_info_array_freep) LinkInfo *links = NULL; +@@ -2391,17 +2387,13 @@ static int link_status(int argc, char *argv[], void *userdata) { + + if (arg_json_format_flags != JSON_FORMAT_OFF) { + if (arg_all || argc <= 1) +- return dump_manager_description(); ++ return dump_manager_description(bus); + else +- return dump_link_description(strv_skip(argv, 1)); ++ return dump_link_description(bus, strv_skip(argv, 1)); + } + + pager_open(arg_pager_flags); + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + r = sd_netlink_open(&rtnl); + if (r < 0) + return log_error_errno(r, "Failed to connect to netlink: %m"); +@@ -2738,14 +2730,10 @@ static int link_renew_one(sd_bus *bus, int index, const char *name) { + } + + static int link_renew(int argc, char *argv[], void *userdata) { +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; ++ sd_bus *bus = ASSERT_PTR(userdata); + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + int index, k = 0, r; + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + for (int i = 1; i < argc; i++) { + index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); + if (index < 0) +@@ -2772,14 +2760,10 @@ static int link_force_renew_one(sd_bus *bus, int index, const char *name) { + } + + static int link_force_renew(int argc, char *argv[], void *userdata) { +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; ++ sd_bus *bus = ASSERT_PTR(userdata); + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + int k = 0, r; + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + for (int i = 1; i < argc; i++) { + int index = rtnl_resolve_interface_or_warn(&rtnl, argv[i]); + if (index < 0) +@@ -2794,14 +2778,10 @@ static int link_force_renew(int argc, char *argv[], void *userdata) { + } + + static int verb_reload(int argc, char *argv[], void *userdata) { ++ sd_bus *bus = ASSERT_PTR(userdata); + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r; + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + r = bus_call_method(bus, bus_network_mgr, "Reload", &error, NULL, NULL); + if (r < 0) + return log_error_errno(r, "Failed to reload network settings: %m"); +@@ -2810,17 +2790,13 @@ static int verb_reload(int argc, char *argv[], void *userdata) { + } + + static int verb_reconfigure(int argc, char *argv[], void *userdata) { ++ sd_bus *bus = ASSERT_PTR(userdata); + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + _cleanup_set_free_ Set *indexes = NULL; + int index, r; + void *p; + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + indexes = set_new(NULL); + if (!indexes) + return log_oom(); +@@ -2968,7 +2944,7 @@ static int parse_argv(int argc, char *argv[]) { + return 1; + } + +-static int networkctl_main(int argc, char *argv[]) { ++static int networkctl_main(sd_bus *bus, int argc, char *argv[]) { + static const Verb verbs[] = { + { "list", VERB_ANY, VERB_ANY, VERB_DEFAULT, list_links }, + { "status", VERB_ANY, VERB_ANY, 0, link_status }, +@@ -2984,20 +2960,15 @@ static int networkctl_main(int argc, char *argv[]) { + {} + }; + +- return dispatch_verb(argc, argv, verbs, NULL); ++ return dispatch_verb(argc, argv, verbs, bus); + } + +-static int check_netns_match(void) { ++static int check_netns_match(sd_bus *bus) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + struct stat st; + uint64_t id; + int r; + +- r = sd_bus_open_system(&bus); +- if (r < 0) +- return log_error_errno(r, "Failed to connect system bus: %m"); +- + r = sd_bus_get_property_trivial( + bus, + "org.freedesktop.network1", +@@ -3035,6 +3006,7 @@ static void warn_networkd_missing(void) { + } + + static int run(int argc, char* argv[]) { ++ _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r; + + log_setup(); +@@ -3043,13 +3015,17 @@ static int run(int argc, char* argv[]) { + if (r <= 0) + return r; + +- r = check_netns_match(); ++ r = sd_bus_open_system(&bus); ++ if (r < 0) ++ return log_error_errno(r, "Failed to connect system bus: %m"); ++ ++ r = check_netns_match(bus); + if (r < 0) + return r; + + warn_networkd_missing(); + +- return networkctl_main(argc, argv); ++ return networkctl_main(bus, argc, argv); + } + + DEFINE_MAIN_FUNCTION(run); diff --git a/SOURCES/0104-json-align-table.patch b/SOURCES/0104-json-align-table.patch new file mode 100644 index 0000000..d058681 --- /dev/null +++ b/SOURCES/0104-json-align-table.patch @@ -0,0 +1,55 @@ +From ee588179205de7c1584bd45bd22ec59028f11405 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 10:24:36 +0200 +Subject: [PATCH] json: align table + +(cherry picked from commit 9674b089cfb1f75653579e83735e049ddcbbed7e) +Related: #2087652 +--- + src/shared/json.c | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +diff --git a/src/shared/json.c b/src/shared/json.c +index dff95eda26..6375b87a0b 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -4754,7 +4754,6 @@ bool json_variant_is_sorted(JsonVariant *v) { + } + + int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size) { +- + if (!json_variant_is_string(v)) + return -EINVAL; + +@@ -4762,7 +4761,6 @@ int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size) { + } + + int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) { +- + if (!json_variant_is_string(v)) + return -EINVAL; + +@@ -4770,15 +4768,15 @@ int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) { + } + + static const char* const json_variant_type_table[_JSON_VARIANT_TYPE_MAX] = { +- [JSON_VARIANT_STRING] = "string", +- [JSON_VARIANT_INTEGER] = "integer", ++ [JSON_VARIANT_STRING] = "string", ++ [JSON_VARIANT_INTEGER] = "integer", + [JSON_VARIANT_UNSIGNED] = "unsigned", +- [JSON_VARIANT_REAL] = "real", +- [JSON_VARIANT_NUMBER] = "number", +- [JSON_VARIANT_BOOLEAN] = "boolean", +- [JSON_VARIANT_ARRAY] = "array", +- [JSON_VARIANT_OBJECT] = "object", +- [JSON_VARIANT_NULL] = "null", ++ [JSON_VARIANT_REAL] = "real", ++ [JSON_VARIANT_NUMBER] = "number", ++ [JSON_VARIANT_BOOLEAN] = "boolean", ++ [JSON_VARIANT_ARRAY] = "array", ++ [JSON_VARIANT_OBJECT] = "object", ++ [JSON_VARIANT_NULL] = "null", + }; + + DEFINE_STRING_TABLE_LOOKUP(json_variant_type, JsonVariantType); diff --git a/SOURCES/0105-fuzz-json-optionally-allow-logging-and-output.patch b/SOURCES/0105-fuzz-json-optionally-allow-logging-and-output.patch new file mode 100644 index 0000000..c3e3f22 --- /dev/null +++ b/SOURCES/0105-fuzz-json-optionally-allow-logging-and-output.patch @@ -0,0 +1,60 @@ +From 3087505025b78b80951ab3a5f496eb255f1a9a21 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 10:41:36 +0200 +Subject: [PATCH] fuzz-json: optionally allow logging and output +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Similarly to other fuzzers… this makes development easier. + +(cherry picked from commit 9ad955ce40e244a52984c68ae2a6b151d918b4a8) +Related: #2087652 +--- + src/fuzz/fuzz-json.c | 19 ++++++++++++++----- + 1 file changed, 14 insertions(+), 5 deletions(-) + +diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c +index ad7460c6fd..648a6d441d 100644 +--- a/src/fuzz/fuzz-json.c ++++ b/src/fuzz/fuzz-json.c +@@ -1,6 +1,7 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" ++#include "env-util.h" + #include "fd-util.h" + #include "fuzz.h" + #include "json.h" +@@ -10,18 +11,26 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + size_t out_size; + _cleanup_fclose_ FILE *f = NULL, *g = NULL; + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; ++ int r; ++ ++ /* Disable most logging if not running standalone */ ++ if (!getenv("SYSTEMD_LOG_LEVEL")) ++ log_set_max_level(LOG_CRIT); + + f = data_to_file(data, size); + assert_se(f); + +- if (json_parse_file(f, NULL, 0, &v, NULL, NULL) < 0) ++ r = json_parse_file(f, NULL, 0, &v, NULL, NULL); ++ if (r < 0) { ++ log_debug_errno(r, "failed to parse input: %m"); + return 0; ++ } + +- g = open_memstream_unlocked(&out, &out_size); +- assert_se(g); ++ if (getenv_bool("SYSTEMD_FUZZ_OUTPUT") <= 0) ++ assert_se(g = open_memstream_unlocked(&out, &out_size)); + +- json_variant_dump(v, 0, g, NULL); +- json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g, NULL); ++ json_variant_dump(v, 0, g ?: stdout, NULL); ++ json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g ?: stdout, NULL); + + return 0; + } diff --git a/SOURCES/0106-shared-json-reduce-scope-of-variables.patch b/SOURCES/0106-shared-json-reduce-scope-of-variables.patch new file mode 100644 index 0000000..f9f2214 --- /dev/null +++ b/SOURCES/0106-shared-json-reduce-scope-of-variables.patch @@ -0,0 +1,435 @@ +From 272d6e85877bb436709ed54c02d3b68101e0438d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 11:01:32 +0200 +Subject: [PATCH] shared/json: reduce scope of variables + +(cherry picked from commit a4669764f7329d1e8a3d364db519500355cea5f0) +Related: #2087652 +--- + src/shared/json.c | 133 +++++++++++++++++++--------------------------- + 1 file changed, 54 insertions(+), 79 deletions(-) + +diff --git a/src/shared/json.c b/src/shared/json.c +index 6375b87a0b..d35874f8e3 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -574,9 +574,6 @@ int json_variant_new_array(JsonVariant **ret, JsonVariant **array, size_t n) { + } + + int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) { +- JsonVariant *v; +- size_t i; +- + assert_return(ret, -EINVAL); + if (n == 0) { + *ret = JSON_VARIANT_MAGIC_EMPTY_ARRAY; +@@ -584,7 +581,7 @@ int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) { + } + assert_return(p, -EINVAL); + +- v = new(JsonVariant, n + 1); ++ JsonVariant *v = new(JsonVariant, n + 1); + if (!v) + return -ENOMEM; + +@@ -595,7 +592,7 @@ int json_variant_new_array_bytes(JsonVariant **ret, const void *p, size_t n) { + .depth = 1, + }; + +- for (i = 0; i < n; i++) { ++ for (size_t i = 0; i < n; i++) { + JsonVariant *w = v + 1 + i; + + *w = (JsonVariant) { +@@ -790,12 +787,9 @@ static void json_variant_free_inner(JsonVariant *v, bool force_sensitive) { + return; + } + +- if (IN_SET(v->type, JSON_VARIANT_ARRAY, JSON_VARIANT_OBJECT)) { +- size_t i; +- +- for (i = 0; i < v->n_elements; i++) ++ if (IN_SET(v->type, JSON_VARIANT_ARRAY, JSON_VARIANT_OBJECT)) ++ for (size_t i = 0; i < v->n_elements; i++) + json_variant_free_inner(v + 1 + i, sensitive); +- } + + if (sensitive) + explicit_bzero_safe(v, json_variant_size(v)); +@@ -839,11 +833,9 @@ JsonVariant *json_variant_unref(JsonVariant *v) { + } + + void json_variant_unref_many(JsonVariant **array, size_t n) { +- size_t i; +- + assert(array || n == 0); + +- for (i = 0; i < n; i++) ++ for (size_t i = 0; i < n; i++) + json_variant_unref(array[i]); + } + +@@ -1218,8 +1210,6 @@ mismatch: + } + + JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVariant **ret_key) { +- size_t i; +- + if (!v) + goto not_found; + if (!key) +@@ -1241,6 +1231,7 @@ JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVaria + while (b > a) { + JsonVariant *p; + const char *f; ++ size_t i; + int c; + + i = (a + b) / 2; +@@ -1264,7 +1255,7 @@ JsonVariant *json_variant_by_key_full(JsonVariant *v, const char *key, JsonVaria + } + + /* The variant is not sorted, hence search for the field linearly */ +- for (i = 0; i < v->n_elements; i += 2) { ++ for (size_t i = 0; i < v->n_elements; i += 2) { + JsonVariant *p; + + p = json_variant_dereference(v + 1 + i); +@@ -1335,34 +1326,28 @@ bool json_variant_equal(JsonVariant *a, JsonVariant *b) { + return true; + + case JSON_VARIANT_ARRAY: { +- size_t i, n; +- +- n = json_variant_elements(a); ++ size_t n = json_variant_elements(a); + if (n != json_variant_elements(b)) + return false; + +- for (i = 0; i < n; i++) { ++ for (size_t i = 0; i < n; i++) + if (!json_variant_equal(json_variant_by_index(a, i), json_variant_by_index(b, i))) + return false; +- } + + return true; + } + + case JSON_VARIANT_OBJECT: { +- size_t i, n; +- +- n = json_variant_elements(a); ++ size_t n = json_variant_elements(a); + if (n != json_variant_elements(b)) + return false; + + /* Iterate through all keys in 'a' */ +- for (i = 0; i < n; i += 2) { ++ for (size_t i = 0; i < n; i += 2) { + bool found = false; +- size_t j; + + /* Match them against all keys in 'b' */ +- for (j = 0; j < n; j += 2) { ++ for (size_t j = 0; j < n; j += 2) { + JsonVariant *key_b; + + key_b = json_variant_by_index(b, j); +@@ -1470,16 +1455,14 @@ static int print_source(FILE *f, JsonVariant *v, JsonFormatFlags flags, bool whi + DECIMAL_STR_MAX(unsigned) -1; + + if (whitespace) { +- size_t i, n; +- +- n = 1 + (v->source ? strlen(v->source->name) : 0) + +- ((v->source && (v->line > 0 || v->column > 0)) ? 1 : 0) + +- (v->line > 0 ? w : 0) + +- (((v->source || v->line > 0) && v->column > 0) ? 1 : 0) + +- (v->column > 0 ? k : 0) + +- 2; +- +- for (i = 0; i < n; i++) ++ size_t n = 1 + (v->source ? strlen(v->source->name) : 0) + ++ ((v->source && (v->line > 0 || v->column > 0)) ? 1 : 0) + ++ (v->line > 0 ? w : 0) + ++ (((v->source || v->line > 0) && v->column > 0) ? 1 : 0) + ++ (v->column > 0 ? k : 0) + ++ 2; ++ ++ for (size_t i = 0; i < n; i++) + fputc(' ', f); + } else { + fputc('[', f); +@@ -1631,10 +1614,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha + break; + + case JSON_VARIANT_ARRAY: { +- size_t i, n; +- +- n = json_variant_elements(v); +- ++ size_t n = json_variant_elements(v); + if (n == 0) + fputs("[]", f); + else { +@@ -1653,7 +1633,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha + fputc('[', f); + } + +- for (i = 0; i < n; i++) { ++ for (size_t i = 0; i < n; i++) { + JsonVariant *e; + + assert_se(e = json_variant_by_index(v, i)); +@@ -1687,10 +1667,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha + } + + case JSON_VARIANT_OBJECT: { +- size_t i, n; +- +- n = json_variant_elements(v); +- ++ size_t n = json_variant_elements(v); + if (n == 0) + fputs("{}", f); + else { +@@ -1709,7 +1686,7 @@ static int json_format(FILE *f, JsonVariant *v, JsonFormatFlags flags, const cha + fputc('{', f); + } + +- for (i = 0; i < n; i += 2) { ++ for (size_t i = 0; i < n; i += 2) { + JsonVariant *e; + + e = json_variant_by_index(v, i); +@@ -1826,7 +1803,7 @@ void json_variant_dump(JsonVariant *v, JsonFormatFlags flags, FILE *f, const cha + int json_variant_filter(JsonVariant **v, char **to_remove) { + _cleanup_(json_variant_unrefp) JsonVariant *w = NULL; + _cleanup_free_ JsonVariant **array = NULL; +- size_t i, n = 0, k = 0; ++ size_t n = 0, k = 0; + int r; + + assert(v); +@@ -1839,7 +1816,7 @@ int json_variant_filter(JsonVariant **v, char **to_remove) { + if (strv_isempty(to_remove)) + return 0; + +- for (i = 0; i < json_variant_elements(*v); i += 2) { ++ for (size_t i = 0; i < json_variant_elements(*v); i += 2) { + JsonVariant *p; + + p = json_variant_by_index(*v, i); +@@ -1881,7 +1858,7 @@ int json_variant_filter(JsonVariant **v, char **to_remove) { + int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *value) { + _cleanup_(json_variant_unrefp) JsonVariant *field_variant = NULL, *w = NULL; + _cleanup_free_ JsonVariant **array = NULL; +- size_t i, k = 0; ++ size_t k = 0; + int r; + + assert(v); +@@ -1896,7 +1873,7 @@ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *valu + if (!json_variant_is_object(*v)) + return -EINVAL; + +- for (i = 0; i < json_variant_elements(*v); i += 2) { ++ for (size_t i = 0; i < json_variant_elements(*v); i += 2) { + JsonVariant *p; + + p = json_variant_by_index(*v, i); +@@ -2007,7 +1984,7 @@ int json_variant_set_field_strv(JsonVariant **v, const char *field, char **l) { + int json_variant_merge(JsonVariant **v, JsonVariant *m) { + _cleanup_(json_variant_unrefp) JsonVariant *w = NULL; + _cleanup_free_ JsonVariant **array = NULL; +- size_t v_elements, m_elements, i, k; ++ size_t v_elements, m_elements, k; + bool v_blank, m_blank; + int r; + +@@ -2040,7 +2017,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) { + return -ENOMEM; + + k = 0; +- for (i = 0; i < v_elements; i += 2) { ++ for (size_t i = 0; i < v_elements; i += 2) { + JsonVariant *u; + + u = json_variant_by_index(*v, i); +@@ -2054,7 +2031,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) { + array[k++] = json_variant_by_index(*v, i + 1); + } + +- for (i = 0; i < m_elements; i++) ++ for (size_t i = 0; i < m_elements; i++) + array[k++] = json_variant_by_index(m, i); + + r = json_variant_new_object(&w, array, k); +@@ -2089,19 +2066,17 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) { + if (blank) + r = json_variant_new_array(&nv, (JsonVariant*[]) { element }, 1); + else { +- _cleanup_free_ JsonVariant **array = NULL; +- size_t i; +- +- array = new(JsonVariant*, json_variant_elements(*v) + 1); ++ _cleanup_free_ JsonVariant **array = new(JsonVariant*, json_variant_elements(*v) + 1); + if (!array) + return -ENOMEM; + +- for (i = 0; i < json_variant_elements(*v); i++) ++ size_t size = json_variant_elements(*v); ++ for (size_t i = 0; i < size; i++) + array[i] = json_variant_by_index(*v, i); + +- array[i] = element; ++ array[size] = element; + +- r = json_variant_new_array(&nv, array, i + 1); ++ r = json_variant_new_array(&nv, array, size + 1); + } + if (r < 0) + return r; +@@ -2116,7 +2091,6 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) { + + int json_variant_strv(JsonVariant *v, char ***ret) { + char **l = NULL; +- size_t n, i; + bool sensitive; + int r; + +@@ -2136,12 +2110,12 @@ int json_variant_strv(JsonVariant *v, char ***ret) { + + sensitive = v->sensitive; + +- n = json_variant_elements(v); ++ size_t n = json_variant_elements(v); + l = new(char*, n+1); + if (!l) + return -ENOMEM; + +- for (i = 0; i < n; i++) { ++ for (size_t i = 0; i < n; i++) { + JsonVariant *e; + + assert_se(e = json_variant_by_index(v, i)); +@@ -2160,7 +2134,7 @@ int json_variant_strv(JsonVariant *v, char ***ret) { + } + } + +- l[i] = NULL; ++ l[n] = NULL; + *ret = TAKE_PTR(l); + + return 0; +@@ -2847,7 +2821,7 @@ static int json_parse_internal( + unsigned *column, + bool continue_end) { + +- size_t n_stack = 1, i; ++ size_t n_stack = 1; + unsigned line_buffer = 0, column_buffer = 0; + void *tokenizer_state = NULL; + JsonStack *stack = NULL; +@@ -3186,7 +3160,7 @@ done: + r = 0; + + finish: +- for (i = 0; i < n_stack; i++) ++ for (size_t i = 0; i < n_stack; i++) + json_stack_release(stack + i); + + free(stack); +@@ -3229,7 +3203,7 @@ int json_parse_file_at(FILE *f, int dir_fd, const char *path, JsonParseFlags fla + + int json_buildv(JsonVariant **ret, va_list ap) { + JsonStack *stack = NULL; +- size_t n_stack = 1, i; ++ size_t n_stack = 1; + int r; + + assert_return(ret, -EINVAL); +@@ -4147,7 +4121,7 @@ done: + r = 0; + + finish: +- for (i = 0; i < n_stack; i++) ++ for (size_t i = 0; i < n_stack; i++) + json_stack_release(stack + i); + + free(stack); +@@ -4231,8 +4205,7 @@ int json_log_internal( + } + + int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallback bad, JsonDispatchFlags flags, void *userdata) { +- const JsonDispatch *p; +- size_t i, n, m; ++ size_t m; + int r, done = 0; + bool *found; + +@@ -4245,14 +4218,16 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba + return -EINVAL; + } + +- for (p = table, m = 0; p->name; p++) ++ m = 0; ++ for (const JsonDispatch *p = table; p->name; p++) + m++; + + found = newa0(bool, m); + +- n = json_variant_elements(v); +- for (i = 0; i < n; i += 2) { ++ size_t n = json_variant_elements(v); ++ for (size_t i = 0; i < n; i += 2) { + JsonVariant *key, *value; ++ const JsonDispatch *p; + + assert_se(key = json_variant_by_index(v, i)); + assert_se(value = json_variant_by_index(v, i+1)); +@@ -4326,7 +4301,7 @@ int json_dispatch(JsonVariant *v, const JsonDispatch table[], JsonDispatchCallba + } + } + +- for (p = table; p->name; p++) { ++ for (const JsonDispatch *p = table; p->name; p++) { + JsonDispatchFlags merged_flags = p->flags | flags; + + if ((merged_flags & JSON_MANDATORY) && !found[p-table]) { +@@ -4621,7 +4596,7 @@ static int json_cmp_strings(const void *x, const void *y) { + int json_variant_sort(JsonVariant **v) { + _cleanup_free_ JsonVariant **a = NULL; + JsonVariant *n = NULL; +- size_t i, m; ++ size_t m; + int r; + + assert(v); +@@ -4639,7 +4614,7 @@ int json_variant_sort(JsonVariant **v) { + if (!a) + return -ENOMEM; + +- for (i = 0; i < m; i++) ++ for (size_t i = 0; i < m; i++) + a[i] = json_variant_by_index(*v, i); + + qsort(a, m/2, sizeof(JsonVariant*)*2, json_cmp_strings); +@@ -4662,7 +4637,7 @@ int json_variant_sort(JsonVariant **v) { + int json_variant_normalize(JsonVariant **v) { + _cleanup_free_ JsonVariant **a = NULL; + JsonVariant *n = NULL; +- size_t i, j, m; ++ size_t i, m; + int r; + + assert(v); +@@ -4714,7 +4689,7 @@ int json_variant_normalize(JsonVariant **v) { + r = 1; + + finish: +- for (j = 0; j < i; j++) ++ for (size_t j = 0; j < i; j++) + json_variant_unref(a[j]); + + return r; diff --git a/SOURCES/0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch b/SOURCES/0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch new file mode 100644 index 0000000..10a1b24 --- /dev/null +++ b/SOURCES/0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch @@ -0,0 +1,97 @@ +From 495eb07a2d8aa7f19b775b4508466fecb1b3ce50 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 11:07:06 +0200 +Subject: [PATCH] fuzz-json: also do sorting and normalizing and other easy + calls + +(cherry picked from commit a2c5735dd80e19d2d525f9be322395530096cbe2) +Related: #2087652 +--- + src/fuzz/fuzz-json.c | 75 ++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 75 insertions(+) + +diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c +index 648a6d441d..995a0265ba 100644 +--- a/src/fuzz/fuzz-json.c ++++ b/src/fuzz/fuzz-json.c +@@ -32,5 +32,80 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + json_variant_dump(v, 0, g ?: stdout, NULL); + json_variant_dump(v, JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR|JSON_FORMAT_SOURCE, g ?: stdout, NULL); + ++ bool sorted = json_variant_is_sorted(v); ++ log_debug("json_variant_is_sorted: %s", yes_no(sorted)); ++ ++ r = json_variant_sort(&v); ++ log_debug_errno(r, "json_variant_sort: %d/%m", r); ++ ++ sorted = json_variant_is_sorted(v); ++ log_debug("json_variant_is_sorted: %s", yes_no(sorted)); ++ assert_se(r < 0 || sorted); ++ ++ bool normalized = json_variant_is_normalized(v); ++ log_debug("json_variant_is_normalized: %s", yes_no(normalized)); ++ ++ r = json_variant_normalize(&v); ++ log_debug_errno(r, "json_variant_normalize: %d/%m", r); ++ ++ normalized = json_variant_is_normalized(v); ++ log_debug("json_variant_is_normalized: %s", yes_no(normalized)); ++ assert_se(r < 0 || normalized); ++ ++ double real = json_variant_real(v); ++ log_debug("json_variant_real: %lf", real); ++ ++ bool negative = json_variant_is_negative(v); ++ log_debug("json_variant_is_negative: %s", yes_no(negative)); ++ ++ bool blank = json_variant_is_blank_object(v); ++ log_debug("json_variant_is_blank_object: %s", yes_no(blank)); ++ ++ blank = json_variant_is_blank_array(v); ++ log_debug("json_variant_is_blank_array: %s", yes_no(blank)); ++ ++ size_t elements = json_variant_elements(v); ++ log_debug("json_variant_elements: %zu", elements); ++ ++ for (size_t i = 0; i <= elements + 2; i++) ++ (void) json_variant_by_index(v, i); ++ ++ assert_se(json_variant_equal(v, v)); ++ assert_se(!json_variant_equal(v, NULL)); ++ assert_se(!json_variant_equal(NULL, v)); ++ ++ bool sensitive = json_variant_is_sensitive(v); ++ log_debug("json_variant_is_sensitive: %s", yes_no(sensitive)); ++ ++ json_variant_sensitive(v); ++ ++ sensitive = json_variant_is_sensitive(v); ++ log_debug("json_variant_is_sensitive: %s", yes_no(sensitive)); ++ ++ const char *source; ++ unsigned line, column; ++ assert_se(json_variant_get_source(v, &source, &line, &column) == 0); ++ log_debug("json_variant_get_source: %s:%u:%u", source ?: "-", line, column); ++ ++ r = json_variant_set_field_string(&v, "a", "string-a"); ++ log_debug_errno(r, "json_set_field_string: %d/%m", r); ++ ++ r = json_variant_set_field_integer(&v, "b", -12345); ++ log_debug_errno(r, "json_set_field_integer: %d/%m", r); ++ ++ r = json_variant_set_field_unsigned(&v, "c", 12345); ++ log_debug_errno(r, "json_set_field_unsigned: %d/%m", r); ++ ++ r = json_variant_set_field_boolean(&v, "d", false); ++ log_debug_errno(r, "json_set_field_boolean: %d/%m", r); ++ ++ r = json_variant_set_field_strv(&v, "e", STRV_MAKE("e-1", "e-2", "e-3")); ++ log_debug_errno(r, "json_set_field_strv: %d/%m", r); ++ ++ r = json_variant_filter(&v, STRV_MAKE("a", "b", "c", "d", "e")); ++ log_debug_errno(r, "json_variant_filter: %d/%m", r); ++ ++ // TODO: json_variant_merge(&v, …); ++ // TODO: json_variant_append_array(&v, …); + return 0; + } diff --git a/SOURCES/0108-shared-json-wrap-long-comments.patch b/SOURCES/0108-shared-json-wrap-long-comments.patch new file mode 100644 index 0000000..7e1a8d0 --- /dev/null +++ b/SOURCES/0108-shared-json-wrap-long-comments.patch @@ -0,0 +1,106 @@ +From eb01fd30cb625e90d5620b3ca31ca6474e1b0ac0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 13:37:35 +0200 +Subject: [PATCH] shared/json: wrap long comments + +(cherry picked from commit bac06497feda9eb8c485243f2e05a7f7c112616c) +Related: #2087652 +--- + src/shared/json.c | 35 +++++++++++++++++------------------ + 1 file changed, 17 insertions(+), 18 deletions(-) + +diff --git a/src/shared/json.c b/src/shared/json.c +index d35874f8e3..ea1291e21b 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -273,8 +273,8 @@ static JsonVariant *json_variant_formalize(JsonVariant *v) { + + static JsonVariant *json_variant_conservative_formalize(JsonVariant *v) { + +- /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location attached to +- * it, in order not to lose context */ ++ /* Much like json_variant_formalize(), but won't simplify if the variant has a source/line location ++ * attached to it, in order not to lose context */ + + if (!v) + return NULL; +@@ -546,7 +546,7 @@ int json_variant_new_array(JsonVariant **ret, JsonVariant **array, size_t n) { + + for (v->n_elements = 0; v->n_elements < n; v->n_elements++) { + JsonVariant *w = v + 1 + v->n_elements, +- *c = array[v->n_elements]; ++ *c = array[v->n_elements]; + uint16_t d; + + d = json_variant_depth(c); +@@ -690,7 +690,7 @@ int json_variant_new_object(JsonVariant **ret, JsonVariant **array, size_t n) { + + for (v->n_elements = 0; v->n_elements < n; v->n_elements++) { + JsonVariant *w = v + 1 + v->n_elements, +- *c = array[v->n_elements]; ++ *c = array[v->n_elements]; + uint16_t d; + + if ((v->n_elements & 1) == 0) { +@@ -731,7 +731,6 @@ int json_variant_new_object(JsonVariant **ret, JsonVariant **array, size_t n) { + } + + static size_t json_variant_size(JsonVariant* v) { +- + if (!json_variant_is_regular(v)) + return 0; + +@@ -2253,8 +2252,9 @@ static int json_variant_set_source(JsonVariant **v, JsonSource *source, unsigned + + assert(v); + +- /* Patch in source and line/column number. Tries to do this in-place if the caller is the sole referencer of +- * the object. If not, allocates a new object, possibly a surrogate for the original one */ ++ /* Patch in source and line/column number. Tries to do this in-place if the caller is the sole ++ * referencer of the object. If not, allocates a new object, possibly a surrogate for the original ++ * one */ + + if (!*v) + return 0; +@@ -3731,10 +3731,10 @@ int json_buildv(JsonVariant **ret, va_list ap) { + + stack[n_stack++] = (JsonStack) { + .expect = EXPECT_OBJECT_KEY, +- .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* if we shall suppress the +- * new object, then we should +- * also suppress all object +- * members */ ++ .n_suppress = current->n_suppress != 0 ? SIZE_MAX : 0, /* If we shall suppress the ++ * new object, then we should ++ * also suppress all object ++ * members. */ + }; + + break; +@@ -4102,9 +4102,9 @@ int json_buildv(JsonVariant **ret, va_list ap) { + current->elements[current->n_elements++] = TAKE_PTR(add_more); + } + +- /* If we are supposed to suppress items, let's subtract how many items where generated from that +- * counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number of elements +- * on this stack level */ ++ /* If we are supposed to suppress items, let's subtract how many items where generated from ++ * that counter. Except if the counter is SIZE_MAX, i.e. we shall suppress an infinite number ++ * of elements on this stack level */ + if (current->n_suppress != SIZE_MAX) { + if (current->n_suppress <= n_subtract) /* Saturated */ + current->n_suppress = 0; +@@ -4696,10 +4696,9 @@ finish: + } + + bool json_variant_is_normalized(JsonVariant *v) { +- +- /* For now, let's consider anything containing numbers not expressible as integers as +- * non-normalized. That's because we cannot sensibly compare them due to accuracy issues, nor even +- * store them if they are too large. */ ++ /* For now, let's consider anything containing numbers not expressible as integers as non-normalized. ++ * That's because we cannot sensibly compare them due to accuracy issues, nor even store them if they ++ * are too large. */ + if (json_variant_is_real(v) && !json_variant_is_integer(v) && !json_variant_is_unsigned(v)) + return false; + diff --git a/SOURCES/0109-shared-json-fix-memory-leak-on-failed-normalization.patch b/SOURCES/0109-shared-json-fix-memory-leak-on-failed-normalization.patch new file mode 100644 index 0000000..a1caeab --- /dev/null +++ b/SOURCES/0109-shared-json-fix-memory-leak-on-failed-normalization.patch @@ -0,0 +1,42 @@ +From 0c5992cdb85ac6d9d14b95e77f03797600e87667 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 14:28:36 +0200 +Subject: [PATCH] shared/json: fix memory leak on failed normalization + +We need to increase the counter immediately after taking the ref, +otherwise we may not unref it properly if we fail before incrementing. + +(cherry picked from commit 7e4be6a5845f983a299932d4ccb2c4349cf8dd52) +Related: #2087652 +--- + src/shared/json.c | 5 +++-- + test/fuzz/fuzz-json/leak-normalize-fail | 1 + + 2 files changed, 4 insertions(+), 2 deletions(-) + create mode 100644 test/fuzz/fuzz-json/leak-normalize-fail + +diff --git a/src/shared/json.c b/src/shared/json.c +index ea1291e21b..fe05657dad 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -4655,10 +4655,11 @@ int json_variant_normalize(JsonVariant **v) { + if (!a) + return -ENOMEM; + +- for (i = 0; i < m; i++) { ++ for (i = 0; i < m; ) { + a[i] = json_variant_ref(json_variant_by_index(*v, i)); ++ i++; + +- r = json_variant_normalize(a + i); ++ r = json_variant_normalize(&a[i-1]); + if (r < 0) + goto finish; + } +diff --git a/test/fuzz/fuzz-json/leak-normalize-fail b/test/fuzz/fuzz-json/leak-normalize-fail +new file mode 100644 +index 0000000000..b247ccd199 +--- /dev/null ++++ b/test/fuzz/fuzz-json/leak-normalize-fail +@@ -0,0 +1 @@ ++[7E73] +\ No newline at end of file diff --git a/SOURCES/0110-shared-json-add-helper-to-ref-first-unref-second.patch b/SOURCES/0110-shared-json-add-helper-to-ref-first-unref-second.patch new file mode 100644 index 0000000..843a505 --- /dev/null +++ b/SOURCES/0110-shared-json-add-helper-to-ref-first-unref-second.patch @@ -0,0 +1,141 @@ +From fb195ccc27d1643d4152ee874144c36c0104c56d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 15:10:36 +0200 +Subject: [PATCH] shared/json: add helper to ref first, unref second + +This normally wouldn't happen, but if some of those places were called +with lhs and rhs being the same object, we could unref the last ref first, +and then try to take the ref again. It's easier to be safe, and with the +helper we save some lines too. + +(cherry picked from commit ce913e0ec4c97651c7c1509b72fb81ee61d80c6a) +Related: #2087652 +--- + src/shared/json.c | 36 ++++++++++-------------------------- + src/shared/json.h | 8 ++++++++ + 2 files changed, 18 insertions(+), 26 deletions(-) + +diff --git a/src/shared/json.c b/src/shared/json.c +index fe05657dad..bb2363fd98 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -1847,9 +1847,7 @@ int json_variant_filter(JsonVariant **v, char **to_remove) { + return r; + + json_variant_propagate_sensitive(*v, w); +- +- json_variant_unref(*v); +- *v = TAKE_PTR(w); ++ JSON_VARIANT_REPLACE(*v, TAKE_PTR(w)); + + return (int) n; + } +@@ -1918,9 +1916,7 @@ int json_variant_set_field(JsonVariant **v, const char *field, JsonVariant *valu + return r; + + json_variant_propagate_sensitive(*v, w); +- +- json_variant_unref(*v); +- *v = TAKE_PTR(w); ++ JSON_VARIANT_REPLACE(*v, TAKE_PTR(w)); + + return 1; + } +@@ -2001,8 +1997,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) { + return 0; /* nothing to do */ + + if (v_blank) { +- json_variant_unref(*v); +- *v = json_variant_ref(m); ++ JSON_VARIANT_REPLACE(*v, json_variant_ref(m)); + return 1; + } + +@@ -2039,9 +2034,7 @@ int json_variant_merge(JsonVariant **v, JsonVariant *m) { + + json_variant_propagate_sensitive(*v, w); + json_variant_propagate_sensitive(m, w); +- +- json_variant_unref(*v); +- *v = TAKE_PTR(w); ++ JSON_VARIANT_REPLACE(*v, TAKE_PTR(w)); + + return 1; + } +@@ -2081,9 +2074,7 @@ int json_variant_append_array(JsonVariant **v, JsonVariant *element) { + return r; + + json_variant_propagate_sensitive(*v, nv); +- +- json_variant_unref(*v); +- *v = TAKE_PTR(nv); ++ JSON_VARIANT_REPLACE(*v, TAKE_PTR(nv)); + + return 0; + } +@@ -2297,8 +2288,7 @@ static int json_variant_set_source(JsonVariant **v, JsonSource *source, unsigned + w->line = line; + w->column = column; + +- json_variant_unref(*v); +- *v = w; ++ JSON_VARIANT_REPLACE(*v, w); + + return 1; + } +@@ -4499,14 +4489,10 @@ int json_dispatch_strv(const char *name, JsonVariant *variant, JsonDispatchFlags + } + + int json_dispatch_variant(const char *name, JsonVariant *variant, JsonDispatchFlags flags, void *userdata) { +- JsonVariant **p = userdata; +- ++ JsonVariant **p = ASSERT_PTR(userdata); + assert(variant); +- assert(p); +- +- json_variant_unref(*p); +- *p = json_variant_ref(variant); + ++ JSON_VARIANT_REPLACE(*p, json_variant_ref(variant)); + return 0; + } + +@@ -4628,8 +4614,7 @@ int json_variant_sort(JsonVariant **v) { + if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */ + return -ENOTUNIQ; + +- json_variant_unref(*v); +- *v = n; ++ JSON_VARIANT_REPLACE(*v, n); + + return 1; + } +@@ -4684,8 +4669,7 @@ int json_variant_normalize(JsonVariant **v) { + goto finish; + } + +- json_variant_unref(*v); +- *v = n; ++ JSON_VARIANT_REPLACE(*v, n); + + r = 1; + +diff --git a/src/shared/json.h b/src/shared/json.h +index 8760354b66..dd73c1e497 100644 +--- a/src/shared/json.h ++++ b/src/shared/json.h +@@ -82,6 +82,14 @@ JsonVariant *json_variant_ref(JsonVariant *v); + JsonVariant *json_variant_unref(JsonVariant *v); + void json_variant_unref_many(JsonVariant **array, size_t n); + ++#define JSON_VARIANT_REPLACE(v, q) \ ++ do { \ ++ typeof(v)* _v = &(v); \ ++ typeof(q) _q = (q); \ ++ json_variant_unref(*_v); \ ++ *_v = _q; \ ++ } while(0) ++ + DEFINE_TRIVIAL_CLEANUP_FUNC(JsonVariant *, json_variant_unref); + + const char *json_variant_string(JsonVariant *v); diff --git a/SOURCES/0111-basic-alloc-util-remove-unnecessary-parens.patch b/SOURCES/0111-basic-alloc-util-remove-unnecessary-parens.patch new file mode 100644 index 0000000..4abdc43 --- /dev/null +++ b/SOURCES/0111-basic-alloc-util-remove-unnecessary-parens.patch @@ -0,0 +1,28 @@ +From 965a99f34a185bb3b3aa5ac0e9e5d5eb05d0fac0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 15:11:20 +0200 +Subject: [PATCH] basic/alloc-util: remove unnecessary parens + +Those symbols are not macros anymore, so we can drop parens. + +(cherry picked from commit 96d651a22bf62e63080e489cb45e82bead11aa5d) +Related: #2087652 +--- + src/basic/alloc-util.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/basic/alloc-util.h b/src/basic/alloc-util.h +index 65d5175619..f57bcbdbcd 100644 +--- a/src/basic/alloc-util.h ++++ b/src/basic/alloc-util.h +@@ -54,8 +54,8 @@ typedef void (*free_func_t)(void *p); + typeof(a)* _a = &(a); \ + typeof(b)* _b = &(b); \ + free(*_a); \ +- (*_a) = (*_b); \ +- (*_b) = NULL; \ ++ *_a = *_b; \ ++ *_b = NULL; \ + 0; \ + }) + diff --git a/SOURCES/0112-fuzz-json-also-try-self-merge-operations.patch b/SOURCES/0112-fuzz-json-also-try-self-merge-operations.patch new file mode 100644 index 0000000..7f8627e --- /dev/null +++ b/SOURCES/0112-fuzz-json-also-try-self-merge-operations.patch @@ -0,0 +1,32 @@ +From 03795a6ae06088bc434906f3ef7222acfbdbe8cb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 9 May 2022 15:14:33 +0200 +Subject: [PATCH] fuzz-json: also try self-merge operations + +This might even work ;) + +(cherry picked from commit dbd27c6d2830aeb7173933d1f4a9a07457e4092d) +Related: #2087652 +--- + src/fuzz/fuzz-json.c | 9 +++++++-- + 1 file changed, 7 insertions(+), 2 deletions(-) + +diff --git a/src/fuzz/fuzz-json.c b/src/fuzz/fuzz-json.c +index 995a0265ba..c393fcf394 100644 +--- a/src/fuzz/fuzz-json.c ++++ b/src/fuzz/fuzz-json.c +@@ -105,7 +105,12 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + r = json_variant_filter(&v, STRV_MAKE("a", "b", "c", "d", "e")); + log_debug_errno(r, "json_variant_filter: %d/%m", r); + +- // TODO: json_variant_merge(&v, …); +- // TODO: json_variant_append_array(&v, …); ++ /* I assume we can merge v with itself… */ ++ r = json_variant_merge(&v, v); ++ log_debug_errno(r, "json_variant_merge: %d/%m", r); ++ ++ r = json_variant_append_array(&v, v); ++ log_debug_errno(r, "json_variant_append_array: %d/%m", r); ++ + return 0; + } diff --git a/SOURCES/0113-shared-json-fix-another-memleak-in-normalization.patch b/SOURCES/0113-shared-json-fix-another-memleak-in-normalization.patch new file mode 100644 index 0000000..df1a30e --- /dev/null +++ b/SOURCES/0113-shared-json-fix-another-memleak-in-normalization.patch @@ -0,0 +1,43 @@ +From 6e0d847273e6ef6ee1011fb1c8b6689e64a94276 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 10 May 2022 09:05:43 +0200 +Subject: [PATCH] shared/json: fix another memleak in normalization + +(cherry picked from commit 3b6ce05537cd3544a15073f920347cabd7a39450) +Related: #2087652 +--- + src/shared/json.c | 4 ++-- + test/fuzz/fuzz-json/leak-normalize-object | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + create mode 100644 test/fuzz/fuzz-json/leak-normalize-object + +diff --git a/src/shared/json.c b/src/shared/json.c +index bb2363fd98..06ef556233 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -4621,7 +4621,7 @@ int json_variant_sort(JsonVariant **v) { + + int json_variant_normalize(JsonVariant **v) { + _cleanup_free_ JsonVariant **a = NULL; +- JsonVariant *n = NULL; ++ _cleanup_(json_variant_unrefp) JsonVariant *n = NULL; + size_t i, m; + int r; + +@@ -4669,7 +4669,7 @@ int json_variant_normalize(JsonVariant **v) { + goto finish; + } + +- JSON_VARIANT_REPLACE(*v, n); ++ JSON_VARIANT_REPLACE(*v, TAKE_PTR(n)); + + r = 1; + +diff --git a/test/fuzz/fuzz-json/leak-normalize-object b/test/fuzz/fuzz-json/leak-normalize-object +new file mode 100644 +index 0000000000..0a8caa426c +--- /dev/null ++++ b/test/fuzz/fuzz-json/leak-normalize-object +@@ -0,0 +1 @@ ++[7,7,7,7,{"":7,"":7,"^t":7,"-":7},2777,7,7,7,3] +\ No newline at end of file diff --git a/SOURCES/0114-shared-json-fix-memleak-in-sort.patch b/SOURCES/0114-shared-json-fix-memleak-in-sort.patch new file mode 100644 index 0000000..e8f0602 --- /dev/null +++ b/SOURCES/0114-shared-json-fix-memleak-in-sort.patch @@ -0,0 +1,43 @@ +From 51bbb027e93637f5821215ebb067454ad6620190 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 10 May 2022 10:51:43 +0200 +Subject: [PATCH] shared/json: fix memleak in sort + +(cherry picked from commit 99b1145aae682ddd7554c7e3ac5ebf778e88f87d) +Related: #2087652 +--- + src/shared/json.c | 4 ++-- + test/fuzz/fuzz-json/leak-sort | 1 + + 2 files changed, 3 insertions(+), 2 deletions(-) + create mode 100644 test/fuzz/fuzz-json/leak-sort + +diff --git a/src/shared/json.c b/src/shared/json.c +index 06ef556233..6d23bdf4f9 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -4581,7 +4581,7 @@ static int json_cmp_strings(const void *x, const void *y) { + + int json_variant_sort(JsonVariant **v) { + _cleanup_free_ JsonVariant **a = NULL; +- JsonVariant *n = NULL; ++ _cleanup_(json_variant_unrefp) JsonVariant *n = NULL; + size_t m; + int r; + +@@ -4614,7 +4614,7 @@ int json_variant_sort(JsonVariant **v) { + if (!n->sorted) /* Check if this worked. This will fail if there are multiple identical keys used. */ + return -ENOTUNIQ; + +- JSON_VARIANT_REPLACE(*v, n); ++ JSON_VARIANT_REPLACE(*v, TAKE_PTR(n)); + + return 1; + } +diff --git a/test/fuzz/fuzz-json/leak-sort b/test/fuzz/fuzz-json/leak-sort +new file mode 100644 +index 0000000000..f8446dbdc7 +--- /dev/null ++++ b/test/fuzz/fuzz-json/leak-sort +@@ -0,0 +1 @@ ++{"":2,"":6,"-":7} +\ No newline at end of file diff --git a/SOURCES/0115-execute-fix-resource-leak.patch b/SOURCES/0115-execute-fix-resource-leak.patch new file mode 100644 index 0000000..194c836 --- /dev/null +++ b/SOURCES/0115-execute-fix-resource-leak.patch @@ -0,0 +1,26 @@ +From 08b6aa9dfbe9476ad71b48edd0f4454511d9ac19 Mon Sep 17 00:00:00 2001 +From: Shreenidhi Shedi +Date: Sat, 4 Jun 2022 15:24:08 +0530 +Subject: [PATCH] execute: fix resource leak + +CID#1431998 + +(cherry picked from commit 41abd7f6dfe09ccc78cdbdcdec3bdcc10be40faf) +Related: #2087652 +--- + src/core/execute.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/execute.c b/src/core/execute.c +index 2ab65e9cfe..8a1d070e26 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -3331,7 +3331,7 @@ static int apply_mount_namespace( + /* Symlinks for exec dirs are set up after other mounts, before they are made read-only. */ + r = compile_symlinks(context, params, &symlinks); + if (r < 0) +- return r; ++ goto finalize; + + needs_sandboxing = (params->flags & EXEC_APPLY_SANDBOXING) && !(command_flags & EXEC_COMMAND_FULLY_PRIVILEGED); + if (needs_sandboxing) { diff --git a/SOURCES/0116-tests-ignore-dbus-broker-launcher.patch b/SOURCES/0116-tests-ignore-dbus-broker-launcher.patch new file mode 100644 index 0000000..e97f951 --- /dev/null +++ b/SOURCES/0116-tests-ignore-dbus-broker-launcher.patch @@ -0,0 +1,31 @@ +From ae27d5b4be42cd98b3db299d161a2e3ea77eb604 Mon Sep 17 00:00:00 2001 +From: Evgeny Vereshchagin +Date: Wed, 11 May 2022 22:32:32 +0000 +Subject: [PATCH] tests: ignore dbus-broker-launcher + +There are memory leaks there https://github.com/bus1/dbus-broker/issues/289 +and it crashes from time to time +https://github.com/matusmarhefka/dfuzzer/issues/20#issuecomment-1114097840 +so let's just skip it by analogy with dbus-daemon to avoid +reports that have nothing to do with systemd itself. + +It's kind of a part of https://github.com/systemd/systemd/pull/22547 + +(cherry picked from commit d0880faa5dda495c7c77425697b82a94b4e68bf6) +Related: #2087652 +--- + test/test-functions | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/test-functions b/test/test-functions +index a299f5ff1f..7c37d05610 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1328,6 +1328,7 @@ check_asan_reports() { + BEGIN { + %services_to_ignore = ( + "dbus-daemon" => undef, ++ "dbus-broker-launch" => undef, + ); + } + print $2 if /\s(\S*)\[(\d+)\]:\s*SUMMARY:\s+\w+Sanitizer/ && !exists $services_to_ignore{$1}' diff --git a/SOURCES/0117-core-timer-fix-memleak.patch b/SOURCES/0117-core-timer-fix-memleak.patch new file mode 100644 index 0000000..3e58e63 --- /dev/null +++ b/SOURCES/0117-core-timer-fix-memleak.patch @@ -0,0 +1,59 @@ +From d35c27e44abcde252abddf369762dee8da309903 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 10 May 2022 14:09:24 +0900 +Subject: [PATCH] core/timer: fix memleak + +Fixes #23326. + +(cherry picked from commit d3ab7b8078944db28bc621f43dd942a3c878fffb) +Related: #2087652 +--- + src/core/timer.c | 11 ++++++----- + 1 file changed, 6 insertions(+), 5 deletions(-) + +diff --git a/src/core/timer.c b/src/core/timer.c +index a13b864741..0dc49dd46b 100644 +--- a/src/core/timer.c ++++ b/src/core/timer.c +@@ -135,6 +135,7 @@ static int timer_add_trigger_dependencies(Timer *t) { + } + + static int timer_setup_persistent(Timer *t) { ++ _cleanup_free_ char *stamp_path = NULL; + int r; + + assert(t); +@@ -148,13 +149,13 @@ static int timer_setup_persistent(Timer *t) { + if (r < 0) + return r; + +- t->stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id); ++ stamp_path = strjoin("/var/lib/systemd/timers/stamp-", UNIT(t)->id); + } else { + const char *e; + + e = getenv("XDG_DATA_HOME"); + if (e) +- t->stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id); ++ stamp_path = strjoin(e, "/systemd/timers/stamp-", UNIT(t)->id); + else { + + _cleanup_free_ char *h = NULL; +@@ -163,14 +164,14 @@ static int timer_setup_persistent(Timer *t) { + if (r < 0) + return log_unit_error_errno(UNIT(t), r, "Failed to determine home directory: %m"); + +- t->stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id); ++ stamp_path = strjoin(h, "/.local/share/systemd/timers/stamp-", UNIT(t)->id); + } + } + +- if (!t->stamp_path) ++ if (!stamp_path) + return log_oom(); + +- return 0; ++ return free_and_replace(t->stamp_path, stamp_path); + } + + static uint64_t timer_get_fixed_delay_hash(Timer *t) { diff --git a/SOURCES/0118-timedatectl-fix-a-memory-leak.patch b/SOURCES/0118-timedatectl-fix-a-memory-leak.patch new file mode 100644 index 0000000..68e40de --- /dev/null +++ b/SOURCES/0118-timedatectl-fix-a-memory-leak.patch @@ -0,0 +1,44 @@ +From 9c166afe17888b08d1e269cfd83a31838d601534 Mon Sep 17 00:00:00 2001 +From: Evgeny Vereshchagin +Date: Wed, 4 May 2022 11:35:19 +0000 +Subject: [PATCH] timedatectl: fix a memory leak + +``` +timedatectl list-timezones --no-pager +... +==164329==ERROR: LeakSanitizer: detected memory leaks + +Direct leak of 8192 byte(s) in 1 object(s) allocated from: + #0 0x7fe8a74b6f8c in reallocarray (/lib64/libasan.so.6+0xaef8c) + #1 0x7fe8a63485dc in strv_push ../src/basic/strv.c:419 + #2 0x7fe8a6349419 in strv_consume ../src/basic/strv.c:490 + #3 0x7fe8a634958d in strv_extend ../src/basic/strv.c:542 + #4 0x7fe8a643d787 in bus_message_read_strv_extend ../src/libsystemd/sd-bus/bus-message.c:5606 + #5 0x7fe8a643db9d in sd_bus_message_read_strv ../src/libsystemd/sd-bus/bus-message.c:5628 + #6 0x4085fb in list_timezones ../src/timedate/timedatectl.c:314 + #7 0x7fe8a61ef3e1 in dispatch_verb ../src/shared/verbs.c:103 + #8 0x410f91 in timedatectl_main ../src/timedate/timedatectl.c:1025 + #9 0x41111c in run ../src/timedate/timedatectl.c:1043 + #10 0x411242 in main ../src/timedate/timedatectl.c:1046 + #11 0x7fe8a489df1f in __libc_start_call_main (/lib64/libc.so.6+0x40f1f) +``` + +(cherry picked from commit a2e37d52312806b1847800df2358e61276cda052) +Related: #2087652 +--- + src/timedate/timedatectl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c +index 75ca6195da..31909064cf 100644 +--- a/src/timedate/timedatectl.c ++++ b/src/timedate/timedatectl.c +@@ -304,7 +304,7 @@ static int list_timezones(int argc, char **argv, void *userdata) { + sd_bus *bus = userdata; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; + int r; +- char** zones; ++ _cleanup_strv_free_ char **zones = NULL; + + r = bus_call_method(bus, bus_timedate, "ListTimezones", &error, &reply, NULL); + if (r < 0) diff --git a/SOURCES/0119-test-fix-file-descriptor-leak-in-test-psi-util.patch b/SOURCES/0119-test-fix-file-descriptor-leak-in-test-psi-util.patch new file mode 100644 index 0000000..bd57db6 --- /dev/null +++ b/SOURCES/0119-test-fix-file-descriptor-leak-in-test-psi-util.patch @@ -0,0 +1,42 @@ +From 12274971840068b3effb7a933d62f1b5fe8009e1 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 22 Feb 2022 21:46:41 +0900 +Subject: [PATCH] test: fix file descriptor leak in test-psi-util + +Fixes an issue reported in #22576. + +(cherry picked from commit be99883e131ef422f8278ec1d099520996a78bb0) +Related: #2087652 +--- + src/test/test-psi-util.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/test/test-psi-util.c b/src/test/test-psi-util.c +index ed465b807e..111671c5a9 100644 +--- a/src/test/test-psi-util.c ++++ b/src/test/test-psi-util.c +@@ -1,20 +1,23 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" ++#include "fd-util.h" + #include "fileio.h" + #include "fs-util.h" + #include "parse-util.h" + #include "psi-util.h" + #include "tests.h" ++#include "tmpfile-util.h" + + TEST(read_mem_pressure) { + _cleanup_(unlink_tempfilep) char path[] = "/tmp/pressurereadtestXXXXXX"; ++ _cleanup_close_ int fd = -1; + ResourcePressure rp; + + if (geteuid() != 0) + return (void) log_tests_skipped("not root"); + +- assert_se(mkstemp(path)); ++ assert_se((fd = mkostemp_safe(path)) >= 0); + + assert_se(read_resource_pressure("/verylikelynonexistentpath", PRESSURE_TYPE_SOME, &rp) < 0); + assert_se(read_resource_pressure(path, PRESSURE_TYPE_SOME, &rp) < 0); diff --git a/SOURCES/0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch b/SOURCES/0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch new file mode 100644 index 0000000..d670657 --- /dev/null +++ b/SOURCES/0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch @@ -0,0 +1,36 @@ +From 936e8cd5aff044832c98e5a6a97c9f057f44b476 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 22 Feb 2022 21:44:58 +0900 +Subject: [PATCH] test: fix file descriptor leak in test-tmpfiles.c + +Also fixes a typo in assertion. + +Fixes an issure reported in #22576. + +(cherry picked from commit 1da5325d19dee654326e5fa2f61262e5e0a40fff) +Related: #2087652 +--- + src/test/test-tmpfiles.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/test/test-tmpfiles.c b/src/test/test-tmpfiles.c +index 99243eb77a..f26701767f 100644 +--- a/src/test/test-tmpfiles.c ++++ b/src/test/test-tmpfiles.c +@@ -35,7 +35,7 @@ TEST(tmpfiles) { + assert_se(endswith(ans, " (deleted)")); + + fd2 = mkostemp_safe(pattern); +- assert_se(fd >= 0); ++ assert_se(fd2 >= 0); + assert_se(unlink(pattern) == 0); + + assert_se(asprintf(&cmd2, "ls -l /proc/"PID_FMT"/fd/%d", getpid_cached(), fd2) > 0); +@@ -47,6 +47,7 @@ TEST(tmpfiles) { + pattern = strjoina(p, "/tmpfiles-test"); + assert_se(tempfn_random(pattern, NULL, &d) >= 0); + ++ fd = safe_close(fd); + fd = open_tmpfile_linkable(d, O_RDWR|O_CLOEXEC, &tmp); + assert_se(fd >= 0); + assert_se(write(fd, "foobar\n", 7) == 7); diff --git a/SOURCES/0121-test-fix-file-descriptor-leak-in-test-fs-util.patch b/SOURCES/0121-test-fix-file-descriptor-leak-in-test-fs-util.patch new file mode 100644 index 0000000..8f2a2be --- /dev/null +++ b/SOURCES/0121-test-fix-file-descriptor-leak-in-test-fs-util.patch @@ -0,0 +1,46 @@ +From 3ca37c58cb3ff022e029b28539fd2e3b208802fd Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 22 Feb 2022 21:42:22 +0900 +Subject: [PATCH] test: fix file descriptor leak in test-fs-util + +Fixes an issue reported in #22576. + +(cherry picked from commit 19962747ca86a25e7102c536380bb2e9d7cfee9a) +Related: #2087652 +--- + src/test/test-fs-util.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c +index 602ce75f98..f53a3ebf59 100644 +--- a/src/test/test-fs-util.c ++++ b/src/test/test-fs-util.c +@@ -29,10 +29,11 @@ static const char *arg_test_dir = NULL; + + TEST(chase_symlinks) { + _cleanup_free_ char *result = NULL; ++ _cleanup_close_ int pfd = -1; + char *temp; + const char *top, *p, *pslash, *q, *qslash; + struct stat st; +- int r, pfd; ++ int r; + + temp = strjoina(arg_test_dir ?: "/tmp", "/test-chase.XXXXXX"); + assert_se(mkdtemp(temp)); +@@ -318,6 +319,7 @@ TEST(chase_symlinks) { + assert_se(fstat(pfd, &st) >= 0); + assert_se(S_ISLNK(st.st_mode)); + result = mfree(result); ++ pfd = safe_close(pfd); + + /* s1 -> s2 -> nonexistent */ + q = strjoina(temp, "/s1"); +@@ -331,6 +333,7 @@ TEST(chase_symlinks) { + assert_se(fstat(pfd, &st) >= 0); + assert_se(S_ISLNK(st.st_mode)); + result = mfree(result); ++ pfd = safe_close(pfd); + + /* Test CHASE_STEP */ + diff --git a/SOURCES/0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch b/SOURCES/0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch new file mode 100644 index 0000000..7b8ce4a --- /dev/null +++ b/SOURCES/0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch @@ -0,0 +1,48 @@ +From 9e37cb1855c8fc1667f7e404376070952c015788 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 22 Feb 2022 21:38:15 +0900 +Subject: [PATCH] test: fix file descriptor leak in test-oomd-util + +Fixes an issue reported in #22576. + +(cherry picked from commit 282696ce52471f5e3c963b9d98dbc89fba3a1fba) +Related: #2087652 +--- + src/oom/test-oomd-util.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/oom/test-oomd-util.c b/src/oom/test-oomd-util.c +index 265e77c0a2..0252ceecd7 100644 +--- a/src/oom/test-oomd-util.c ++++ b/src/oom/test-oomd-util.c +@@ -5,6 +5,7 @@ + #include "alloc-util.h" + #include "cgroup-setup.h" + #include "cgroup-util.h" ++#include "fd-util.h" + #include "fileio.h" + #include "fs-util.h" + #include "oomd-util.h" +@@ -13,6 +14,7 @@ + #include "string-util.h" + #include "strv.h" + #include "tests.h" ++#include "tmpfile-util.h" + + static int fork_and_sleep(unsigned sleep_min) { + usec_t n, timeout, ts; +@@ -244,12 +246,13 @@ static void test_oomd_update_cgroup_contexts_between_hashmaps(void) { + + static void test_oomd_system_context_acquire(void) { + _cleanup_(unlink_tempfilep) char path[] = "/oomdgetsysctxtestXXXXXX"; ++ _cleanup_close_ int fd = -1; + OomdSystemContext ctx; + + if (geteuid() != 0) + return (void) log_tests_skipped("not root"); + +- assert_se(mkstemp(path)); ++ assert_se((fd = mkostemp_safe(path)) >= 0); + + assert_se(oomd_system_context_acquire("/verylikelynonexistentpath", &ctx) == -ENOENT); + diff --git a/SOURCES/0123-test-fix-file-descriptor-leak-in-test-catalog.patch b/SOURCES/0123-test-fix-file-descriptor-leak-in-test-catalog.patch new file mode 100644 index 0000000..58b7423 --- /dev/null +++ b/SOURCES/0123-test-fix-file-descriptor-leak-in-test-catalog.patch @@ -0,0 +1,34 @@ +From d947339b49eb7935ce282e808a7e75a6098d088a Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 22 Feb 2022 21:11:51 +0900 +Subject: [PATCH] test: fix file descriptor leak in test-catalog + +Fixes an issue reported in #22576. + +(cherry picked from commit 62d4b3b36e9aba9e605ba042a75c374155b6e18b) +Related: #2087652 +--- + src/libsystemd/sd-journal/test-catalog.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-journal/test-catalog.c b/src/libsystemd/sd-journal/test-catalog.c +index 316c3b1634..ad06221175 100644 +--- a/src/libsystemd/sd-journal/test-catalog.c ++++ b/src/libsystemd/sd-journal/test-catalog.c +@@ -196,6 +196,7 @@ static void test_catalog_file_lang(void) { + + int main(int argc, char *argv[]) { + _cleanup_(unlink_tempfilep) char database[] = "/tmp/test-catalog.XXXXXX"; ++ _cleanup_close_ int fd = -1; + _cleanup_free_ char *text = NULL; + int r; + +@@ -218,7 +219,7 @@ int main(int argc, char *argv[]) { + test_catalog_import_merge(); + test_catalog_import_merge_no_body(); + +- assert_se(mkostemp_safe(database) >= 0); ++ assert_se((fd = mkostemp_safe(database)) >= 0); + + test_catalog_update(database); + diff --git a/SOURCES/0124-test-make-masking-of-supplementary-services-configur.patch b/SOURCES/0124-test-make-masking-of-supplementary-services-configur.patch new file mode 100644 index 0000000..8464645 --- /dev/null +++ b/SOURCES/0124-test-make-masking-of-supplementary-services-configur.patch @@ -0,0 +1,49 @@ +From 4197469aa26e8e3e61c859341002e37bde751ada Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 16 Feb 2022 20:29:14 +0100 +Subject: [PATCH] test: make masking of supplementary services configurable + +(cherry picked from commit 508a7f04b345878dcd8365ff0ded5f87b18d75fa) + +Related: #2087652 +--- + test/TEST-01-BASIC/test.sh | 1 + + test/test-functions | 6 +++--- + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/test/TEST-01-BASIC/test.sh b/test/TEST-01-BASIC/test.sh +index a790cd78ac..cc6d0651c1 100755 +--- a/test/TEST-01-BASIC/test.sh ++++ b/test/TEST-01-BASIC/test.sh +@@ -6,6 +6,7 @@ TEST_DESCRIPTION="Basic systemd setup" + IMAGE_NAME="basic" + RUN_IN_UNPRIVILEGED_CONTAINER=${RUN_IN_UNPRIVILEGED_CONTAINER:-yes} + TEST_REQUIRE_INSTALL_TESTS=0 ++TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0 + + # shellcheck source=test/test-functions + . "${TEST_BASE_DIR:?}/test-functions" +diff --git a/test/test-functions b/test/test-functions +index 7c37d05610..44f465c914 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -40,6 +40,7 @@ IMAGE_NAME=${IMAGE_NAME:-default} + STRIP_BINARIES="${STRIP_BINARIES:-yes}" + TEST_REQUIRE_INSTALL_TESTS="${TEST_REQUIRE_INSTALL_TESTS:-1}" + TEST_PARALLELIZE="${TEST_PARALLELIZE:-0}" ++TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED="${TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED:-1}" + LOOPDEV= + + # Simple wrapper to unify boolean checks. +@@ -2787,9 +2788,8 @@ test_setup() { + fi + + mount_initdir +- # We want to test all services in TEST-01-BASIC, but mask them in +- # all other tests +- if [[ "${TESTID:?}" != "01" ]]; then ++ ++ if get_bool "${TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED}"; then + dinfo "Masking supporting services" + mask_supporting_services + fi diff --git a/SOURCES/0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch b/SOURCES/0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch new file mode 100644 index 0000000..1c63c5a --- /dev/null +++ b/SOURCES/0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch @@ -0,0 +1,186 @@ +From 25338c37915521876c84bca196de50d73c3c17ea Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Mon, 13 Dec 2021 20:50:28 +0100 +Subject: [PATCH] test: fuzz our dbus interfaces with dfuzzer + +(cherry picked from commit 354b3364aa63620a0f732bb8a6fe9332a4f550e4) + +Related: #2087652 +--- + test/TEST-21-DFUZZER/Makefile | 1 + + test/TEST-21-DFUZZER/test.sh | 24 +++++++++ + test/test-functions | 1 + + test/units/testsuite-21.service | 10 ++++ + test/units/testsuite-21.sh | 94 +++++++++++++++++++++++++++++++++ + 5 files changed, 130 insertions(+) + create mode 120000 test/TEST-21-DFUZZER/Makefile + create mode 100755 test/TEST-21-DFUZZER/test.sh + create mode 100644 test/units/testsuite-21.service + create mode 100755 test/units/testsuite-21.sh + +diff --git a/test/TEST-21-DFUZZER/Makefile b/test/TEST-21-DFUZZER/Makefile +new file mode 120000 +index 0000000000..e9f93b1104 +--- /dev/null ++++ b/test/TEST-21-DFUZZER/Makefile +@@ -0,0 +1 @@ ++../TEST-01-BASIC/Makefile +\ No newline at end of file +diff --git a/test/TEST-21-DFUZZER/test.sh b/test/TEST-21-DFUZZER/test.sh +new file mode 100755 +index 0000000000..ecc04e368c +--- /dev/null ++++ b/test/TEST-21-DFUZZER/test.sh +@@ -0,0 +1,24 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -e ++ ++TEST_DESCRIPTION="Fuzz our D-Bus interfaces with dfuzzer" ++TEST_NO_NSPAWN=1 ++TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0 ++QEMU_TIMEOUT="${QEMU_TIMEOUT:-1800}" ++ ++# shellcheck source=test/test-functions ++. "${TEST_BASE_DIR:?}/test-functions" ++ ++command -v dfuzzer >/dev/null || exit 0 ++ ++test_append_files() { ++ local workspace="${1:?}" ++ ++ image_install dfuzzer /etc/dfuzzer.conf ++ ++ # Enable all systemd-related services, including the D-Bus ones ++ "$SYSTEMCTL" --root="${workspace:?}" preset-all ++} ++ ++do_test "$@" +diff --git a/test/test-functions b/test/test-functions +index 44f465c914..079a7249e4 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -99,6 +99,7 @@ SYSTEMD_JOURNAL_REMOTE="${SYSTEMD_JOURNAL_REMOTE:-$(command -v "$BUILD_DIR/syste + SYSTEMD="${SYSTEMD:-$(command -v "$BUILD_DIR/systemd" || command -v "$ROOTLIBDIR/systemd")}" + SYSTEMD_NSPAWN="${SYSTEMD_NSPAWN:-$(command -v "$BUILD_DIR/systemd-nspawn" || command -v systemd-nspawn)}" + JOURNALCTL="${JOURNALCTL:-$(command -v "$BUILD_DIR/journalctl" || command -v journalctl)}" ++SYSTEMCTL="${SYSTEMCTL:-$(command -v "$BUILD_DIR/systemctl" || command -v systemctl)}" + + TESTFILE="${BASH_SOURCE[1]}" + if [ -z "$TESTFILE" ]; then +diff --git a/test/units/testsuite-21.service b/test/units/testsuite-21.service +new file mode 100644 +index 0000000000..a5f77d07b4 +--- /dev/null ++++ b/test/units/testsuite-21.service +@@ -0,0 +1,10 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++[Unit] ++Description=Fuzz our D-Bus interfaces with dfuzzer ++After=dbus.service multi-user.target ++Wants=dbus.service multi-user.target ++ ++[Service] ++ExecStartPre=rm -f /failed /skipped /testok ++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh ++Type=oneshot +diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh +new file mode 100755 +index 0000000000..43b5fb6f22 +--- /dev/null ++++ b/test/units/testsuite-21.sh +@@ -0,0 +1,94 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -eux ++set -o pipefail ++ ++# Save the end.service state before we start fuzzing, as it might get changed ++# on the fly by one of the fuzzers ++systemctl list-jobs | grep -F 'end.service' && SHUTDOWN_AT_EXIT=1 || SHUTDOWN_AT_EXIT=0 ++ ++at_exit() { ++ # "Safety net" - check for any coredumps which might have not caused dfuzzer ++ # to stop & return an error (we need to do this now before truncating the ++ # journal) ++ # TODO: check fo ASan/UBSan errors ++ local found_cd=0 ++ while read -r exe; do ++ coredumctl info "$exe" ++ found_cd=1 ++ done < <(coredumpctl -F COREDUMP_EXE | sort -u) ++ [[ $found_cd -eq 0 ]] || exit 1 ++ ++ # We have to call the end.service explicitly even if it's specified on ++ # the kernel cmdline via systemd.wants=end.service, since dfuzzer calls ++ # org.freedesktop.systemd1.Manager.ClearJobs() which drops the service ++ # from the queue ++ [[ $SHUTDOWN_AT_EXIT -ne 0 ]] && systemctl start --job-mode=flush end.service ++} ++ ++trap at_exit EXIT ++ ++systemctl log-level info ++ ++# TODO ++# * check for possibly newly introduced buses? ++BUS_LIST=( ++ org.freedesktop.home1 ++ org.freedesktop.hostname1 ++ org.freedesktop.import1 ++ org.freedesktop.locale1 ++ org.freedesktop.login1 ++ org.freedesktop.machine1 ++ org.freedesktop.network1 ++ org.freedesktop.portable1 ++ org.freedesktop.resolve1 ++ org.freedesktop.systemd1 ++ org.freedesktop.timedate1 ++ org.freedesktop.timesync1 ++) ++ ++# systemd-oomd requires PSI ++if tail -n +1 /proc/pressure/{cpu,io,memory}; then ++ BUS_LIST+=(org.freedesktop.oom1) ++fi ++ ++SESSION_BUS_LIST=( ++ org.freedesktop.systemd1 ++) ++ ++# Maximum payload size generated by dfuzzer (in bytes) - default: 50K ++PAYLOAD_MAX=50000 ++# Tweak the maximum payload size if we're running under sanitizers, since ++# with larger payloads we start hitting reply timeouts ++if [[ -v ASAN_OPTIONS || -v UBSAN_OPTIONS ]]; then ++ PAYLOAD_MAX=10000 # 10K ++fi ++ ++# Overmount /var/lib/machines with a size-limited tmpfs, as fuzzing ++# the org.freedesktop.machine1 stuff makes quite a mess ++mount -t tmpfs -o size=50M tmpfs /var/lib/machines ++ ++# Fuzz both the system and the session buses (where applicable) ++for bus in "${BUS_LIST[@]}"; do ++ echo "Bus: $bus (system)" ++ systemd-run --pipe --wait \ ++ -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus" ++ ++ # Let's reload the systemd daemon to test (de)serialization as well ++ systemctl daemon-reload ++done ++ ++umount /var/lib/machines ++ ++for bus in "${SESSION_BUS_LIST[@]}"; do ++ echo "Bus: $bus (session)" ++ systemd-run --machine 'testuser@.host' --user --pipe --wait \ ++ -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus" ++ ++ # Let's reload the systemd user daemon to test (de)serialization as well ++ systemctl --machine 'testuser@.host' --user daemon-reload ++done ++ ++echo OK >/testok ++ ++exit 0 diff --git a/SOURCES/0126-test-skip-TEST-21-DFUZZER-without-ASan.patch b/SOURCES/0126-test-skip-TEST-21-DFUZZER-without-ASan.patch new file mode 100644 index 0000000..90ee4f4 --- /dev/null +++ b/SOURCES/0126-test-skip-TEST-21-DFUZZER-without-ASan.patch @@ -0,0 +1,31 @@ +From 8f848593293b69f293734e07ec975ee76a3e6df5 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Sun, 19 Jun 2022 10:39:12 +0200 +Subject: [PATCH] test: skip TEST-21-DFUZZER without ASan + +as the test is quite time consuming and it yields more useful reports +when the target app is built with sanitizers. + +(cherry picked from commit d768243a95c33e73afe9a7e487acf329884e03c1) + +Related: #2087652 +--- + test/TEST-21-DFUZZER/test.sh | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/test/TEST-21-DFUZZER/test.sh b/test/TEST-21-DFUZZER/test.sh +index ecc04e368c..42e37c8a9c 100755 +--- a/test/TEST-21-DFUZZER/test.sh ++++ b/test/TEST-21-DFUZZER/test.sh +@@ -12,6 +12,11 @@ QEMU_TIMEOUT="${QEMU_TIMEOUT:-1800}" + + command -v dfuzzer >/dev/null || exit 0 + ++if ! get_bool "$IS_BUILT_WITH_ASAN"; then ++ echo "systemd is built without ASan, skipping..." ++ exit 0 ++fi ++ + test_append_files() { + local workspace="${1:?}" + diff --git a/SOURCES/0127-core-annotate-Reexecute-as-NoReply.patch b/SOURCES/0127-core-annotate-Reexecute-as-NoReply.patch new file mode 100644 index 0000000..eaebcb5 --- /dev/null +++ b/SOURCES/0127-core-annotate-Reexecute-as-NoReply.patch @@ -0,0 +1,41 @@ +From fc6e005962167c26b9ef6cdd9e3476abeeb47313 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Mon, 9 May 2022 23:43:40 +0200 +Subject: [PATCH] core: annotate Reexecute() as NoReply + +So we're able to tell from the introspection data that the method +doesn't reply. + +(cherry picked from commit 624f685fe8ff1a90370e02faf60d0292a8e01f26) + +Related: #2087652 +--- + man/org.freedesktop.systemd1.xml | 1 + + src/core/dbus-manager.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml +index bd69a00b57..e1abb7f389 100644 +--- a/man/org.freedesktop.systemd1.xml ++++ b/man/org.freedesktop.systemd1.xml +@@ -169,6 +169,7 @@ node /org/freedesktop/systemd1 { + Dump(out s output); + DumpByFileDescriptor(out h fd); + Reload(); ++ @org.freedesktop.DBus.Method.NoReply("true") + Reexecute(); + @org.freedesktop.systemd1.Privileged("true") + Exit(); +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 9b64a8074d..1a3098ceb1 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -3105,7 +3105,7 @@ const sd_bus_vtable bus_manager_vtable[] = { + NULL, + NULL, + method_reexecute, +- SD_BUS_VTABLE_UNPRIVILEGED), ++ SD_BUS_VTABLE_UNPRIVILEGED|SD_BUS_VTABLE_METHOD_NO_REPLY), + SD_BUS_METHOD("Exit", + NULL, + NULL, diff --git a/SOURCES/0128-test-always-force-a-new-image-for-dfuzzer.patch b/SOURCES/0128-test-always-force-a-new-image-for-dfuzzer.patch new file mode 100644 index 0000000..60da622 --- /dev/null +++ b/SOURCES/0128-test-always-force-a-new-image-for-dfuzzer.patch @@ -0,0 +1,28 @@ +From e162696827d97449e6395fc017fe6865aa6f1ad1 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Tue, 21 Jun 2022 10:01:30 +0200 +Subject: [PATCH] test: always force a new image for dfuzzer + +Otherwise we might end up with an image containing broken service +symlinks and other things, which break certain parts of the test. + +(cherry picked from commit 5dffa6b032168305213e4fb0d72fb02363acfd65) + +Related: #2087652 +--- + test/TEST-21-DFUZZER/test.sh | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/test/TEST-21-DFUZZER/test.sh b/test/TEST-21-DFUZZER/test.sh +index 42e37c8a9c..7669e4e0ad 100755 +--- a/test/TEST-21-DFUZZER/test.sh ++++ b/test/TEST-21-DFUZZER/test.sh +@@ -6,6 +6,8 @@ TEST_DESCRIPTION="Fuzz our D-Bus interfaces with dfuzzer" + TEST_NO_NSPAWN=1 + TEST_SUPPORTING_SERVICES_SHOULD_BE_MASKED=0 + QEMU_TIMEOUT="${QEMU_TIMEOUT:-1800}" ++IMAGE_NAME=dfuzzer ++TEST_FORCE_NEWIMAGE=1 + + # shellcheck source=test/test-functions + . "${TEST_BASE_DIR:?}/test-functions" diff --git a/SOURCES/0129-test-make-dfuzzer-less-verbose.patch b/SOURCES/0129-test-make-dfuzzer-less-verbose.patch new file mode 100644 index 0000000..be24139 --- /dev/null +++ b/SOURCES/0129-test-make-dfuzzer-less-verbose.patch @@ -0,0 +1,38 @@ +From 0e72d8a8bbed61ffa3cbf2637f1b29ade7af45be Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Tue, 21 Jun 2022 10:04:03 +0200 +Subject: [PATCH] test: make dfuzzer less verbose + +Otherwise it oversaturates the journal, which in some cases can't keep +up with the load of messages (due to the performance penalty caused by +sanitizers), and gets killed by a watchdog. + +(cherry picked from commit d3eb4159c9577f0a9ee776d34fcec7ad913d88a5) + +Related: #2087652 +--- + test/units/testsuite-21.sh | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh +index 43b5fb6f22..604bf145ca 100755 +--- a/test/units/testsuite-21.sh ++++ b/test/units/testsuite-21.sh +@@ -72,7 +72,7 @@ mount -t tmpfs -o size=50M tmpfs /var/lib/machines + for bus in "${BUS_LIST[@]}"; do + echo "Bus: $bus (system)" + systemd-run --pipe --wait \ +- -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus" ++ -- dfuzzer -b "$PAYLOAD_MAX" -n "$bus" + + # Let's reload the systemd daemon to test (de)serialization as well + systemctl daemon-reload +@@ -83,7 +83,7 @@ umount /var/lib/machines + for bus in "${SESSION_BUS_LIST[@]}"; do + echo "Bus: $bus (session)" + systemd-run --machine 'testuser@.host' --user --pipe --wait \ +- -- dfuzzer -v -b "$PAYLOAD_MAX" -n "$bus" ++ -- dfuzzer -b "$PAYLOAD_MAX" -n "$bus" + + # Let's reload the systemd user daemon to test (de)serialization as well + systemctl --machine 'testuser@.host' --user daemon-reload diff --git a/SOURCES/0130-test-drop-the-at_exit-coredump-check.patch b/SOURCES/0130-test-drop-the-at_exit-coredump-check.patch new file mode 100644 index 0000000..013bbff --- /dev/null +++ b/SOURCES/0130-test-drop-the-at_exit-coredump-check.patch @@ -0,0 +1,37 @@ +From e5291b4fb0d9adfc9da510f4acc7330d57e3e415 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Tue, 21 Jun 2022 10:13:48 +0200 +Subject: [PATCH] test: drop the at_exit() coredump check + +since we don't truncate the journal anymore. + +(cherry picked from commit 5309b56505dfccf9111cb5fe6461047725429e79) + +Related: #2087652 +--- + test/units/testsuite-21.sh | 12 +----------- + 1 file changed, 1 insertion(+), 11 deletions(-) + +diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh +index 604bf145ca..053d571a90 100755 +--- a/test/units/testsuite-21.sh ++++ b/test/units/testsuite-21.sh +@@ -8,17 +8,7 @@ set -o pipefail + systemctl list-jobs | grep -F 'end.service' && SHUTDOWN_AT_EXIT=1 || SHUTDOWN_AT_EXIT=0 + + at_exit() { +- # "Safety net" - check for any coredumps which might have not caused dfuzzer +- # to stop & return an error (we need to do this now before truncating the +- # journal) +- # TODO: check fo ASan/UBSan errors +- local found_cd=0 +- while read -r exe; do +- coredumctl info "$exe" +- found_cd=1 +- done < <(coredumpctl -F COREDUMP_EXE | sort -u) +- [[ $found_cd -eq 0 ]] || exit 1 +- ++ set +e + # We have to call the end.service explicitly even if it's specified on + # the kernel cmdline via systemd.wants=end.service, since dfuzzer calls + # org.freedesktop.systemd1.Manager.ClearJobs() which drops the service diff --git a/SOURCES/0131-test-make-the-shutdown-routine-a-bit-more-robust.patch b/SOURCES/0131-test-make-the-shutdown-routine-a-bit-more-robust.patch new file mode 100644 index 0000000..f4ec02a --- /dev/null +++ b/SOURCES/0131-test-make-the-shutdown-routine-a-bit-more-robust.patch @@ -0,0 +1,54 @@ +From a0464b064c46f9a63fd3f8d6f2d8560c7e5d32d3 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Tue, 21 Jun 2022 10:20:12 +0200 +Subject: [PATCH] test: make the shutdown routine a bit more "robust" + +Replace the call to the `end.service` with `systemctl poweroff`, since +it seems to cause issues no matter what `--job-mode=` is used: + +``` +[ 129.070993] testsuite-21.sh[380]: ++ systemctl start --job-mode=flush end.service +[ 129.154985] testsuite-21.sh[912]: Failed to start end.service: Transaction for end.service/start is destructive (sysinit.target has 'stop' job queued, but 'start' is included in transaction). +[ 129.159636] testsuite-21.sh[912]: See system logs and 'systemctl status end.service' for details. +``` + +Also, add a "safety net" which bypasses the manager and does the +poweroff directly, since sometimes the D-Bus call performed by +`systemctl` might timeout (as the manager might be still processing data +from the fuzzing): + +``` +[ 115.776778] sh[894]: + systemctl poweroff --no-block +[ 166.164242] testsuite-21.sh[893]: Failed to start transient service unit: Connection timed out +[ 166.269289] sh[894]: Call to PowerOff failed: Connection timed out +``` + +(cherry picked from commit 56e8ee55d58e38d47992ca6b5b6466fdb5be4781) + +Related: #2087652 +--- + test/units/testsuite-21.sh | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh +index 053d571a90..e9bf18603a 100755 +--- a/test/units/testsuite-21.sh ++++ b/test/units/testsuite-21.sh +@@ -9,11 +9,15 @@ systemctl list-jobs | grep -F 'end.service' && SHUTDOWN_AT_EXIT=1 || SHUTDOWN_AT + + at_exit() { + set +e +- # We have to call the end.service explicitly even if it's specified on ++ # We have to call the end.service/poweroff explicitly even if it's specified on + # the kernel cmdline via systemd.wants=end.service, since dfuzzer calls + # org.freedesktop.systemd1.Manager.ClearJobs() which drops the service + # from the queue +- [[ $SHUTDOWN_AT_EXIT -ne 0 ]] && systemctl start --job-mode=flush end.service ++ if [[ $SHUTDOWN_AT_EXIT -ne 0 ]] && ! systemctl poweroff; then ++ # PID1 is down let's try to save the journal ++ journalctl --sync || : # journal can be down as well so let's ignore exit codes here ++ systemctl -ff poweroff # sync() and reboot(RB_POWER_OFF) ++ fi + } + + trap at_exit EXIT diff --git a/SOURCES/0132-tree-wide-drop-manually-crafted-message-for-missing-.patch b/SOURCES/0132-tree-wide-drop-manually-crafted-message-for-missing-.patch new file mode 100644 index 0000000..868ae1e --- /dev/null +++ b/SOURCES/0132-tree-wide-drop-manually-crafted-message-for-missing-.patch @@ -0,0 +1,167 @@ +From 910711b21c5fe4f26ad20a4d86e1acfb2a0afbdb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 4 May 2022 08:24:06 +0200 +Subject: [PATCH] tree-wide: drop manually-crafted message for missing + variables + +Bash will generate a very nice message for us: +/tmp/ff.sh: line 1: SOMEVAR: parameter null or not set + +Let's save some keystrokes by not replacing this with our own inferior +messages. + +(cherry picked from commit d7ff52403902900b61f644f87b5222822fd4a69b) + +Related: #2087652 +--- + test/TEST-36-NUMAPOLICY/test.sh | 2 +- + test/hwdb-test.sh | 2 +- + test/test-rpm-macros.sh | 2 +- + test/units/testsuite-15.sh | 4 ++-- + test/units/testsuite-36.sh | 14 +++++++------- + test/units/testsuite-46.sh | 2 +- + tools/check-directives.sh | 4 ++-- + 7 files changed, 15 insertions(+), 15 deletions(-) + +diff --git a/test/TEST-36-NUMAPOLICY/test.sh b/test/TEST-36-NUMAPOLICY/test.sh +index 0eaaee9608..5f38bf1009 100755 +--- a/test/TEST-36-NUMAPOLICY/test.sh ++++ b/test/TEST-36-NUMAPOLICY/test.sh +@@ -9,7 +9,7 @@ TEST_NO_NSPAWN=1 + . "${TEST_BASE_DIR:?}/test-functions" + + if qemu_min_version "5.2.0"; then +- QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:?QEMU_MEM is unset} -numa node,memdev=mem0,nodeid=0" ++ QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:?} -numa node,memdev=mem0,nodeid=0" + else + QEMU_OPTIONS="-numa node,nodeid=0" + fi +diff --git a/test/hwdb-test.sh b/test/hwdb-test.sh +index 0551f26a2d..29183e6829 100755 +--- a/test/hwdb-test.sh ++++ b/test/hwdb-test.sh +@@ -11,7 +11,7 @@ set -e + + export SYSTEMD_LOG_LEVEL=info + ROOTDIR="$(dirname "$(dirname "$(readlink -f "$0")")")" +-SYSTEMD_HWDB="${1:?missing argument}" ++SYSTEMD_HWDB="${1:?}" + + if [ ! -x "$SYSTEMD_HWDB" ]; then + echo "$SYSTEMD_HWDB is not executable" >&2 +diff --git a/test/test-rpm-macros.sh b/test/test-rpm-macros.sh +index 5843b72346..c7107dec3e 100755 +--- a/test/test-rpm-macros.sh ++++ b/test/test-rpm-macros.sh +@@ -6,7 +6,7 @@ + # rpmspec utility is required (so this test will work with RPM 4 but won't work with RPM 5). + set -eu + +-BUILD_DIR="${1:?Missing argument: build directory}" ++BUILD_DIR="${1:?}" + RPM_MACROS_FILE="${BUILD_DIR:?}/src/rpm/macros.systemd" + + if ! command -v rpm >/dev/null || ! command -v rpmspec >/dev/null; then +diff --git a/test/units/testsuite-15.sh b/test/units/testsuite-15.sh +index 0446e71c38..f847adac74 100755 +--- a/test/units/testsuite-15.sh ++++ b/test/units/testsuite-15.sh +@@ -4,7 +4,7 @@ set -eux + set -o pipefail + + _clear_service () { +- local SERVICE_NAME="${1:?_clear_service: missing argument}" ++ local SERVICE_NAME="${1:?}" + systemctl stop "$SERVICE_NAME.service" 2>/dev/null || : + rm -f /{etc,run,usr/lib}/systemd/system/"$SERVICE_NAME".service + rm -fr /{etc,run,usr/lib}/systemd/system/"$SERVICE_NAME".service.d +@@ -25,7 +25,7 @@ clear_services () { + } + + create_service () { +- local SERVICE_NAME="${1:?create_service: missing argument}" ++ local SERVICE_NAME="${1:?}" + clear_services "$SERVICE_NAME" + + cat >/etc/systemd/system/"$SERVICE_NAME".service <"$confDir/numa.conf" <"$testUnitNUMAConf" </dev/null || exit 77 + diff --git a/SOURCES/0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch b/SOURCES/0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch new file mode 100644 index 0000000..8f4ab69 --- /dev/null +++ b/SOURCES/0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch @@ -0,0 +1,56 @@ +From 3e31fc66a206c272e7f73581c5ca752b4439fec3 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Tue, 21 Jun 2022 12:09:35 +0200 +Subject: [PATCH] test: allow overriding $QEMU_MEM when running w/ ASan + +(cherry picked from commit dc350e78fe66ae8698574202b2e30e5d650219ec) + +Related: #2087652 +--- + test/TEST-36-NUMAPOLICY/test.sh | 2 +- + test/test-functions | 5 ++--- + 2 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/test/TEST-36-NUMAPOLICY/test.sh b/test/TEST-36-NUMAPOLICY/test.sh +index 5f38bf1009..7909b1dce3 100755 +--- a/test/TEST-36-NUMAPOLICY/test.sh ++++ b/test/TEST-36-NUMAPOLICY/test.sh +@@ -9,7 +9,7 @@ TEST_NO_NSPAWN=1 + . "${TEST_BASE_DIR:?}/test-functions" + + if qemu_min_version "5.2.0"; then +- QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:?} -numa node,memdev=mem0,nodeid=0" ++ QEMU_OPTIONS="-object memory-backend-ram,id=mem0,size=${QEMU_MEM:-512M} -numa node,memdev=mem0,nodeid=0" + else + QEMU_OPTIONS="-numa node,nodeid=0" + fi +diff --git a/test/test-functions b/test/test-functions +index 079a7249e4..98efd047d7 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -30,7 +30,6 @@ TIMED_OUT= # will be 1 after run_* if *_TIMEOUT is set and test timed out + [[ "$LOOKS_LIKE_SUSE" ]] && FSTYPE="${FSTYPE:-btrfs}" || FSTYPE="${FSTYPE:-ext4}" + UNIFIED_CGROUP_HIERARCHY="${UNIFIED_CGROUP_HIERARCHY:-default}" + EFI_MOUNT="${EFI_MOUNT:-$(bootctl -x 2>/dev/null || echo /boot)}" +-QEMU_MEM="${QEMU_MEM:-512M}" + # Note that defining a different IMAGE_NAME in a test setup script will only result + # in default.img being copied and renamed. It can then be extended by defining + # a test_append_files() function. The $1 parameter will be the root directory. +@@ -255,7 +254,7 @@ if get_bool "$IS_BUILT_WITH_ASAN"; then + STRIP_BINARIES=no + SKIP_INITRD="${SKIP_INITRD:-yes}" + PATH_TO_INIT=$ROOTLIBDIR/systemd-under-asan +- QEMU_MEM="2048M" ++ QEMU_MEM="${QEMU_MEM:-2G}" + QEMU_SMP="${QEMU_SMP:-4}" + + # We need to correctly distinguish between gcc's and clang's ASan DSOs. +@@ -444,7 +443,7 @@ run_qemu() { + qemu_options+=( + -smp "$QEMU_SMP" + -net none +- -m "$QEMU_MEM" ++ -m "${QEMU_MEM:-512M}" + -nographic + -kernel "$KERNEL_BIN" + -drive "format=raw,cache=unsafe,file=$image" diff --git a/SOURCES/0134-test-don-t-test-buses-we-don-t-ship.patch b/SOURCES/0134-test-don-t-test-buses-we-don-t-ship.patch new file mode 100644 index 0000000..fbe3762 --- /dev/null +++ b/SOURCES/0134-test-don-t-test-buses-we-don-t-ship.patch @@ -0,0 +1,39 @@ +From a2c46d33809334614f93964b1707b01cbe2e05a5 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 22 Jun 2022 11:09:58 +0200 +Subject: [PATCH] test: don't test buses we don't ship + +rhel-only + +Related: #2087652 +--- + test/units/testsuite-21.sh | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/test/units/testsuite-21.sh b/test/units/testsuite-21.sh +index e9bf18603a..bb2b754f35 100755 +--- a/test/units/testsuite-21.sh ++++ b/test/units/testsuite-21.sh +@@ -27,18 +27,18 @@ systemctl log-level info + # TODO + # * check for possibly newly introduced buses? + BUS_LIST=( +- org.freedesktop.home1 ++# org.freedesktop.home1 + org.freedesktop.hostname1 + org.freedesktop.import1 + org.freedesktop.locale1 + org.freedesktop.login1 + org.freedesktop.machine1 +- org.freedesktop.network1 +- org.freedesktop.portable1 ++# org.freedesktop.network1 ++# org.freedesktop.portable1 + org.freedesktop.resolve1 + org.freedesktop.systemd1 + org.freedesktop.timedate1 +- org.freedesktop.timesync1 ++# org.freedesktop.timesync1 + ) + + # systemd-oomd requires PSI diff --git a/SOURCES/0135-shutdown-get-only-active-md-arrays.patch b/SOURCES/0135-shutdown-get-only-active-md-arrays.patch new file mode 100644 index 0000000..93e24b5 --- /dev/null +++ b/SOURCES/0135-shutdown-get-only-active-md-arrays.patch @@ -0,0 +1,68 @@ +From 00ee9938c9c2333dc445b44e475974a3d3e37c10 Mon Sep 17 00:00:00 2001 +From: Mariusz Tkaczyk +Date: Tue, 29 Mar 2022 12:49:54 +0200 +Subject: [PATCH] shutdown: get only active md arrays. + +Current md_list_get() implementation filters all block devices, started from +"md*". This is ambiguous because list could contain: +- partitions created upon md device (mdXpY) +- external metadata container- specific type of md array. + +For partitions there is no issue, because they aren't handle STOP_ARRAY +ioctl sent later. It generates misleading errors only. + +Second case is more problematic because containers are not locked in kernel. +They are stopped even if container member array is active. For that reason +reboot or shutdown flow could be blocked because metadata manager cannot be +restarted after switch root on shutdown. + +Add filters to remove partitions and containers from md_list. Partitions +can be excluded by DEVTYPE. Containers are determined by MD_LEVEL +property, we are excluding all with "container" value. + +Signed-off-by: Mariusz Tkaczyk +(cherry picked from commit 3a3b022d2cc112803ea7b9beea98bbcad110368a) + +Resolves: #2047682 +--- + src/shutdown/umount.c | 18 +++++++++++++++++- + 1 file changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/shutdown/umount.c b/src/shutdown/umount.c +index f5a2cb20c1..6b08d9de74 100644 +--- a/src/shutdown/umount.c ++++ b/src/shutdown/umount.c +@@ -352,9 +352,14 @@ static int md_list_get(MountPoint **head) { + if (r < 0) + return r; + ++ /* Filter out partitions. */ ++ r = sd_device_enumerator_add_match_property(e, "DEVTYPE", "disk"); ++ if (r < 0) ++ return r; ++ + FOREACH_DEVICE(e, d) { + _cleanup_free_ char *p = NULL; +- const char *dn; ++ const char *dn, *md_level; + MountPoint *m; + dev_t devnum; + +@@ -362,6 +367,17 @@ static int md_list_get(MountPoint **head) { + sd_device_get_devname(d, &dn) < 0) + continue; + ++ r = sd_device_get_property_value(d, "MD_LEVEL", &md_level); ++ if (r < 0) { ++ log_warning_errno(r, "Failed to get MD_LEVEL property for %s, ignoring: %m", dn); ++ continue; ++ } ++ ++ /* MD "containers" are a special type of MD devices, used for external metadata. ++ * Since it doesn't provide RAID functionality in itself we don't need to stop it. */ ++ if (streq(md_level, "container")) ++ continue; ++ + p = strdup(dn); + if (!p) + return -ENOMEM; diff --git a/SOURCES/0136-bus-Use-OrderedSet-for-introspection.patch b/SOURCES/0136-bus-Use-OrderedSet-for-introspection.patch new file mode 100644 index 0000000..8625af6 --- /dev/null +++ b/SOURCES/0136-bus-Use-OrderedSet-for-introspection.patch @@ -0,0 +1,276 @@ +From 52af91cfd0eece566cb2b6877e622b16289525a4 Mon Sep 17 00:00:00 2001 +From: Jan Janssen +Date: Wed, 19 Jan 2022 10:15:36 +0100 +Subject: [PATCH] bus: Use OrderedSet for introspection + +Otherwise, the generated xml files are not reproducible. + +(cherry picked from commit acac88340ace3cd631126eebb6d0390cd54e8231) + +Resolves: #2068131 +--- + src/libsystemd/sd-bus/bus-introspect.c | 4 +-- + src/libsystemd/sd-bus/bus-introspect.h | 4 +-- + src/libsystemd/sd-bus/bus-objects.c | 45 +++++++++++++------------- + src/shared/bus-object.c | 4 +-- + 4 files changed, 28 insertions(+), 29 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-introspect.c b/src/libsystemd/sd-bus/bus-introspect.c +index b9ef6af631..eed0dae82f 100644 +--- a/src/libsystemd/sd-bus/bus-introspect.c ++++ b/src/libsystemd/sd-bus/bus-introspect.c +@@ -110,7 +110,7 @@ static int set_interface_name(struct introspect *intro, const char *interface_na + return free_and_strdup(&intro->interface_name, interface_name); + } + +-int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix) { ++int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix) { + char *node; + + assert(i); +@@ -118,7 +118,7 @@ int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefi + + assert_se(set_interface_name(i, NULL) >= 0); + +- while ((node = set_steal_first(s))) { ++ while ((node = ordered_set_steal_first(s))) { + const char *e; + + e = object_path_startswith(node, prefix); +diff --git a/src/libsystemd/sd-bus/bus-introspect.h b/src/libsystemd/sd-bus/bus-introspect.h +index 34f32a4cf9..19e3ef09e2 100644 +--- a/src/libsystemd/sd-bus/bus-introspect.h ++++ b/src/libsystemd/sd-bus/bus-introspect.h +@@ -5,7 +5,7 @@ + + #include "sd-bus.h" + +-#include "set.h" ++#include "ordered-set.h" + + struct introspect { + FILE *f; +@@ -17,7 +17,7 @@ struct introspect { + + int introspect_begin(struct introspect *i, bool trusted); + int introspect_write_default_interfaces(struct introspect *i, bool object_manager); +-int introspect_write_child_nodes(struct introspect *i, Set *s, const char *prefix); ++int introspect_write_child_nodes(struct introspect *i, OrderedSet *s, const char *prefix); + int introspect_write_interface( + struct introspect *i, + const char *interface_name, +diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c +index bf69539062..40158a7326 100644 +--- a/src/libsystemd/sd-bus/bus-objects.c ++++ b/src/libsystemd/sd-bus/bus-objects.c +@@ -9,7 +9,6 @@ + #include "bus-slot.h" + #include "bus-type.h" + #include "missing_capability.h" +-#include "set.h" + #include "string-util.h" + #include "strv.h" + +@@ -99,7 +98,7 @@ static int add_enumerated_to_set( + sd_bus *bus, + const char *prefix, + struct node_enumerator *first, +- Set *s, ++ OrderedSet *s, + sd_bus_error *error) { + + struct node_enumerator *c; +@@ -146,7 +145,7 @@ static int add_enumerated_to_set( + continue; + } + +- r = set_consume(s, *k); ++ r = ordered_set_consume(s, *k); + if (r == -EEXIST) + r = 0; + } +@@ -171,7 +170,7 @@ static int add_subtree_to_set( + const char *prefix, + struct node *n, + unsigned flags, +- Set *s, ++ OrderedSet *s, + sd_bus_error *error) { + + struct node *i; +@@ -198,7 +197,7 @@ static int add_subtree_to_set( + if (!t) + return -ENOMEM; + +- r = set_consume(s, t); ++ r = ordered_set_consume(s, t); + if (r < 0 && r != -EEXIST) + return r; + +@@ -220,10 +219,10 @@ static int get_child_nodes( + const char *prefix, + struct node *n, + unsigned flags, +- Set **_s, ++ OrderedSet **_s, + sd_bus_error *error) { + +- Set *s = NULL; ++ OrderedSet *s = NULL; + int r; + + assert(bus); +@@ -231,13 +230,13 @@ static int get_child_nodes( + assert(n); + assert(_s); + +- s = set_new(&string_hash_ops); ++ s = ordered_set_new(&string_hash_ops); + if (!s) + return -ENOMEM; + + r = add_subtree_to_set(bus, prefix, n, flags, s, error); + if (r < 0) { +- set_free_free(s); ++ ordered_set_free_free(s); + return r; + } + +@@ -937,7 +936,7 @@ int introspect_path( + char **ret, + sd_bus_error *error) { + +- _cleanup_set_free_free_ Set *s = NULL; ++ _cleanup_ordered_set_free_ OrderedSet *s = NULL; + _cleanup_(introspect_free) struct introspect intro = {}; + struct node_vtable *c; + bool empty; +@@ -963,7 +962,7 @@ int introspect_path( + if (r < 0) + return r; + +- empty = set_isempty(s); ++ empty = ordered_set_isempty(s); + + LIST_FOREACH(vtables, c, n->vtables) { + if (require_fallback && !c->is_fallback) +@@ -1233,7 +1232,7 @@ static int process_get_managed_objects( + + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; +- _cleanup_set_free_free_ Set *s = NULL; ++ _cleanup_ordered_set_free_free_ OrderedSet *s = NULL; + char *path; + int r; + +@@ -1263,7 +1262,7 @@ static int process_get_managed_objects( + if (r < 0) + return r; + +- SET_FOREACH(path, s) { ++ ORDERED_SET_FOREACH(path, s) { + r = object_manager_serialize_path_and_fallbacks(bus, reply, path, &error); + if (r < 0) + return bus_maybe_reply_error(m, r, &error); +@@ -2352,7 +2351,7 @@ _public_ int sd_bus_emit_properties_changed( + static int object_added_append_all_prefix( + sd_bus *bus, + sd_bus_message *m, +- Set *s, ++ OrderedSet *s, + const char *prefix, + const char *path, + bool require_fallback) { +@@ -2392,10 +2391,10 @@ static int object_added_append_all_prefix( + * skip it on any of its parents. The child vtables + * always fully override any conflicting vtables of + * any parent node. */ +- if (set_get(s, c->interface)) ++ if (ordered_set_get(s, c->interface)) + continue; + +- r = set_put(s, c->interface); ++ r = ordered_set_put(s, c->interface); + if (r < 0) + return r; + +@@ -2441,7 +2440,7 @@ static int object_added_append_all_prefix( + } + + static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *path) { +- _cleanup_set_free_ Set *s = NULL; ++ _cleanup_ordered_set_free_ OrderedSet *s = NULL; + _cleanup_free_ char *prefix = NULL; + size_t pl; + int r; +@@ -2465,7 +2464,7 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p + * a parent that were overwritten by a child. + */ + +- s = set_new(&string_hash_ops); ++ s = ordered_set_new(&string_hash_ops); + if (!s) + return -ENOMEM; + +@@ -2572,7 +2571,7 @@ _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) { + static int object_removed_append_all_prefix( + sd_bus *bus, + sd_bus_message *m, +- Set *s, ++ OrderedSet *s, + const char *prefix, + const char *path, + bool require_fallback) { +@@ -2605,7 +2604,7 @@ static int object_removed_append_all_prefix( + * skip it on any of its parents. The child vtables + * always fully override any conflicting vtables of + * any parent node. */ +- if (set_get(s, c->interface)) ++ if (ordered_set_get(s, c->interface)) + continue; + + r = node_vtable_get_userdata(bus, path, c, &u, &error); +@@ -2616,7 +2615,7 @@ static int object_removed_append_all_prefix( + if (r == 0) + continue; + +- r = set_put(s, c->interface); ++ r = ordered_set_put(s, c->interface); + if (r < 0) + return r; + +@@ -2631,7 +2630,7 @@ static int object_removed_append_all_prefix( + } + + static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char *path) { +- _cleanup_set_free_ Set *s = NULL; ++ _cleanup_ordered_set_free_ OrderedSet *s = NULL; + _cleanup_free_ char *prefix = NULL; + size_t pl; + int r; +@@ -2642,7 +2641,7 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char + + /* see sd_bus_emit_object_added() for details */ + +- s = set_new(&string_hash_ops); ++ s = ordered_set_new(&string_hash_ops); + if (!s) + return -ENOMEM; + +diff --git a/src/shared/bus-object.c b/src/shared/bus-object.c +index f2e53913fb..4ed5215e3d 100644 +--- a/src/shared/bus-object.c ++++ b/src/shared/bus-object.c +@@ -156,10 +156,10 @@ int bus_introspect_implementations( + if (impl != main_impl) + bus_introspect_implementation(&intro, impl); + +- _cleanup_set_free_ Set *nodes = NULL; ++ _cleanup_ordered_set_free_ OrderedSet *nodes = NULL; + + for (size_t i = 0; impl->children && impl->children[i]; i++) { +- r = set_put_strdup(&nodes, impl->children[i]->path); ++ r = ordered_set_put_strdup(&nodes, impl->children[i]->path); + if (r < 0) + return log_oom(); + } diff --git a/SOURCES/0137-logind-session-dbus-allow-to-set-display-name-via-db.patch b/SOURCES/0137-logind-session-dbus-allow-to-set-display-name-via-db.patch new file mode 100644 index 0000000..97de43e --- /dev/null +++ b/SOURCES/0137-logind-session-dbus-allow-to-set-display-name-via-db.patch @@ -0,0 +1,160 @@ +From 5cfd162864213c5247d97ea31cfacce98b1caefc Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Fri, 10 Jun 2022 15:07:01 +0200 +Subject: [PATCH] logind-session-dbus: allow to set display name via dbus + +Currently, the only way to set display name of a graphical session is to +pass it to CreateSession(). But modern display managers like gdm start +the display server as part of the user session, which means that the +display name isn't known yet when the session is being created. Hence, +let's make it possible to set it later. + +(cherry picked from commit 4885d7490b23e08d8444e5a68927ce9ce8727e5a) + +Resolves: #2100340 +--- + man/org.freedesktop.login1.xml | 8 ++++++++ + src/login/logind-session-dbus.c | 29 +++++++++++++++++++++++++++ + src/login/logind-session.c | 20 ++++++++++++++++++ + src/login/logind-session.h | 1 + + src/login/org.freedesktop.login1.conf | 4 ++++ + 5 files changed, 62 insertions(+) + +diff --git a/man/org.freedesktop.login1.xml b/man/org.freedesktop.login1.xml +index d25287b18b..c11324ee3b 100644 +--- a/man/org.freedesktop.login1.xml ++++ b/man/org.freedesktop.login1.xml +@@ -1045,6 +1045,7 @@ node /org/freedesktop/login1/session/1 { + TakeControl(in b force); + ReleaseControl(); + SetType(in s type); ++ SetDisplay(in s display); + TakeDevice(in u major, + in u minor, + out h fd, +@@ -1142,6 +1143,8 @@ node /org/freedesktop/login1/session/1 { + + + ++ ++ + + + +@@ -1238,6 +1241,11 @@ node /org/freedesktop/login1/session/1 { + connection. This should help prevent a session from entering an inconsistent state, for example if the + controller crashes. The only argument type is the new session type. + ++ SetDisplay() allows the display name of the graphical session to be changed. This is ++ useful if the display server is started as part of the session. It can only be called by session's current ++ controller. If TakeControl() has not been called, this method will fail. The only argument ++ display is the new display name. ++ + TakeDevice() allows a session controller to get a file descriptor for a + specific device. Pass in the major and minor numbers of the character device and + systemd-logind will return a file descriptor for the device. Only a limited set of +diff --git a/src/login/logind-session-dbus.c b/src/login/logind-session-dbus.c +index ff4cd0a631..5480d7b2f4 100644 +--- a/src/login/logind-session-dbus.c ++++ b/src/login/logind-session-dbus.c +@@ -413,6 +413,30 @@ static int method_set_type(sd_bus_message *message, void *userdata, sd_bus_error + return sd_bus_reply_method_return(message, NULL); + } + ++static int method_set_display(sd_bus_message *message, void *userdata, sd_bus_error *error) { ++ Session *s = ASSERT_PTR(userdata); ++ const char *display; ++ int r; ++ ++ assert(message); ++ ++ r = sd_bus_message_read(message, "s", &display); ++ if (r < 0) ++ return r; ++ ++ if (!session_is_controller(s, sd_bus_message_get_sender(message))) ++ return sd_bus_error_set(error, BUS_ERROR_NOT_IN_CONTROL, "You must be in control of this session to set display"); ++ ++ if (!SESSION_TYPE_IS_GRAPHICAL(s->type)) ++ return sd_bus_error_set(error, SD_BUS_ERROR_NOT_SUPPORTED, "Setting display is only supported for graphical sessions"); ++ ++ r = session_set_display(s, display); ++ if (r < 0) ++ return r; ++ ++ return sd_bus_reply_method_return(message, NULL); ++} ++ + static int method_take_device(sd_bus_message *message, void *userdata, sd_bus_error *error) { + Session *s = userdata; + uint32_t major, minor; +@@ -901,6 +925,11 @@ static const sd_bus_vtable session_vtable[] = { + SD_BUS_NO_RESULT, + method_set_type, + SD_BUS_VTABLE_UNPRIVILEGED), ++ SD_BUS_METHOD_WITH_ARGS("SetDisplay", ++ SD_BUS_ARGS("s", display), ++ SD_BUS_NO_RESULT, ++ method_set_display, ++ SD_BUS_VTABLE_UNPRIVILEGED), + SD_BUS_METHOD_WITH_ARGS("TakeDevice", + SD_BUS_ARGS("u", major, "u", minor), + SD_BUS_RESULT("h", fd, "b", inactive), +diff --git a/src/login/logind-session.c b/src/login/logind-session.c +index ab98a5055d..a052596e57 100644 +--- a/src/login/logind-session.c ++++ b/src/login/logind-session.c +@@ -1044,6 +1044,26 @@ void session_set_type(Session *s, SessionType t) { + session_send_changed(s, "Type", NULL); + } + ++int session_set_display(Session *s, const char *display) { ++ int r; ++ ++ assert(s); ++ assert(display); ++ ++ if (streq(s->display, display)) ++ return 0; ++ ++ r = free_and_strdup(&s->display, display); ++ if (r < 0) ++ return r; ++ ++ session_save(s); ++ ++ session_send_changed(s, "Display", NULL); ++ ++ return 1; ++} ++ + static int session_dispatch_fifo(sd_event_source *es, int fd, uint32_t revents, void *userdata) { + Session *s = userdata; + +diff --git a/src/login/logind-session.h b/src/login/logind-session.h +index 5c35071dc5..6b6ac2d573 100644 +--- a/src/login/logind-session.h ++++ b/src/login/logind-session.h +@@ -137,6 +137,7 @@ int session_set_idle_hint(Session *s, bool b); + int session_get_locked_hint(Session *s); + void session_set_locked_hint(Session *s, bool b); + void session_set_type(Session *s, SessionType t); ++int session_set_display(Session *s, const char *display); + int session_create_fifo(Session *s); + int session_start(Session *s, sd_bus_message *properties, sd_bus_error *error); + int session_stop(Session *s, bool force); +diff --git a/src/login/org.freedesktop.login1.conf b/src/login/org.freedesktop.login1.conf +index 95d2ef0f06..6113b64aa7 100644 +--- a/src/login/org.freedesktop.login1.conf ++++ b/src/login/org.freedesktop.login1.conf +@@ -346,6 +346,10 @@ + send_interface="org.freedesktop.login1.User" + send_member="Kill"/> + ++ ++ + + + diff --git a/SOURCES/0138-ci-limit-which-env-variables-we-pass-through-sudo.patch b/SOURCES/0138-ci-limit-which-env-variables-we-pass-through-sudo.patch new file mode 100644 index 0000000..3d1f9cd --- /dev/null +++ b/SOURCES/0138-ci-limit-which-env-variables-we-pass-through-sudo.patch @@ -0,0 +1,35 @@ +From 433d2036ecf211e9a7c85d57e4c91d8723f80cbb Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 13 Jul 2022 11:12:36 +0200 +Subject: [PATCH] ci: limit which env variables we pass through `sudo` + +to work around #23987. + +(cherry picked from commit d46e7c7cfd6c286a38298c067f16ac784c2a26f0) + +Related: #2087652 +--- + .github/workflows/unit_tests.yml | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml +index 2afde5d59d..58b7b7cdb2 100644 +--- a/.github/workflows/unit_tests.yml ++++ b/.github/workflows/unit_tests.yml +@@ -28,8 +28,14 @@ jobs: + - name: Repository checkout + uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579 + - name: Install build dependencies +- run: sudo -E .github/workflows/unit_tests.sh SETUP ++ run: | ++ # Drop XDG_* stuff from /etc/environment, so we don't get the user ++ # XDG_* variables when running under sudo ++ sudo sed -i '/^XDG_/d' /etc/environment ++ # Pass only specific env variables through sudo, to avoid having ++ # the already existing XDG_* stuff on the "other side" ++ sudo --preserve-env=CRYPTOLIB,GITHUB_ACTIONS,CI .github/workflows/unit_tests.sh SETUP + - name: Build & test (${{ matrix.run_phase }}-${{ matrix.cryptolib }}) +- run: sudo -E .github/workflows/unit_tests.sh RUN_${{ matrix.run_phase }} ++ run: sudo --preserve-env=CRYPTOLIB,GITHUB_ACTIONS,CI .github/workflows/unit_tests.sh RUN_${{ matrix.run_phase }} + env: + CRYPTOLIB: ${{ matrix.cryptolib }} diff --git a/SOURCES/0139-ci-Mergify-Add-ci-waived-logic.patch b/SOURCES/0139-ci-Mergify-Add-ci-waived-logic.patch new file mode 100644 index 0000000..246526b --- /dev/null +++ b/SOURCES/0139-ci-Mergify-Add-ci-waived-logic.patch @@ -0,0 +1,104 @@ +From 09eeda8d25f0f45d2c545c05fd8ae84404c83d83 Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Tue, 19 Jul 2022 12:29:28 +0200 +Subject: [PATCH] ci(Mergify): Add `ci-waived` logic + +RHEL-only + +Related: #2087652 +--- + .mergify.yml | 66 ++++++++++++++++++++++++++++------------------------ + 1 file changed, 35 insertions(+), 31 deletions(-) + +diff --git a/.mergify.yml b/.mergify.yml +index b7852b201c..be25e52c76 100644 +--- a/.mergify.yml ++++ b/.mergify.yml +@@ -4,6 +4,7 @@ + pull_request_rules: + - name: Add `needs-ci` label on CI fail + conditions: ++ - label!=ci-waived + - or: + # Build test + - -check-success=build (gcc, 10, bfd) +@@ -31,9 +32,9 @@ pull_request_rules: + - and: + - "-check-success=LGTM analysis: C/C++" + - "-check-neutral=LGTM analysis: C/C++" +- # Packit +- - -check-success=rpm-build:centos-stream-9-aarch64 +- - -check-success=rpm-build:centos-stream-9-x86_64 ++ # Packit ++ - -check-success=rpm-build:centos-stream-9-aarch64 ++ - -check-success=rpm-build:centos-stream-9-x86_64 + actions: + label: + add: +@@ -41,35 +42,38 @@ pull_request_rules: + + - name: Remove `needs-ci` label on CI success + conditions: +- # Build test +- - check-success=build (gcc, 10, bfd) +- - check-success=build (gcc, 11, gold) +- - check-success=build (clang, 11, bfd) +- - check-success=build (clang, 12, gold) +- - check-success=build (clang, 13, lld) +- # Unit tests +- - check-success=build (GCC, auto) +- - check-success=build (GCC_ASAN_UBSAN, auto) +- - check-success=build (CLANG, auto) +- - check-success=build (CLANG_ASAN_UBSAN, auto) +- - check-success=build (GCC, openssl) +- - check-success=build (CLANG, gcrypt) +- # CentOS CI +- - check-success=CentOS CI (CentOS Stream 9) +- - check-success=CentOS CI (CentOS Stream 9 + sanitizers) +- # LGTM + - or: +- - "check-success=LGTM analysis: JavaScript" +- - "check-neutral=LGTM analysis: JavaScript" +- - or: +- - "check-success=LGTM analysis: Python" +- - "check-neutral=LGTM analysis: Python" +- - or: +- - "check-success=LGTM analysis: C/C++" +- - "check-neutral=LGTM analysis: C/C++" +- # Packit +- - check-success=rpm-build:centos-stream-9-aarch64 +- - check-success=rpm-build:centos-stream-9-x86_64 ++ - label=ci-waived ++ - and: ++ # Build test ++ - check-success=build (gcc, 10, bfd) ++ - check-success=build (gcc, 11, gold) ++ - check-success=build (clang, 11, bfd) ++ - check-success=build (clang, 12, gold) ++ - check-success=build (clang, 13, lld) ++ # Unit tests ++ - check-success=build (GCC, auto) ++ - check-success=build (GCC_ASAN_UBSAN, auto) ++ - check-success=build (CLANG, auto) ++ - check-success=build (CLANG_ASAN_UBSAN, auto) ++ - check-success=build (GCC, openssl) ++ - check-success=build (CLANG, gcrypt) ++ # CentOS CI ++ - check-success=CentOS CI (CentOS Stream 9) ++ - check-success=CentOS CI (CentOS Stream 9 + sanitizers) ++ # LGTM ++ - or: ++ - "check-success=LGTM analysis: JavaScript" ++ - "check-neutral=LGTM analysis: JavaScript" ++ - or: ++ - "check-success=LGTM analysis: Python" ++ - "check-neutral=LGTM analysis: Python" ++ - or: ++ - "check-success=LGTM analysis: C/C++" ++ - "check-neutral=LGTM analysis: C/C++" ++ # Packit ++ - check-success=rpm-build:centos-stream-9-aarch64 ++ - check-success=rpm-build:centos-stream-9-x86_64 + actions: + label: + remove: diff --git a/SOURCES/0140-json-use-unsigned-for-refernce-counter.patch b/SOURCES/0140-json-use-unsigned-for-refernce-counter.patch new file mode 100644 index 0000000..8f3042a --- /dev/null +++ b/SOURCES/0140-json-use-unsigned-for-refernce-counter.patch @@ -0,0 +1,36 @@ +From 46118fd04a49b25bc0c686b07d1b26309ab4e395 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 06:46:25 +0900 +Subject: [PATCH] json: use unsigned for refernce counter + +For other places, we use unsigned for reference counter. + +(cherry picked from commit 6dd18b34cf53ab663140f43f8814904c71cc29f7) + +Related: #2087652 +--- + src/shared/json.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/shared/json.c b/src/shared/json.c +index 6d23bdf4f9..bcc109abc2 100644 +--- a/src/shared/json.c ++++ b/src/shared/json.c +@@ -41,7 +41,7 @@ assert_cc(DEPTH_MAX <= UINT16_MAX); + + typedef struct JsonSource { + /* When we parse from a file or similar, encodes the filename, to indicate the source of a json variant */ +- size_t n_ref; ++ unsigned n_ref; + unsigned max_line; + unsigned max_column; + char name[]; +@@ -53,7 +53,7 @@ struct JsonVariant { + /* We either maintain a reference counter for this variant itself, or we are embedded into an + * array/object, in which case only that surrounding object is ref-counted. (If 'embedded' is false, + * see below.) */ +- size_t n_ref; ++ unsigned n_ref; + + /* If this JsonVariant is part of an array/object, then this field points to the surrounding + * JSON_VARIANT_ARRAY/JSON_VARIANT_OBJECT object. (If 'embedded' is true, see below.) */ diff --git a/SOURCES/0141-macro-check-over-flow-in-reference-counter.patch b/SOURCES/0141-macro-check-over-flow-in-reference-counter.patch new file mode 100644 index 0000000..4c7e15f --- /dev/null +++ b/SOURCES/0141-macro-check-over-flow-in-reference-counter.patch @@ -0,0 +1,31 @@ +From eb7eca006b5f290481720dc4d7fcdba88d8613cb Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 06:54:50 +0900 +Subject: [PATCH] macro: check over flow in reference counter + +(cherry picked from commit c8431e9e35a904673cf659fd238cb63b3c3896fc) + +Related: #2087652 +--- + src/basic/macro.h | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +diff --git a/src/basic/macro.h b/src/basic/macro.h +index aa04039e80..e7dc83ddc5 100644 +--- a/src/basic/macro.h ++++ b/src/basic/macro.h +@@ -387,8 +387,12 @@ static inline int __coverity_check_and_return__(int condition) { + if (!p) \ + return NULL; \ + \ +- assert(p->n_ref > 0); \ +- p->n_ref++; \ ++ /* For type check. */ \ ++ unsigned *q = &p->n_ref; \ ++ assert(*q > 0); \ ++ assert(*q < UINT_MAX); \ ++ \ ++ (*q)++; \ + return p; \ + } + diff --git a/SOURCES/0142-sd-bus-fix-reference-counter-to-be-incremented.patch b/SOURCES/0142-sd-bus-fix-reference-counter-to-be-incremented.patch new file mode 100644 index 0000000..13b37c1 --- /dev/null +++ b/SOURCES/0142-sd-bus-fix-reference-counter-to-be-incremented.patch @@ -0,0 +1,34 @@ +From 4dcd6089addae3ef6b6c82e36b30b178a4261249 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 07:05:07 +0900 +Subject: [PATCH] sd-bus: fix reference counter to be incremented + +Fixes #23097. + +(cherry picked from commit b21f237d996c8c18991a68e1204f060d07dc4745) + +Related: #2087652 +--- + src/libsystemd/sd-bus/bus-track.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c +index bc36673b83..891fd0c899 100644 +--- a/src/libsystemd/sd-bus/bus-track.c ++++ b/src/libsystemd/sd-bus/bus-track.c +@@ -191,12 +191,12 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) { + i = hashmap_get(track->names, name); + if (i) { + if (track->recursive) { +- unsigned k = track->n_ref + 1; ++ unsigned k = i->n_ref + 1; + +- if (k < track->n_ref) /* Check for overflow */ ++ if (k < i->n_ref) /* Check for overflow */ + return -EOVERFLOW; + +- track->n_ref = k; ++ i->n_ref = k; + } + + bus_track_remove_from_queue(track); diff --git a/SOURCES/0143-sd-bus-introduce-ref-unref-function-for-track_item.patch b/SOURCES/0143-sd-bus-introduce-ref-unref-function-for-track_item.patch new file mode 100644 index 0000000..53f7b4b --- /dev/null +++ b/SOURCES/0143-sd-bus-introduce-ref-unref-function-for-track_item.patch @@ -0,0 +1,105 @@ +From 6fcc3befd0ca9897071af071287e8758a30046f0 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 07:20:16 +0900 +Subject: [PATCH] sd-bus: introduce ref/unref function for track_item + +(cherry picked from commit c2d7dd35d2a8cda439384a385b0c1bec804b9b79) + +Related: #2087652 +--- + src/libsystemd/sd-bus/bus-track.c | 35 ++++++++++++++----------------- + 1 file changed, 16 insertions(+), 19 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c +index 891fd0c899..135dfddc5f 100644 +--- a/src/libsystemd/sd-bus/bus-track.c ++++ b/src/libsystemd/sd-bus/bus-track.c +@@ -40,7 +40,6 @@ struct sd_bus_track { + "arg0='", name, "'") + + static struct track_item* track_item_free(struct track_item *i) { +- + if (!i) + return NULL; + +@@ -49,7 +48,8 @@ static struct track_item* track_item_free(struct track_item *i) { + return mfree(i); + } + +-DEFINE_TRIVIAL_CLEANUP_FUNC(struct track_item*, track_item_free); ++DEFINE_PRIVATE_TRIVIAL_REF_UNREF_FUNC(struct track_item, track_item, track_item_free); ++DEFINE_TRIVIAL_CLEANUP_FUNC(struct track_item*, track_item_unref); + DEFINE_PRIVATE_HASH_OPS_WITH_VALUE_DESTRUCTOR(track_item_hash_ops, char, string_hash_func, string_compare_func, + struct track_item, track_item_free); + +@@ -180,7 +180,7 @@ static int on_name_owner_changed(sd_bus_message *message, void *userdata, sd_bus + } + + _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) { +- _cleanup_(track_item_freep) struct track_item *n = NULL; ++ _cleanup_(track_item_unrefp) struct track_item *n = NULL; + struct track_item *i; + const char *match; + int r; +@@ -190,14 +190,8 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) { + + i = hashmap_get(track->names, name); + if (i) { +- if (track->recursive) { +- unsigned k = i->n_ref + 1; +- +- if (k < i->n_ref) /* Check for overflow */ +- return -EOVERFLOW; +- +- i->n_ref = k; +- } ++ if (track->recursive) ++ track_item_ref(i); + + bus_track_remove_from_queue(track); + return 0; +@@ -207,9 +201,14 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) { + if (r < 0) + return r; + +- n = new0(struct track_item, 1); ++ n = new(struct track_item, 1); + if (!n) + return -ENOMEM; ++ ++ *n = (struct track_item) { ++ .n_ref = 1, ++ }; ++ + n->name = strdup(name); + if (!n->name) + return -ENOMEM; +@@ -241,8 +240,7 @@ _public_ int sd_bus_track_add_name(sd_bus_track *track, const char *name) { + return r; + } + +- n->n_ref = 1; +- n = NULL; ++ TAKE_PTR(n); + + bus_track_remove_from_queue(track); + track->modified = true; +@@ -264,14 +262,13 @@ _public_ int sd_bus_track_remove_name(sd_bus_track *track, const char *name) { + i = hashmap_get(track->names, name); + if (!i) + return -EUNATCH; +- if (i->n_ref <= 0) +- return -EUNATCH; + +- i->n_ref--; +- +- if (i->n_ref <= 0) ++ assert(i->n_ref >= 1); ++ if (i->n_ref <= 1) + return bus_track_remove_name_fully(track, name); + ++ track_item_unref(i); ++ + return 1; + } + diff --git a/SOURCES/0144-sd-bus-do-not-read-unused-value.patch b/SOURCES/0144-sd-bus-do-not-read-unused-value.patch new file mode 100644 index 0000000..c3387a5 --- /dev/null +++ b/SOURCES/0144-sd-bus-do-not-read-unused-value.patch @@ -0,0 +1,32 @@ +From 5f241b4af41402be5357d6ab10b4c54378363c89 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 07:25:09 +0900 +Subject: [PATCH] sd-bus: do not read unused value + +(cherry picked from commit 6a7ca27740be4229b4c9f540cd610b205ca5752c) + +Related: #2087652 +--- + src/libsystemd/sd-bus/bus-track.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c +index 135dfddc5f..1cbdb46f4c 100644 +--- a/src/libsystemd/sd-bus/bus-track.c ++++ b/src/libsystemd/sd-bus/bus-track.c +@@ -165,13 +165,13 @@ DEFINE_PUBLIC_TRIVIAL_REF_UNREF_FUNC(sd_bus_track, sd_bus_track, track_free); + + static int on_name_owner_changed(sd_bus_message *message, void *userdata, sd_bus_error *error) { + sd_bus_track *track = userdata; +- const char *name, *old, *new; ++ const char *name; + int r; + + assert(message); + assert(track); + +- r = sd_bus_message_read(message, "sss", &name, &old, &new); ++ r = sd_bus_message_read(message, "sss", &name, NULL, NULL); + if (r < 0) + return 0; + diff --git a/SOURCES/0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch b/SOURCES/0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch new file mode 100644 index 0000000..6826818 --- /dev/null +++ b/SOURCES/0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch @@ -0,0 +1,35 @@ +From f2ca27c7fa3e98cbb412871d7ea18b51e7f5f048 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 07:29:24 +0900 +Subject: [PATCH] sd-bus: do not return negative errno when unknown name is + specified + +When 'recursive' is false, then sd_bus_track_remove_name() does not +return negative errno when unknown name is specified. Let's follow the +same pattern for the case that 'recursive' is true. + +(cherry picked from commit 55bfacc6c33eaf3475762e71172b2ef504be5af8) + +Related: #2087652 +--- + src/libsystemd/sd-bus/bus-track.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c +index 1cbdb46f4c..c56bd03fc6 100644 +--- a/src/libsystemd/sd-bus/bus-track.c ++++ b/src/libsystemd/sd-bus/bus-track.c +@@ -256,12 +256,9 @@ _public_ int sd_bus_track_remove_name(sd_bus_track *track, const char *name) { + if (!track) /* Treat a NULL track object as an empty track object */ + return 0; + +- if (!track->recursive) +- return bus_track_remove_name_fully(track, name); +- + i = hashmap_get(track->names, name); + if (!i) +- return -EUNATCH; ++ return 0; + + assert(i->n_ref >= 1); + if (i->n_ref <= 1) diff --git a/SOURCES/0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch b/SOURCES/0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch new file mode 100644 index 0000000..80691c7 --- /dev/null +++ b/SOURCES/0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch @@ -0,0 +1,25 @@ +From 73c3e230dd66bedc82fa6dbf020c8d24592a32be Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 08:00:20 +0900 +Subject: [PATCH] sd-bus: use hashmap_contains() and drop unnecessary cast + +(cherry picked from commit c399ed923d6fa4bf731455d485cac5f00e060806) + +Related: #2087652 +--- + src/libsystemd/sd-bus/bus-track.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-bus/bus-track.c b/src/libsystemd/sd-bus/bus-track.c +index c56bd03fc6..4c44162108 100644 +--- a/src/libsystemd/sd-bus/bus-track.c ++++ b/src/libsystemd/sd-bus/bus-track.c +@@ -287,7 +287,7 @@ _public_ const char* sd_bus_track_contains(sd_bus_track *track, const char *name + if (!track) /* Let's consider a NULL object equivalent to an empty object */ + return NULL; + +- return hashmap_get(track->names, (void*) name) ? name : NULL; ++ return hashmap_contains(track->names, name) ? name : NULL; + } + + _public_ const char* sd_bus_track_first(sd_bus_track *track) { diff --git a/SOURCES/0147-test-shorten-code-a-bit.patch b/SOURCES/0147-test-shorten-code-a-bit.patch new file mode 100644 index 0000000..e640be2 --- /dev/null +++ b/SOURCES/0147-test-shorten-code-a-bit.patch @@ -0,0 +1,99 @@ +From 6ddb7fc35d7051627fa2772226e07296c28b316f Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 07:35:05 +0900 +Subject: [PATCH] test: shorten code a bit + +(cherry picked from commit 63ec7a849039fab830961fd7fee0c1e266735fc8) + +Related: #2087652 +--- + src/libsystemd/sd-bus/test-bus-track.c | 39 +++++++++----------------- + 1 file changed, 13 insertions(+), 26 deletions(-) + +diff --git a/src/libsystemd/sd-bus/test-bus-track.c b/src/libsystemd/sd-bus/test-bus-track.c +index 64aa88bb4f..238934a880 100644 +--- a/src/libsystemd/sd-bus/test-bus-track.c ++++ b/src/libsystemd/sd-bus/test-bus-track.c +@@ -26,7 +26,6 @@ static int track_cb_x(sd_bus_track *t, void *userdata) { + } + + static int track_cb_y(sd_bus_track *t, void *userdata) { +- int r; + + log_error("TRACK CB Y"); + +@@ -35,8 +34,7 @@ static int track_cb_y(sd_bus_track *t, void *userdata) { + + /* We got disconnected, let's close everything */ + +- r = sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t)), EXIT_SUCCESS); +- assert_se(r >= 0); ++ assert_se(sd_event_exit(sd_bus_get_event(sd_bus_track_get_bus(t)), EXIT_SUCCESS) >= 0); + + return 0; + } +@@ -51,8 +49,7 @@ int main(int argc, char *argv[]) { + + test_setup_logging(LOG_INFO); + +- r = sd_event_default(&event); +- assert_se(r >= 0); ++ assert_se(sd_event_default(&event) >= 0); + + r = sd_bus_open_user(&a); + if (IN_SET(r, -ECONNREFUSED, -ENOENT, -ENOMEDIUM)) { +@@ -63,43 +60,33 @@ int main(int argc, char *argv[]) { + } + assert_se(r >= 0); + +- r = sd_bus_attach_event(a, event, SD_EVENT_PRIORITY_NORMAL); +- assert_se(r >= 0); ++ assert_se(sd_bus_attach_event(a, event, SD_EVENT_PRIORITY_NORMAL) >= 0); + + if (use_system_bus) +- r = sd_bus_open_system(&b); ++ assert_se(sd_bus_open_system(&b) >= 0); + else +- r = sd_bus_open_user(&b); +- assert_se(r >= 0); ++ assert_se(sd_bus_open_user(&b) >= 0); + +- r = sd_bus_attach_event(b, event, SD_EVENT_PRIORITY_NORMAL); +- assert_se(r >= 0); ++ assert_se(sd_bus_attach_event(b, event, SD_EVENT_PRIORITY_NORMAL) >= 0); + + /* Watch b's name from a */ +- r = sd_bus_track_new(a, &x, track_cb_x, NULL); +- assert_se(r >= 0); ++ assert_se(sd_bus_track_new(a, &x, track_cb_x, NULL) >= 0); + +- r = sd_bus_get_unique_name(b, &unique); +- assert_se(r >= 0); ++ assert_se(sd_bus_get_unique_name(b, &unique) >= 0); + +- r = sd_bus_track_add_name(x, unique); +- assert_se(r >= 0); ++ assert_se(sd_bus_track_add_name(x, unique) >= 0); + + /* Watch's a's own name from a */ +- r = sd_bus_track_new(a, &y, track_cb_y, NULL); +- assert_se(r >= 0); ++ assert_se(sd_bus_track_new(a, &y, track_cb_y, NULL) >= 0); + +- r = sd_bus_get_unique_name(a, &unique); +- assert_se(r >= 0); ++ assert_se(sd_bus_get_unique_name(a, &unique) >= 0); + +- r = sd_bus_track_add_name(y, unique); +- assert_se(r >= 0); ++ assert_se(sd_bus_track_add_name(y, unique) >= 0); + + /* Now make b's name disappear */ + sd_bus_close(b); + +- r = sd_event_loop(event); +- assert_se(r >= 0); ++ assert_se(sd_event_loop(event) >= 0); + + assert_se(track_cb_called_x); + assert_se(track_cb_called_y); diff --git a/SOURCES/0148-test-add-several-tests-for-track-item.patch b/SOURCES/0148-test-add-several-tests-for-track-item.patch new file mode 100644 index 0000000..da0c5e3 --- /dev/null +++ b/SOURCES/0148-test-add-several-tests-for-track-item.patch @@ -0,0 +1,97 @@ +From 4895d281d18e244d8238c1f77e597ce43310531c Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sun, 17 Apr 2022 07:58:45 +0900 +Subject: [PATCH] test: add several tests for track item + +(cherry picked from commit 056a18e465bedb1bd35ce0bf78831be168c636cb) + +Related: #2087652 +--- + src/libsystemd/sd-bus/test-bus-track.c | 58 +++++++++++++++++++++++++- + 1 file changed, 57 insertions(+), 1 deletion(-) + +diff --git a/src/libsystemd/sd-bus/test-bus-track.c b/src/libsystemd/sd-bus/test-bus-track.c +index 238934a880..5604e84f52 100644 +--- a/src/libsystemd/sd-bus/test-bus-track.c ++++ b/src/libsystemd/sd-bus/test-bus-track.c +@@ -10,6 +10,7 @@ + + static bool track_cb_called_x = false; + static bool track_cb_called_y = false; ++static bool track_destroy_called_z = false; + + static int track_cb_x(sd_bus_track *t, void *userdata) { + +@@ -39,9 +40,17 @@ static int track_cb_y(sd_bus_track *t, void *userdata) { + return 0; + } + ++static int track_cb_z(sd_bus_track *t, void *userdata) { ++ assert_not_reached(); ++} ++ ++static void track_destroy_z(void *userdata) { ++ track_destroy_called_z = true; ++} ++ + int main(int argc, char *argv[]) { + _cleanup_(sd_event_unrefp) sd_event *event = NULL; +- _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL; ++ _cleanup_(sd_bus_track_unrefp) sd_bus_track *x = NULL, *y = NULL, *z = NULL; + _cleanup_(sd_bus_unrefp) sd_bus *a = NULL, *b = NULL; + bool use_system_bus = false; + const char *unique; +@@ -83,6 +92,53 @@ int main(int argc, char *argv[]) { + + assert_se(sd_bus_track_add_name(y, unique) >= 0); + ++ /* Basic tests. */ ++ assert_se(sd_bus_track_new(a, &z, track_cb_z, NULL) >= 0); ++ ++ /* non-recursive case */ ++ assert_se(sd_bus_track_set_recursive(z, false) >= 0); ++ assert_se(sd_bus_track_get_recursive(z) == 0); ++ assert_se(!sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 0); ++ assert_se(sd_bus_track_remove_name(z, unique) == 0); ++ assert_se(sd_bus_track_add_name(z, unique) >= 0); ++ assert_se(sd_bus_track_add_name(z, unique) >= 0); ++ assert_se(sd_bus_track_add_name(z, unique) >= 0); ++ assert_se(sd_bus_track_set_recursive(z, true) == -EBUSY); ++ assert_se(sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 1); ++ assert_se(sd_bus_track_remove_name(z, unique) == 1); ++ assert_se(!sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 0); ++ assert_se(sd_bus_track_remove_name(z, unique) == 0); ++ ++ /* recursive case */ ++ assert_se(sd_bus_track_set_recursive(z, true) >= 0); ++ assert_se(sd_bus_track_get_recursive(z) == 1); ++ assert_se(!sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 0); ++ assert_se(sd_bus_track_remove_name(z, unique) == 0); ++ assert_se(sd_bus_track_add_name(z, unique) >= 0); ++ assert_se(sd_bus_track_add_name(z, unique) >= 0); ++ assert_se(sd_bus_track_add_name(z, unique) >= 0); ++ assert_se(sd_bus_track_set_recursive(z, false) == -EBUSY); ++ assert_se(sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 3); ++ assert_se(sd_bus_track_remove_name(z, unique) == 1); ++ assert_se(sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 2); ++ assert_se(sd_bus_track_remove_name(z, unique) == 1); ++ assert_se(sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 1); ++ assert_se(sd_bus_track_remove_name(z, unique) == 1); ++ assert_se(!sd_bus_track_contains(z, unique)); ++ assert_se(sd_bus_track_count_name(z, unique) == 0); ++ assert_se(sd_bus_track_remove_name(z, unique) == 0); ++ ++ assert_se(sd_bus_track_set_destroy_callback(z, track_destroy_z) >= 0); ++ z = sd_bus_track_unref(z); ++ assert_se(track_destroy_called_z); ++ + /* Now make b's name disappear */ + sd_bus_close(b); + diff --git a/SOURCES/0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch b/SOURCES/0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch new file mode 100644 index 0000000..edf5faa --- /dev/null +++ b/SOURCES/0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch @@ -0,0 +1,46 @@ +From 776aab7656db605a856d2d3e9225f23779da5483 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Fri, 6 May 2022 14:01:22 +0900 +Subject: [PATCH] core/slice: make slice_freezer_action() return 0 if freezing + state is unchanged + +Fixes #23278. + +(cherry picked from commit d171e72e7afa11b238ba20758384d223b0c76e39) + +Related: #2087652 +--- + src/core/slice.c | 6 +----- + src/core/unit.c | 2 ++ + 2 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/src/core/slice.c b/src/core/slice.c +index 2e43c00119..c453aa033e 100644 +--- a/src/core/slice.c ++++ b/src/core/slice.c +@@ -389,11 +389,7 @@ static int slice_freezer_action(Unit *s, FreezerAction action) { + return r; + } + +- r = unit_cgroup_freezer_action(s, action); +- if (r < 0) +- return r; +- +- return 1; ++ return unit_cgroup_freezer_action(s, action); + } + + static int slice_freeze(Unit *s) { +diff --git a/src/core/unit.c b/src/core/unit.c +index 9cbed08987..aac87dcc7a 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -5822,6 +5822,8 @@ static int unit_freezer_action(Unit *u, FreezerAction action) { + if (r <= 0) + return r; + ++ assert(IN_SET(u->freezer_state, FREEZER_FREEZING, FREEZER_THAWING)); ++ + return 1; + } + diff --git a/SOURCES/0150-core-unit-fix-use-after-free.patch b/SOURCES/0150-core-unit-fix-use-after-free.patch new file mode 100644 index 0000000..e308d5f --- /dev/null +++ b/SOURCES/0150-core-unit-fix-use-after-free.patch @@ -0,0 +1,29 @@ +From b8ccf30c4654ed5697562842a8a608e627425370 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Mon, 9 May 2022 00:56:05 +0900 +Subject: [PATCH] core/unit: fix use-after-free + +Fixes #23312. + +(cherry picked from commit 734582830b58e000a26e18807ea277c18778573c) + +Related: #2087652 +--- + src/core/unit.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index aac87dcc7a..0eade13ee9 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -671,8 +671,8 @@ Unit* unit_free(Unit *u) { + + unit_dequeue_rewatch_pids(u); + +- sd_bus_slot_unref(u->match_bus_slot); +- sd_bus_track_unref(u->bus_track); ++ u->match_bus_slot = sd_bus_slot_unref(u->match_bus_slot); ++ u->bus_track = sd_bus_track_unref(u->bus_track); + u->deserialized_refs = strv_free(u->deserialized_refs); + u->pending_freezer_message = sd_bus_message_unref(u->pending_freezer_message); + diff --git a/SOURCES/0151-core-timer-fix-potential-use-after-free.patch b/SOURCES/0151-core-timer-fix-potential-use-after-free.patch new file mode 100644 index 0000000..c83f10b --- /dev/null +++ b/SOURCES/0151-core-timer-fix-potential-use-after-free.patch @@ -0,0 +1,25 @@ +From e9acfceb104c8f9ccec8b468b5d111844285f43a Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 10 May 2022 14:10:17 +0900 +Subject: [PATCH] core/timer: fix potential use-after-free + +(cherry picked from commit 756491af392a99c4286d876b0041535e50df80ad) + +Related: #2087652 +--- + src/core/timer.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/timer.c b/src/core/timer.c +index 0dc49dd46b..b439802bc2 100644 +--- a/src/core/timer.c ++++ b/src/core/timer.c +@@ -68,7 +68,7 @@ static void timer_done(Unit *u) { + t->monotonic_event_source = sd_event_source_disable_unref(t->monotonic_event_source); + t->realtime_event_source = sd_event_source_disable_unref(t->realtime_event_source); + +- free(t->stamp_path); ++ t->stamp_path = mfree(t->stamp_path); + } + + static int timer_verify(Timer *t) { diff --git a/SOURCES/0152-core-command-argument-can-be-longer-than-PATH_MAX.patch b/SOURCES/0152-core-command-argument-can-be-longer-than-PATH_MAX.patch new file mode 100644 index 0000000..c9880b5 --- /dev/null +++ b/SOURCES/0152-core-command-argument-can-be-longer-than-PATH_MAX.patch @@ -0,0 +1,64 @@ +From fdc436432f1ca2dd9df2f24728916ab1201015c1 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 5 Apr 2022 21:47:46 +0900 +Subject: [PATCH] core: command argument can be longer than PATH_MAX + +Fixes a bug introduced by 065364920281e1cf59cab989e17aff21790505c4. + +Fixes #22957. + +(cherry picked from commit 58dd4999dcc81a0ed92fbd78bce3592c3e3afe9e) + +Resolves: #2073994 +--- + src/core/load-fragment.c | 2 +- + src/test/test-load-fragment.c | 16 ++++++++++++++++ + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index ad5a0912fc..461e073269 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -1000,7 +1000,7 @@ int config_parse_exec( + if (r < 0) + return ignore ? 0 : -ENOEXEC; + +- r = unit_path_printf(u, word, &resolved); ++ r = unit_full_printf(u, word, &resolved); + if (r < 0) { + log_syntax(unit, ignore ? LOG_WARNING : LOG_ERR, filename, line, r, + "Failed to resolve unit specifiers in %s%s: %m", +diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c +index fbe4744333..c579be4150 100644 +--- a/src/test/test-load-fragment.c ++++ b/src/test/test-load-fragment.c +@@ -10,6 +10,7 @@ + #include "capability-util.h" + #include "conf-parser.h" + #include "fd-util.h" ++#include "fileio.h" + #include "format-util.h" + #include "fs-util.h" + #include "hashmap.h" +@@ -416,6 +417,21 @@ TEST(config_parse_exec) { + assert_se(r == 0); + assert_se(c1->command_next == NULL); + ++ log_info("/* long arg */"); /* See issue #22957. */ ++ ++ char x[LONG_LINE_MAX-100], *y; ++ y = mempcpy(x, "/bin/echo ", STRLEN("/bin/echo ")); ++ memset(y, 'x', sizeof(x) - STRLEN("/bin/echo ") - 1); ++ x[sizeof(x) - 1] = '\0'; ++ ++ r = config_parse_exec(NULL, "fake", 5, "section", 1, ++ "LValue", 0, x, ++ &c, u); ++ assert_se(r >= 0); ++ c1 = c1->command_next; ++ check_execcommand(c1, ++ "/bin/echo", NULL, y, NULL, false); ++ + log_info("/* empty argument, reset */"); + r = config_parse_exec(NULL, "fake", 4, "section", 1, + "LValue", 0, "", diff --git a/SOURCES/0153-shared-install-consistently-use-lp-as-the-name-for-t.patch b/SOURCES/0153-shared-install-consistently-use-lp-as-the-name-for-t.patch new file mode 100644 index 0000000..fa69c99 --- /dev/null +++ b/SOURCES/0153-shared-install-consistently-use-lp-as-the-name-for-t.patch @@ -0,0 +1,1534 @@ +From a2632eca864670f7a88e1a81947a9e726282e531 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 2 Mar 2022 17:17:39 +0100 +Subject: [PATCH] shared/install: consistently use 'lp' as the name for the + LookupPaths instance + +Most of the codebase does this. Here we were using 'p' or 'paths' +instead. Those names are very generic and not good for a "global-like" +object like the LookupPaths instance. And we also have 'path' variable, +and it's confusing to have 'path' and 'paths' in the same function that +are unrelated. + +Also pass down LookupPaths* lower in the call stack, in preparation for +future changes. + +(cherry picked from commit c3e7fba07c19f232f5945c07e7cc730986615adf) + +Related: #2082131 +--- + src/shared/install.c | 427 +++++++++++++++++++++---------------------- + 1 file changed, 212 insertions(+), 215 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 8f1af755fa..c6cbe96fdb 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -98,7 +98,7 @@ static const char *const unit_file_type_table[_UNIT_FILE_TYPE_MAX] = { + + DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(unit_file_type, UnitFileType); + +-static int in_search_path(const LookupPaths *p, const char *path) { ++static int in_search_path(const LookupPaths *lp, const char *path) { + _cleanup_free_ char *parent = NULL; + + assert(path); +@@ -107,19 +107,16 @@ static int in_search_path(const LookupPaths *p, const char *path) { + if (!parent) + return -ENOMEM; + +- return path_strv_contains(p->search_path, parent); ++ return path_strv_contains(lp->search_path, parent); + } + +-static const char* skip_root(const LookupPaths *p, const char *path) { +- char *e; +- +- assert(p); ++static const char* skip_root(const char *root_dir, const char *path) { + assert(path); + +- if (!p->root_dir) ++ if (!root_dir) + return path; + +- e = path_startswith(path, p->root_dir); ++ const char *e = path_startswith(path, root_dir); + if (!e) + return NULL; + +@@ -134,52 +131,52 @@ static const char* skip_root(const LookupPaths *p, const char *path) { + return e; + } + +-static int path_is_generator(const LookupPaths *p, const char *path) { ++static int path_is_generator(const LookupPaths *lp, const char *path) { + _cleanup_free_ char *parent = NULL; + +- assert(p); ++ assert(lp); + assert(path); + + parent = dirname_malloc(path); + if (!parent) + return -ENOMEM; + +- return path_equal_ptr(parent, p->generator) || +- path_equal_ptr(parent, p->generator_early) || +- path_equal_ptr(parent, p->generator_late); ++ return path_equal_ptr(parent, lp->generator) || ++ path_equal_ptr(parent, lp->generator_early) || ++ path_equal_ptr(parent, lp->generator_late); + } + +-static int path_is_transient(const LookupPaths *p, const char *path) { ++static int path_is_transient(const LookupPaths *lp, const char *path) { + _cleanup_free_ char *parent = NULL; + +- assert(p); ++ assert(lp); + assert(path); + + parent = dirname_malloc(path); + if (!parent) + return -ENOMEM; + +- return path_equal_ptr(parent, p->transient); ++ return path_equal_ptr(parent, lp->transient); + } + +-static int path_is_control(const LookupPaths *p, const char *path) { ++static int path_is_control(const LookupPaths *lp, const char *path) { + _cleanup_free_ char *parent = NULL; + +- assert(p); ++ assert(lp); + assert(path); + + parent = dirname_malloc(path); + if (!parent) + return -ENOMEM; + +- return path_equal_ptr(parent, p->persistent_control) || +- path_equal_ptr(parent, p->runtime_control); ++ return path_equal_ptr(parent, lp->persistent_control) || ++ path_equal_ptr(parent, lp->runtime_control); + } + +-static int path_is_config(const LookupPaths *p, const char *path, bool check_parent) { ++static int path_is_config(const LookupPaths *lp, const char *path, bool check_parent) { + _cleanup_free_ char *parent = NULL; + +- assert(p); ++ assert(lp); + assert(path); + + /* Note that we do *not* have generic checks for /etc or /run in place, since with +@@ -193,21 +190,21 @@ static int path_is_config(const LookupPaths *p, const char *path, bool check_par + path = parent; + } + +- return path_equal_ptr(path, p->persistent_config) || +- path_equal_ptr(path, p->runtime_config); ++ return path_equal_ptr(path, lp->persistent_config) || ++ path_equal_ptr(path, lp->runtime_config); + } + +-static int path_is_runtime(const LookupPaths *p, const char *path, bool check_parent) { ++static int path_is_runtime(const LookupPaths *lp, const char *path, bool check_parent) { + _cleanup_free_ char *parent = NULL; + const char *rpath; + +- assert(p); ++ assert(lp); + assert(path); + + /* Everything in /run is considered runtime. On top of that we also add + * explicit checks for the various runtime directories, as safety net. */ + +- rpath = skip_root(p, path); ++ rpath = skip_root(lp->root_dir, path); + if (rpath && path_startswith(rpath, "/run")) + return true; + +@@ -219,21 +216,21 @@ static int path_is_runtime(const LookupPaths *p, const char *path, bool check_pa + path = parent; + } + +- return path_equal_ptr(path, p->runtime_config) || +- path_equal_ptr(path, p->generator) || +- path_equal_ptr(path, p->generator_early) || +- path_equal_ptr(path, p->generator_late) || +- path_equal_ptr(path, p->transient) || +- path_equal_ptr(path, p->runtime_control); ++ return path_equal_ptr(path, lp->runtime_config) || ++ path_equal_ptr(path, lp->generator) || ++ path_equal_ptr(path, lp->generator_early) || ++ path_equal_ptr(path, lp->generator_late) || ++ path_equal_ptr(path, lp->transient) || ++ path_equal_ptr(path, lp->runtime_control); + } + +-static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) { ++static int path_is_vendor_or_generator(const LookupPaths *lp, const char *path) { + const char *rpath; + +- assert(p); ++ assert(lp); + assert(path); + +- rpath = skip_root(p, path); ++ rpath = skip_root(lp->root_dir, path); + if (!rpath) + return 0; + +@@ -245,19 +242,19 @@ static int path_is_vendor_or_generator(const LookupPaths *p, const char *path) { + return true; + #endif + +- if (path_is_generator(p, rpath)) ++ if (path_is_generator(lp, rpath)) + return true; + + return path_equal(rpath, SYSTEM_DATA_UNIT_DIR); + } + +-static const char* config_path_from_flags(const LookupPaths *paths, UnitFileFlags flags) { +- assert(paths); ++static const char* config_path_from_flags(const LookupPaths *lp, UnitFileFlags flags) { ++ assert(lp); + + if (FLAGS_SET(flags, UNIT_FILE_PORTABLE)) +- return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_attached : paths->persistent_attached; ++ return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_attached : lp->persistent_attached; + else +- return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? paths->runtime_config : paths->persistent_config; ++ return FLAGS_SET(flags, UNIT_FILE_RUNTIME) ? lp->runtime_config : lp->persistent_config; + } + + int unit_file_changes_add( +@@ -435,7 +432,7 @@ static bool chroot_symlinks_same(const char *root, const char *wd, const char *a + } + + static int create_symlink( +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *old_path, + const char *new_path, + bool force, +@@ -449,7 +446,7 @@ static int create_symlink( + assert(old_path); + assert(new_path); + +- rp = skip_root(paths, old_path); ++ rp = skip_root(lp->root_dir, old_path); + if (rp) + old_path = rp; + +@@ -487,7 +484,7 @@ static int create_symlink( + if (!dirname) + return -ENOMEM; + +- if (chroot_symlinks_same(paths->root_dir, dirname, dest, old_path)) { ++ if (chroot_symlinks_same(lp->root_dir, dirname, dest, old_path)) { + log_debug("Symlink %s → %s already exists", new_path, dest); + return 1; + } +@@ -642,7 +639,7 @@ static int remove_marked_symlinks_fd( + /* Now, remember the full path (but with the root prefix removed) of + * the symlink we just removed, and remove any symlinks to it, too. */ + +- rp = skip_root(lp, p); ++ rp = skip_root(lp->root_dir, p); + q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: p); + if (q < 0) + return q; +@@ -861,7 +858,7 @@ static int find_symlinks( + + static int find_symlinks_in_scope( + UnitFileScope scope, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const UnitFileInstallInfo *i, + bool match_name, + UnitFileState *state) { +@@ -872,23 +869,23 @@ static int find_symlinks_in_scope( + char **p; + int r; + +- assert(paths); ++ assert(lp); + assert(i); + +- /* As we iterate over the list of search paths in paths->search_path, we may encounter "same name" ++ /* As we iterate over the list of search paths in lp->search_path, we may encounter "same name" + * symlinks. The ones which are "below" (i.e. have lower priority) than the unit file itself are + * effectively masked, so we should ignore them. */ + +- STRV_FOREACH(p, paths->search_path) { ++ STRV_FOREACH(p, lp->search_path) { + bool same_name_link = false; + +- r = find_symlinks(paths->root_dir, i, match_name, ignore_same_name, *p, &same_name_link); ++ r = find_symlinks(lp->root_dir, i, match_name, ignore_same_name, *p, &same_name_link); + if (r < 0) + return r; + if (r > 0) { + /* We found symlinks in this dir? Yay! Let's see where precisely it is enabled. */ + +- if (path_equal_ptr(*p, paths->persistent_config)) { ++ if (path_equal_ptr(*p, lp->persistent_config)) { + /* This is the best outcome, let's return it immediately. */ + *state = UNIT_FILE_ENABLED; + return 1; +@@ -900,7 +897,7 @@ static int find_symlinks_in_scope( + return 1; + } + +- r = path_is_runtime(paths, *p, false); ++ r = path_is_runtime(lp, *p, false); + if (r < 0) + return r; + if (r > 0) +@@ -909,10 +906,10 @@ static int find_symlinks_in_scope( + enabled_at_all = true; + + } else if (same_name_link) { +- if (path_equal_ptr(*p, paths->persistent_config)) ++ if (path_equal_ptr(*p, lp->persistent_config)) + same_name_link_config = true; + else { +- r = path_is_runtime(paths, *p, false); ++ r = path_is_runtime(lp, *p, false); + if (r < 0) + return r; + if (r > 0) +@@ -990,11 +987,11 @@ static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *nam + + static int install_info_may_process( + const UnitFileInstallInfo *i, +- const LookupPaths *paths, ++ const LookupPaths *lp, + UnitFileChange **changes, + size_t *n_changes) { + assert(i); +- assert(paths); ++ assert(lp); + + /* Checks whether the loaded unit file is one we should process, or is masked, + * transient or generated and thus not subject to enable/disable operations. */ +@@ -1003,8 +1000,8 @@ static int install_info_may_process( + unit_file_changes_add(changes, n_changes, -ERFKILL, i->path, NULL); + return -ERFKILL; + } +- if (path_is_generator(paths, i->path) || +- path_is_transient(paths, i->path)) { ++ if (path_is_generator(lp, i->path) || ++ path_is_transient(lp, i->path)) { + unit_file_changes_add(changes, n_changes, -EADDRNOTAVAIL, i->path, NULL); + return -EADDRNOTAVAIL; + } +@@ -1339,20 +1336,20 @@ static int unit_file_load_or_readlink( + InstallContext *c, + UnitFileInstallInfo *info, + const char *path, +- const char *root_dir, ++ const LookupPaths *lp, + SearchFlags flags) { + + _cleanup_free_ char *resolved = NULL; + int r; + +- r = unit_file_load(c, info, path, root_dir, flags); ++ r = unit_file_load(c, info, path, lp->root_dir, flags); + if (r != -ELOOP || (flags & SEARCH_DROPIN)) + return r; + +- r = chase_symlinks(path, root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL); ++ r = chase_symlinks(path, lp->root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL); + if (r >= 0 && +- root_dir && +- path_equal_ptr(path_startswith(resolved, root_dir), "dev/null")) ++ lp->root_dir && ++ path_equal_ptr(path_startswith(resolved, lp->root_dir), "dev/null")) + /* When looking under root_dir, we can't expect /dev/ to be mounted, + * so let's see if the path is a (possibly dangling) symlink to /dev/null. */ + info->type = UNIT_FILE_TYPE_MASKED; +@@ -1402,7 +1399,7 @@ static int unit_file_load_or_readlink( + + if (path_is_absolute(target)) + /* This is an absolute path, prefix the root so that we always deal with fully qualified paths */ +- info->symlink_target = path_join(root_dir, target); ++ info->symlink_target = path_join(lp->root_dir, target); + else + /* This is a relative path, take it relative to the dir the symlink is located in. */ + info->symlink_target = file_in_same_dir(path, target); +@@ -1418,7 +1415,7 @@ static int unit_file_load_or_readlink( + static int unit_file_search( + InstallContext *c, + UnitFileInstallInfo *info, +- const LookupPaths *paths, ++ const LookupPaths *lp, + SearchFlags flags) { + + const char *dropin_dir_name = NULL, *dropin_template_dir_name = NULL; +@@ -1429,14 +1426,14 @@ static int unit_file_search( + char **p; + + assert(info); +- assert(paths); ++ assert(lp); + + /* Was this unit already loaded? */ + if (info->type != _UNIT_FILE_TYPE_INVALID) + return 0; + + if (info->path) +- return unit_file_load_or_readlink(c, info, info->path, paths->root_dir, flags); ++ return unit_file_load_or_readlink(c, info, info->path, lp, flags); + + assert(info->name); + +@@ -1446,14 +1443,14 @@ static int unit_file_search( + return r; + } + +- STRV_FOREACH(p, paths->search_path) { ++ STRV_FOREACH(p, lp->search_path) { + _cleanup_free_ char *path = NULL; + + path = path_join(*p, info->name); + if (!path) + return -ENOMEM; + +- r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags); ++ r = unit_file_load_or_readlink(c, info, path, lp, flags); + if (r >= 0) { + info->path = TAKE_PTR(path); + result = r; +@@ -1469,14 +1466,14 @@ static int unit_file_search( + * enablement was requested. We will check if it is + * possible to load template unit file. */ + +- STRV_FOREACH(p, paths->search_path) { ++ STRV_FOREACH(p, lp->search_path) { + _cleanup_free_ char *path = NULL; + + path = path_join(*p, template); + if (!path) + return -ENOMEM; + +- r = unit_file_load_or_readlink(c, info, path, paths->root_dir, flags); ++ r = unit_file_load_or_readlink(c, info, path, lp, flags); + if (r >= 0) { + info->path = TAKE_PTR(path); + result = r; +@@ -1498,7 +1495,7 @@ static int unit_file_search( + /* Search for drop-in directories */ + + dropin_dir_name = strjoina(info->name, ".d"); +- STRV_FOREACH(p, paths->search_path) { ++ STRV_FOREACH(p, lp->search_path) { + char *path; + + path = path_join(*p, dropin_dir_name); +@@ -1512,7 +1509,7 @@ static int unit_file_search( + + if (template) { + dropin_template_dir_name = strjoina(template, ".d"); +- STRV_FOREACH(p, paths->search_path) { ++ STRV_FOREACH(p, lp->search_path) { + char *path; + + path = path_join(*p, dropin_template_dir_name); +@@ -1532,7 +1529,7 @@ static int unit_file_search( + return log_debug_errno(r, "Failed to get list of conf files: %m"); + + STRV_FOREACH(p, files) { +- r = unit_file_load_or_readlink(c, info, *p, paths->root_dir, flags | SEARCH_DROPIN); ++ r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN); + if (r < 0) + return log_debug_errno(r, "Failed to load conf file %s: %m", *p); + } +@@ -1543,7 +1540,7 @@ static int unit_file_search( + static int install_info_follow( + InstallContext *c, + UnitFileInstallInfo *i, +- const char *root_dir, ++ const LookupPaths *lp, + SearchFlags flags, + bool ignore_different_name) { + +@@ -1564,7 +1561,7 @@ static int install_info_follow( + free_and_replace(i->path, i->symlink_target); + i->type = _UNIT_FILE_TYPE_INVALID; + +- return unit_file_load_or_readlink(c, i, i->path, root_dir, flags); ++ return unit_file_load_or_readlink(c, i, i->path, lp, flags); + } + + /** +@@ -1574,7 +1571,7 @@ static int install_info_follow( + static int install_info_traverse( + UnitFileScope scope, + InstallContext *c, +- const LookupPaths *paths, ++ const LookupPaths *lp, + UnitFileInstallInfo *start, + SearchFlags flags, + UnitFileInstallInfo **ret) { +@@ -1583,11 +1580,11 @@ static int install_info_traverse( + unsigned k = 0; + int r; + +- assert(paths); ++ assert(lp); + assert(start); + assert(c); + +- r = unit_file_search(c, start, paths, flags); ++ r = unit_file_search(c, start, lp, flags); + if (r < 0) + return r; + +@@ -1599,14 +1596,14 @@ static int install_info_traverse( + return -ELOOP; + + if (!(flags & SEARCH_FOLLOW_CONFIG_SYMLINKS)) { +- r = path_is_config(paths, i->path, true); ++ r = path_is_config(lp, i->path, true); + if (r < 0) + return r; + if (r > 0) + return -ELOOP; + } + +- r = install_info_follow(c, i, paths->root_dir, flags, false); ++ r = install_info_follow(c, i, lp, flags, false); + if (r == -EXDEV) { + _cleanup_free_ char *buffer = NULL; + const char *bn; +@@ -1635,7 +1632,7 @@ static int install_info_traverse( + /* We filled in the instance, and the target stayed the same? If so, then let's + * honour the link as it is. */ + +- r = install_info_follow(c, i, paths->root_dir, flags, true); ++ r = install_info_follow(c, i, lp, flags, true); + if (r < 0) + return r; + +@@ -1645,12 +1642,12 @@ static int install_info_traverse( + bn = buffer; + } + +- r = install_info_add(c, bn, NULL, paths->root_dir, /* auxiliary= */ false, &i); ++ r = install_info_add(c, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i); + if (r < 0) + return r; + + /* Try again, with the new target we found. */ +- r = unit_file_search(c, i, paths, flags); ++ r = unit_file_search(c, i, lp, flags); + if (r == -ENOENT) + /* Translate error code to highlight this specific case */ + return -ENOLINK; +@@ -1672,7 +1669,7 @@ static int install_info_traverse( + */ + static int install_info_add_auto( + InstallContext *c, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *name_or_path, + UnitFileInstallInfo **ret) { + +@@ -1682,17 +1679,17 @@ static int install_info_add_auto( + if (path_is_absolute(name_or_path)) { + const char *pp; + +- pp = prefix_roota(paths->root_dir, name_or_path); ++ pp = prefix_roota(lp->root_dir, name_or_path); + +- return install_info_add(c, NULL, pp, paths->root_dir, /* auxiliary= */ false, ret); ++ return install_info_add(c, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret); + } else +- return install_info_add(c, name_or_path, NULL, paths->root_dir, /* auxiliary= */ false, ret); ++ return install_info_add(c, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret); + } + + static int install_info_discover( + UnitFileScope scope, + InstallContext *c, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *name, + SearchFlags flags, + UnitFileInstallInfo **ret, +@@ -1703,12 +1700,12 @@ static int install_info_discover( + int r; + + assert(c); +- assert(paths); ++ assert(lp); + assert(name); + +- r = install_info_add_auto(c, paths, name, &i); ++ r = install_info_add_auto(c, lp, name, &i); + if (r >= 0) +- r = install_info_traverse(scope, c, paths, i, flags, ret); ++ r = install_info_traverse(scope, c, lp, i, flags, ret); + + if (r < 0) + unit_file_changes_add(changes, n_changes, r, name, NULL); +@@ -1718,7 +1715,7 @@ static int install_info_discover( + static int install_info_discover_and_check( + UnitFileScope scope, + InstallContext *c, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *name, + SearchFlags flags, + UnitFileInstallInfo **ret, +@@ -1727,11 +1724,11 @@ static int install_info_discover_and_check( + + int r; + +- r = install_info_discover(scope, c, paths, name, flags, ret, changes, n_changes); ++ r = install_info_discover(scope, c, lp, name, flags, ret, changes, n_changes); + if (r < 0) + return r; + +- return install_info_may_process(ret ? *ret : NULL, paths, changes, n_changes); ++ return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes); + } + + int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst) { +@@ -1812,7 +1809,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + + static int install_info_symlink_alias( + UnitFileInstallInfo *i, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *config_path, + bool force, + UnitFileChange **changes, +@@ -1822,7 +1819,7 @@ static int install_info_symlink_alias( + int r = 0, q; + + assert(i); +- assert(paths); ++ assert(lp); + assert(config_path); + + STRV_FOREACH(s, i->aliases) { +@@ -1840,7 +1837,7 @@ static int install_info_symlink_alias( + if (!alias_path) + return -ENOMEM; + +- q = create_symlink(paths, i->path, alias_path, force, changes, n_changes); ++ q = create_symlink(lp, i->path, alias_path, force, changes, n_changes); + if (r == 0) + r = q; + } +@@ -1852,7 +1849,7 @@ static int install_info_symlink_wants( + UnitFileScope scope, + UnitFileFlags file_flags, + UnitFileInstallInfo *i, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *config_path, + char **list, + const char *suffix, +@@ -1866,7 +1863,7 @@ static int install_info_symlink_wants( + int r = 0, q; + + assert(i); +- assert(paths); ++ assert(lp); + assert(config_path); + + if (strv_isempty(list)) +@@ -1889,7 +1886,7 @@ static int install_info_symlink_wants( + return r; + + instance.name = buf; +- r = unit_file_search(NULL, &instance, paths, SEARCH_FOLLOW_CONFIG_SYMLINKS); ++ r = unit_file_search(NULL, &instance, lp, SEARCH_FOLLOW_CONFIG_SYMLINKS); + if (r < 0) + return r; + +@@ -1943,11 +1940,11 @@ static int install_info_symlink_wants( + if (!path) + return -ENOMEM; + +- q = create_symlink(paths, i->path, path, true, changes, n_changes); ++ q = create_symlink(lp, i->path, path, true, changes, n_changes); + if (r == 0) + r = q; + +- if (unit_file_exists(scope, paths, dst) == 0) ++ if (unit_file_exists(scope, lp, dst) == 0) + unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, i->path); + } + +@@ -1956,7 +1953,7 @@ static int install_info_symlink_wants( + + static int install_info_symlink_link( + UnitFileInstallInfo *i, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *config_path, + bool force, + UnitFileChange **changes, +@@ -1966,11 +1963,11 @@ static int install_info_symlink_link( + int r; + + assert(i); +- assert(paths); ++ assert(lp); + assert(config_path); + assert(i->path); + +- r = in_search_path(paths, i->path); ++ r = in_search_path(lp, i->path); + if (r < 0) + return r; + if (r > 0) +@@ -1980,14 +1977,14 @@ static int install_info_symlink_link( + if (!path) + return -ENOMEM; + +- return create_symlink(paths, i->path, path, force, changes, n_changes); ++ return create_symlink(lp, i->path, path, force, changes, n_changes); + } + + static int install_info_apply( + UnitFileScope scope, + UnitFileFlags file_flags, + UnitFileInstallInfo *i, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *config_path, + UnitFileChange **changes, + size_t *n_changes) { +@@ -1995,7 +1992,7 @@ static int install_info_apply( + int r, q; + + assert(i); +- assert(paths); ++ assert(lp); + assert(config_path); + + if (i->type != UNIT_FILE_TYPE_REGULAR) +@@ -2003,17 +2000,17 @@ static int install_info_apply( + + bool force = file_flags & UNIT_FILE_FORCE; + +- r = install_info_symlink_alias(i, paths, config_path, force, changes, n_changes); ++ r = install_info_symlink_alias(i, lp, config_path, force, changes, n_changes); + +- q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->wanted_by, ".wants/", changes, n_changes); ++ q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->wanted_by, ".wants/", changes, n_changes); + if (r == 0) + r = q; + +- q = install_info_symlink_wants(scope, file_flags, i, paths, config_path, i->required_by, ".requires/", changes, n_changes); ++ q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->required_by, ".requires/", changes, n_changes); + if (r == 0) + r = q; + +- q = install_info_symlink_link(i, paths, config_path, force, changes, n_changes); ++ q = install_info_symlink_link(i, lp, config_path, force, changes, n_changes); + /* Do not count links to the unit file towards the "carries_install_info" count */ + if (r == 0 && q < 0) + r = q; +@@ -2025,7 +2022,7 @@ static int install_context_apply( + UnitFileScope scope, + UnitFileFlags file_flags, + InstallContext *c, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *config_path, + SearchFlags flags, + UnitFileChange **changes, +@@ -2035,7 +2032,7 @@ static int install_context_apply( + int r; + + assert(c); +- assert(paths); ++ assert(lp); + assert(config_path); + + if (ordered_hashmap_isempty(c->will_process)) +@@ -2053,7 +2050,7 @@ static int install_context_apply( + if (q < 0) + return q; + +- q = install_info_traverse(scope, c, paths, i, flags, NULL); ++ q = install_info_traverse(scope, c, lp, i, flags, NULL); + if (q < 0) { + if (i->auxiliary) { + q = unit_file_changes_add(changes, n_changes, UNIT_FILE_AUXILIARY_FAILED, NULL, i->name); +@@ -2080,7 +2077,7 @@ static int install_context_apply( + if (i->type != UNIT_FILE_TYPE_REGULAR) + continue; + +- q = install_info_apply(scope, file_flags, i, paths, config_path, changes, n_changes); ++ q = install_info_apply(scope, file_flags, i, lp, config_path, changes, n_changes); + if (r >= 0) { + if (q < 0) + r = q; +@@ -2095,7 +2092,7 @@ static int install_context_apply( + static int install_context_mark_for_removal( + UnitFileScope scope, + InstallContext *c, +- const LookupPaths *paths, ++ const LookupPaths *lp, + Set **remove_symlinks_to, + const char *config_path, + UnitFileChange **changes, +@@ -2105,7 +2102,7 @@ static int install_context_mark_for_removal( + int r; + + assert(c); +- assert(paths); ++ assert(lp); + assert(config_path); + + /* Marks all items for removal */ +@@ -2123,7 +2120,7 @@ static int install_context_mark_for_removal( + if (r < 0) + return r; + +- r = install_info_traverse(scope, c, paths, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL); ++ r = install_info_traverse(scope, c, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL); + if (r == -ENOLINK) { + log_debug_errno(r, "Name %s leads to a dangling symlink, removing name.", i->name); + unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_DANGLING, i->path ?: i->name, NULL); +@@ -2164,7 +2161,7 @@ int unit_file_mask( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + const char *config_path; + char **i; + int r; +@@ -2172,11 +2169,11 @@ int unit_file_mask( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config; ++ config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config; + if (!config_path) + return -ENXIO; + +@@ -2194,7 +2191,7 @@ int unit_file_mask( + if (!path) + return -ENOMEM; + +- q = create_symlink(&paths, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); ++ q = create_symlink(&lp, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); + if (q < 0 && r >= 0) + r = q; + } +@@ -2210,7 +2207,7 @@ int unit_file_unmask( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; + _cleanup_strv_free_ char **todo = NULL; + const char *config_path; +@@ -2222,11 +2219,11 @@ int unit_file_unmask( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config; ++ config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config; + if (!config_path) + return -ENXIO; + +@@ -2283,13 +2280,13 @@ int unit_file_unmask( + + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, path, NULL); + +- rp = skip_root(&paths, path); ++ rp = skip_root(lp.root_dir, path); + q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: path); + if (q < 0) + return q; + } + +- q = remove_marked_symlinks(remove_symlinks_to, config_path, &paths, dry_run, changes, n_changes); ++ q = remove_marked_symlinks(remove_symlinks_to, config_path, &lp, dry_run, changes, n_changes); + if (r >= 0) + r = q; + +@@ -2304,7 +2301,7 @@ int unit_file_link( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_strv_free_ char **todo = NULL; + const char *config_path; + size_t n_todo = 0; +@@ -2314,11 +2311,11 @@ int unit_file_link( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = (flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config; ++ config_path = (flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config; + if (!config_path) + return -ENXIO; + +@@ -2334,7 +2331,7 @@ int unit_file_link( + if (!unit_name_is_valid(fn, UNIT_NAME_ANY)) + return -EINVAL; + +- full = path_join(paths.root_dir, *i); ++ full = path_join(lp.root_dir, *i); + if (!full) + return -ENOMEM; + +@@ -2344,7 +2341,7 @@ int unit_file_link( + if (r < 0) + return r; + +- q = in_search_path(&paths, *i); ++ q = in_search_path(&lp, *i); + if (q < 0) + return q; + if (q > 0) +@@ -2370,7 +2367,7 @@ int unit_file_link( + if (!new_path) + return -ENOMEM; + +- q = create_symlink(&paths, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); ++ q = create_symlink(&lp, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); + if (q < 0 && r >= 0) + r = q; + } +@@ -2378,23 +2375,23 @@ int unit_file_link( + return r; + } + +-static int path_shall_revert(const LookupPaths *paths, const char *path) { ++static int path_shall_revert(const LookupPaths *lp, const char *path) { + int r; + +- assert(paths); ++ assert(lp); + assert(path); + + /* Checks whether the path is one where the drop-in directories shall be removed. */ + +- r = path_is_config(paths, path, true); ++ r = path_is_config(lp, path, true); + if (r != 0) + return r; + +- r = path_is_control(paths, path); ++ r = path_is_control(lp, path); + if (r != 0) + return r; + +- return path_is_transient(paths, path); ++ return path_is_transient(lp, path); + } + + int unit_file_revert( +@@ -2405,7 +2402,7 @@ int unit_file_revert( + size_t *n_changes) { + + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_strv_free_ char **todo = NULL; + size_t n_todo = 0; + char **i; +@@ -2422,7 +2419,7 @@ int unit_file_revert( + * We remove all that in both the runtime and the persistent directories, if that applies. + */ + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +@@ -2433,7 +2430,7 @@ int unit_file_revert( + if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) + return -EINVAL; + +- STRV_FOREACH(p, paths.search_path) { ++ STRV_FOREACH(p, lp.search_path) { + _cleanup_free_ char *path = NULL, *dropin = NULL; + struct stat st; + +@@ -2447,7 +2444,7 @@ int unit_file_revert( + return -errno; + } else if (S_ISREG(st.st_mode)) { + /* Check if there's a vendor version */ +- r = path_is_vendor_or_generator(&paths, path); ++ r = path_is_vendor_or_generator(&lp, path); + if (r < 0) + return r; + if (r > 0) +@@ -2464,7 +2461,7 @@ int unit_file_revert( + return -errno; + } else if (S_ISDIR(st.st_mode)) { + /* Remove the drop-ins */ +- r = path_shall_revert(&paths, dropin); ++ r = path_shall_revert(&lp, dropin); + if (r < 0) + return r; + if (r > 0) { +@@ -2480,7 +2477,7 @@ int unit_file_revert( + continue; + + /* OK, there's a vendor version, hence drop all configuration versions */ +- STRV_FOREACH(p, paths.search_path) { ++ STRV_FOREACH(p, lp.search_path) { + _cleanup_free_ char *path = NULL; + struct stat st; + +@@ -2493,7 +2490,7 @@ int unit_file_revert( + if (errno != ENOENT) + return -errno; + } else if (S_ISREG(st.st_mode) || S_ISLNK(st.st_mode)) { +- r = path_is_config(&paths, path, true); ++ r = path_is_config(&lp, path, true); + if (r < 0) + return r; + if (r > 0) { +@@ -2534,17 +2531,17 @@ int unit_file_revert( + + unit_file_changes_add(changes, n_changes, UNIT_FILE_UNLINK, *i, NULL); + +- rp = skip_root(&paths, *i); ++ rp = skip_root(lp.root_dir, *i); + q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: *i); + if (q < 0) + return q; + } + +- q = remove_marked_symlinks(remove_symlinks_to, paths.runtime_config, &paths, false, changes, n_changes); ++ q = remove_marked_symlinks(remove_symlinks_to, lp.runtime_config, &lp, false, changes, n_changes); + if (r >= 0) + r = q; + +- q = remove_marked_symlinks(remove_symlinks_to, paths.persistent_config, &paths, false, changes, n_changes); ++ q = remove_marked_symlinks(remove_symlinks_to, lp.persistent_config, &lp, false, changes, n_changes); + if (r >= 0) + r = q; + +@@ -2561,7 +2558,7 @@ int unit_file_add_dependency( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(install_context_done) InstallContext c = {}; + UnitFileInstallInfo *i, *target_info; + const char *config_path; +@@ -2578,15 +2575,15 @@ int unit_file_add_dependency( + if (!unit_name_is_valid(target, UNIT_NAME_ANY)) + return -EINVAL; + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config; ++ config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config; + if (!config_path) + return -ENXIO; + +- r = install_info_discover_and_check(scope, &c, &paths, target, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(scope, &c, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS, + &target_info, changes, n_changes); + if (r < 0) + return r; +@@ -2596,7 +2593,7 @@ int unit_file_add_dependency( + STRV_FOREACH(f, files) { + char ***l; + +- r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, changes, n_changes); + if (r < 0) + return r; +@@ -2618,7 +2615,7 @@ int unit_file_add_dependency( + return -ENOMEM; + } + +- return install_context_apply(scope, file_flags, &c, &paths, config_path, ++ return install_context_apply(scope, file_flags, &c, &lp, config_path, + SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes); + } + +@@ -2630,7 +2627,7 @@ int unit_file_enable( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(install_context_done) InstallContext c = {}; + const char *config_path; + UnitFileInstallInfo *i; +@@ -2640,16 +2637,16 @@ int unit_file_enable( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = config_path_from_flags(&paths, file_flags); ++ config_path = config_path_from_flags(&lp, file_flags); + if (!config_path) + return -ENXIO; + + STRV_FOREACH(f, files) { +- r = install_info_discover_and_check(scope, &c, &paths, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, changes, n_changes); + if (r < 0) + return r; +@@ -2662,7 +2659,7 @@ int unit_file_enable( + is useful to determine whether the passed files had any + installation data at all. */ + +- return install_context_apply(scope, file_flags, &c, &paths, config_path, SEARCH_LOAD, changes, n_changes); ++ return install_context_apply(scope, file_flags, &c, &lp, config_path, SEARCH_LOAD, changes, n_changes); + } + + int unit_file_disable( +@@ -2673,7 +2670,7 @@ int unit_file_disable( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(install_context_done) InstallContext c = {}; + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; + const char *config_path; +@@ -2683,11 +2680,11 @@ int unit_file_disable( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = config_path_from_flags(&paths, flags); ++ config_path = config_path_from_flags(&lp, flags); + if (!config_path) + return -ENXIO; + +@@ -2695,16 +2692,16 @@ int unit_file_disable( + if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_add(&c, *i, NULL, paths.root_dir, /* auxiliary= */ false, NULL); ++ r = install_info_add(&c, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL); + if (r < 0) + return r; + } + +- r = install_context_mark_for_removal(scope, &c, &paths, &remove_symlinks_to, config_path, changes, n_changes); ++ r = install_context_mark_for_removal(scope, &c, &lp, &remove_symlinks_to, config_path, changes, n_changes); + if (r < 0) + return r; + +- return remove_marked_symlinks(remove_symlinks_to, config_path, &paths, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes); ++ return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes); + } + + int unit_file_reenable( +@@ -2742,7 +2739,7 @@ int unit_file_set_default( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(install_context_done) InstallContext c = {}; + UnitFileInstallInfo *i; + const char *new_path; +@@ -2757,16 +2754,16 @@ int unit_file_set_default( + if (streq(name, SPECIAL_DEFAULT_TARGET)) + return -EINVAL; + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- r = install_info_discover_and_check(scope, &c, &paths, name, 0, &i, changes, n_changes); ++ r = install_info_discover_and_check(scope, &c, &lp, name, 0, &i, changes, n_changes); + if (r < 0) + return r; + +- new_path = strjoina(paths.persistent_config, "/" SPECIAL_DEFAULT_TARGET); +- return create_symlink(&paths, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); ++ new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET); ++ return create_symlink(&lp, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); + } + + int unit_file_get_default( +@@ -2774,7 +2771,7 @@ int unit_file_get_default( + const char *root_dir, + char **name) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(install_context_done) InstallContext c = {}; + UnitFileInstallInfo *i; + char *n; +@@ -2784,15 +2781,15 @@ int unit_file_get_default( + assert(scope < _UNIT_FILE_SCOPE_MAX); + assert(name); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- r = install_info_discover(scope, &c, &paths, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover(scope, &c, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, NULL, NULL); + if (r < 0) + return r; +- r = install_info_may_process(i, &paths, NULL, 0); ++ r = install_info_may_process(i, &lp, NULL, 0); + if (r < 0) + return r; + +@@ -2806,7 +2803,7 @@ int unit_file_get_default( + + int unit_file_lookup_state( + UnitFileScope scope, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *name, + UnitFileState *ret) { + +@@ -2815,13 +2812,13 @@ int unit_file_lookup_state( + UnitFileState state; + int r; + +- assert(paths); ++ assert(lp); + assert(name); + + if (!unit_name_is_valid(name, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_discover(scope, &c, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover(scope, &c, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, NULL, NULL); + if (r < 0) + return log_debug_errno(r, "Failed to discover unit %s: %m", name); +@@ -2837,7 +2834,7 @@ int unit_file_lookup_state( + switch (i->type) { + + case UNIT_FILE_TYPE_MASKED: +- r = path_is_runtime(paths, i->path, true); ++ r = path_is_runtime(lp, i->path, true); + if (r < 0) + return r; + +@@ -2851,7 +2848,7 @@ int unit_file_lookup_state( + break; + } + +- r = path_is_generator(paths, i->path); ++ r = path_is_generator(lp, i->path); + if (r < 0) + return r; + if (r > 0) { +@@ -2859,7 +2856,7 @@ int unit_file_lookup_state( + break; + } + +- r = path_is_transient(paths, i->path); ++ r = path_is_transient(lp, i->path); + if (r < 0) + return r; + if (r > 0) { +@@ -2870,7 +2867,7 @@ int unit_file_lookup_state( + /* Check if any of the Alias= symlinks have been created. + * We ignore other aliases, and only check those that would + * be created by systemctl enable for this unit. */ +- r = find_symlinks_in_scope(scope, paths, i, true, &state); ++ r = find_symlinks_in_scope(scope, lp, i, true, &state); + if (r < 0) + return r; + if (r > 0) +@@ -2878,7 +2875,7 @@ int unit_file_lookup_state( + + /* Check if the file is known under other names. If it is, + * it might be in use. Report that as UNIT_FILE_INDIRECT. */ +- r = find_symlinks_in_scope(scope, paths, i, false, &state); ++ r = find_symlinks_in_scope(scope, lp, i, false, &state); + if (r < 0) + return r; + if (r > 0) +@@ -2908,31 +2905,31 @@ int unit_file_get_state( + const char *name, + UnitFileState *ret) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + int r; + + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + assert(name); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- return unit_file_lookup_state(scope, &paths, name, ret); ++ return unit_file_lookup_state(scope, &lp, name, ret); + } + +-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name) { ++int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) { + _cleanup_(install_context_done) InstallContext c = {}; + int r; + +- assert(paths); ++ assert(lp); + assert(name); + + if (!unit_name_is_valid(name, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_discover(scope, &c, paths, name, 0, NULL, NULL, NULL); ++ r = install_info_discover(scope, &c, lp, name, 0, NULL, NULL, NULL); + if (r == -ENOENT) + return 0; + if (r < 0) +@@ -3195,7 +3192,7 @@ static int execute_preset( + UnitFileFlags file_flags, + InstallContext *plus, + InstallContext *minus, +- const LookupPaths *paths, ++ const LookupPaths *lp, + const char *config_path, + char **files, + UnitFilePresetMode mode, +@@ -3206,17 +3203,17 @@ static int execute_preset( + + assert(plus); + assert(minus); +- assert(paths); ++ assert(lp); + assert(config_path); + + if (mode != UNIT_FILE_PRESET_ENABLE_ONLY) { + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; + +- r = install_context_mark_for_removal(scope, minus, paths, &remove_symlinks_to, config_path, changes, n_changes); ++ r = install_context_mark_for_removal(scope, minus, lp, &remove_symlinks_to, config_path, changes, n_changes); + if (r < 0) + return r; + +- r = remove_marked_symlinks(remove_symlinks_to, config_path, paths, false, changes, n_changes); ++ r = remove_marked_symlinks(remove_symlinks_to, config_path, lp, false, changes, n_changes); + } else + r = 0; + +@@ -3226,7 +3223,7 @@ static int execute_preset( + /* Returns number of symlinks that where supposed to be installed. */ + q = install_context_apply(scope, + file_flags | UNIT_FILE_IGNORE_AUXILIARY_FAILURE, +- plus, paths, config_path, SEARCH_LOAD, changes, n_changes); ++ plus, lp, config_path, SEARCH_LOAD, changes, n_changes); + if (r >= 0) { + if (q < 0) + r = q; +@@ -3242,7 +3239,7 @@ static int preset_prepare_one( + UnitFileScope scope, + InstallContext *plus, + InstallContext *minus, +- LookupPaths *paths, ++ LookupPaths *lp, + const char *name, + const UnitFilePresets *presets, + UnitFileChange **changes, +@@ -3256,7 +3253,7 @@ static int preset_prepare_one( + if (install_info_find(plus, name) || install_info_find(minus, name)) + return 0; + +- r = install_info_discover(scope, &tmp, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover(scope, &tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, changes, n_changes); + if (r < 0) + return r; +@@ -3273,20 +3270,20 @@ static int preset_prepare_one( + if (instance_name_list) { + char **s; + STRV_FOREACH(s, instance_name_list) { +- r = install_info_discover_and_check(scope, plus, paths, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(scope, plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, changes, n_changes); + if (r < 0) + return r; + } + } else { +- r = install_info_discover_and_check(scope, plus, paths, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(scope, plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, changes, n_changes); + if (r < 0) + return r; + } + + } else +- r = install_info_discover(scope, minus, paths, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover(scope, minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, + &i, changes, n_changes); + + return r; +@@ -3302,7 +3299,7 @@ int unit_file_preset( + size_t *n_changes) { + + _cleanup_(install_context_done) InstallContext plus = {}, minus = {}; +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {}; + const char *config_path; + char **i; +@@ -3312,11 +3309,11 @@ int unit_file_preset( + assert(scope < _UNIT_FILE_SCOPE_MAX); + assert(mode < _UNIT_FILE_PRESET_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config; ++ config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config; + if (!config_path) + return -ENXIO; + +@@ -3325,12 +3322,12 @@ int unit_file_preset( + return r; + + STRV_FOREACH(i, files) { +- r = preset_prepare_one(scope, &plus, &minus, &paths, *i, &presets, changes, n_changes); ++ r = preset_prepare_one(scope, &plus, &minus, &lp, *i, &presets, changes, n_changes); + if (r < 0) + return r; + } + +- return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, files, mode, changes, n_changes); ++ return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes); + } + + int unit_file_preset_all( +@@ -3342,7 +3339,7 @@ int unit_file_preset_all( + size_t *n_changes) { + + _cleanup_(install_context_done) InstallContext plus = {}, minus = {}; +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {}; + const char *config_path = NULL; + char **i; +@@ -3352,11 +3349,11 @@ int unit_file_preset_all( + assert(scope < _UNIT_FILE_SCOPE_MAX); + assert(mode < _UNIT_FILE_PRESET_MAX); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- config_path = (file_flags & UNIT_FILE_RUNTIME) ? paths.runtime_config : paths.persistent_config; ++ config_path = (file_flags & UNIT_FILE_RUNTIME) ? lp.runtime_config : lp.persistent_config; + if (!config_path) + return -ENXIO; + +@@ -3364,7 +3361,7 @@ int unit_file_preset_all( + if (r < 0) + return r; + +- STRV_FOREACH(i, paths.search_path) { ++ STRV_FOREACH(i, lp.search_path) { + _cleanup_closedir_ DIR *d = NULL; + + d = opendir(*i); +@@ -3383,7 +3380,7 @@ int unit_file_preset_all( + if (!IN_SET(de->d_type, DT_LNK, DT_REG)) + continue; + +- r = preset_prepare_one(scope, &plus, &minus, &paths, de->d_name, &presets, changes, n_changes); ++ r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes); + if (r < 0 && + !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT)) + /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors. +@@ -3392,7 +3389,7 @@ int unit_file_preset_all( + } + } + +- return execute_preset(scope, file_flags, &plus, &minus, &paths, config_path, NULL, mode, changes, n_changes); ++ return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes); + } + + static UnitFileList* unit_file_list_free_one(UnitFileList *f) { +@@ -3416,7 +3413,7 @@ int unit_file_get_list( + char **states, + char **patterns) { + +- _cleanup_(lookup_paths_free) LookupPaths paths = {}; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + char **dirname; + int r; + +@@ -3424,11 +3421,11 @@ int unit_file_get_list( + assert(scope < _UNIT_FILE_SCOPE_MAX); + assert(h); + +- r = lookup_paths_init(&paths, scope, 0, root_dir); ++ r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +- STRV_FOREACH(dirname, paths.search_path) { ++ STRV_FOREACH(dirname, lp.search_path) { + _cleanup_closedir_ DIR *d = NULL; + + d = opendir(*dirname); +@@ -3466,7 +3463,7 @@ int unit_file_get_list( + if (!f->path) + return -ENOMEM; + +- r = unit_file_lookup_state(scope, &paths, de->d_name, &f->state); ++ r = unit_file_lookup_state(scope, &lp, de->d_name, &f->state); + if (r < 0) + f->state = UNIT_FILE_BAD; + diff --git a/SOURCES/0154-shared-specifier-treat-NULL-the-same-as.patch b/SOURCES/0154-shared-specifier-treat-NULL-the-same-as.patch new file mode 100644 index 0000000..26cd8b6 --- /dev/null +++ b/SOURCES/0154-shared-specifier-treat-NULL-the-same-as.patch @@ -0,0 +1,191 @@ +From c36354b26c757e526e9f3d8c5bc78aa36f095f61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 20 Jan 2022 15:47:22 +0100 +Subject: [PATCH] shared/specifier: treat NULL the same as "" + +We would busily allocate an empty string to concatenate all of it's +zero characters to the output. Let's make things a bit simpler by letting +the specifier functions return NULL to mean "nothing to append". + +(cherry picked from commit 01c69460811f64e416c3e4a545ef84787bb6700b) + +Related: #2082131 +--- + src/shared/specifier.c | 56 ++++++++++++++------------------------- + src/test/test-specifier.c | 9 ++++--- + 2 files changed, 25 insertions(+), 40 deletions(-) + +diff --git a/src/shared/specifier.c b/src/shared/specifier.c +index 1fd76b1d15..f8ab98541f 100644 +--- a/src/shared/specifier.c ++++ b/src/shared/specifier.c +@@ -35,7 +35,6 @@ + int specifier_printf(const char *text, size_t max_length, const Specifier table[], const char *root, const void *userdata, char **ret) { + _cleanup_free_ char *result = NULL; + bool percent = false; +- const char *f; + size_t l; + char *t; + int r; +@@ -48,8 +47,10 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ + return -ENOMEM; + t = result; + +- for (f = text; *f != '\0'; f++, l--) { ++ for (const char *f = text; *f != '\0'; f++, l--) { + if (percent) { ++ percent = false; ++ + if (*f == '%') + *(t++) = '%'; + else { +@@ -66,6 +67,8 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ + r = i->lookup(i->specifier, i->data, root, userdata, &w); + if (r < 0) + return r; ++ if (isempty(w)) ++ continue; + + j = t - result; + k = strlen(w); +@@ -82,8 +85,6 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ + *(t++) = *f; + } + } +- +- percent = false; + } else if (*f == '%') + percent = true; + else +@@ -108,11 +109,13 @@ int specifier_printf(const char *text, size_t max_length, const Specifier table[ + /* Generic handler for simple string replacements */ + + int specifier_string(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- char *n; ++ char *n = NULL; + +- n = strdup(strempty(data)); +- if (!n) +- return -ENOMEM; ++ if (!isempty(data)) { ++ n = strdup(data); ++ if (!n) ++ return -ENOMEM; ++ } + + *ret = n; + return 0; +@@ -186,10 +189,8 @@ int specifier_short_host_name(char specifier, const void *data, const char *root + int specifier_kernel_release(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + struct utsname uts; + char *n; +- int r; + +- r = uname(&uts); +- if (r < 0) ++ if (uname(&uts) < 0) + return -errno; + + n = strdup(uts.release); +@@ -211,47 +212,31 @@ int specifier_architecture(char specifier, const void *data, const char *root, c + return 0; + } + +-static int specifier_os_release_common(const char *field, const char *root, char **ret) { +- char *t = NULL; +- int r; +- +- r = parse_os_release(root, field, &t); +- if (r < 0) +- return r; +- if (!t) { +- /* fields in /etc/os-release might quite possibly be missing, even if everything is entirely +- * valid otherwise. Let's hence return "" in that case. */ +- t = strdup(""); +- if (!t) +- return -ENOMEM; +- } +- +- *ret = t; +- return 0; +-} ++/* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid ++ * otherwise. We'll return an empty value or NULL in that case from the functions below. */ + + int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return specifier_os_release_common("ID", root, ret); ++ return parse_os_release(root, "ID", ret); + } + + int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return specifier_os_release_common("VERSION_ID", root, ret); ++ return parse_os_release(root, "VERSION_ID", ret); + } + + int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return specifier_os_release_common("BUILD_ID", root, ret); ++ return parse_os_release(root, "BUILD_ID", ret); + } + + int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return specifier_os_release_common("VARIANT_ID", root, ret); ++ return parse_os_release(root, "VARIANT_ID", ret); + } + + int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return specifier_os_release_common("IMAGE_ID", root, ret); ++ return parse_os_release(root, "IMAGE_ID", ret); + } + + int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return specifier_os_release_common("IMAGE_VERSION", root, ret); ++ return parse_os_release(root, "IMAGE_VERSION", ret); + } + + int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +@@ -291,7 +276,6 @@ int specifier_user_name(char specifier, const void *data, const char *root, cons + } + + int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- + if (asprintf(ret, UID_FMT, getuid()) < 0) + return -ENOMEM; + +diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c +index 40957eeb59..dda993ce9d 100644 +--- a/src/test/test-specifier.c ++++ b/src/test/test-specifier.c +@@ -56,6 +56,7 @@ TEST(specifier_printf) { + static const Specifier table[] = { + { 'X', specifier_string, (char*) "AAAA" }, + { 'Y', specifier_string, (char*) "BBBB" }, ++ { 'e', specifier_string, NULL }, + COMMON_SYSTEM_SPECIFIERS, + {} + }; +@@ -63,21 +64,21 @@ TEST(specifier_printf) { + _cleanup_free_ char *w = NULL; + int r; + +- r = specifier_printf("xxx a=%X b=%Y yyy", SIZE_MAX, table, NULL, NULL, &w); ++ r = specifier_printf("xxx a=%X b=%Y e=%e yyy", SIZE_MAX, table, NULL, NULL, &w); + assert_se(r >= 0); + assert_se(w); + + puts(w); +- assert_se(streq(w, "xxx a=AAAA b=BBBB yyy")); ++ assert_se(streq(w, "xxx a=AAAA b=BBBB e= yyy")); + + free(w); +- r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a", SIZE_MAX, table, NULL, NULL, &w); ++ r = specifier_printf("machine=%m, boot=%b, host=%H, version=%v, arch=%a, empty=%e", SIZE_MAX, table, NULL, NULL, &w); + assert_se(r >= 0); + assert_se(w); + puts(w); + + w = mfree(w); +- specifier_printf("os=%o, os-version=%w, build=%B, variant=%W", SIZE_MAX, table, NULL, NULL, &w); ++ specifier_printf("os=%o, os-version=%w, build=%B, variant=%W, empty=%e%e%e", SIZE_MAX, table, NULL, NULL, &w); + if (w) + puts(w); + } diff --git a/SOURCES/0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch b/SOURCES/0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch new file mode 100644 index 0000000..c49163f --- /dev/null +++ b/SOURCES/0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch @@ -0,0 +1,30 @@ +From 5f66b67ac6594a3dee6e463a5f31c2d1051503cc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 8 Mar 2022 11:47:23 +0100 +Subject: [PATCH] shared/install: do not print aliases longer than + UNIT_NAME_MAX + +065364920281e1cf59cab989e17aff21790505c4 did the conversion to install_path_printf(). +But IIUC, here we are just looking at a unit file name, not the full +path. + +(cherry picked from commit 46801e7647d98ccac8fca4cc91ef9c3513151943) + +Related: #2082131 +--- + src/shared/install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index c6cbe96fdb..79e5109ce1 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1825,7 +1825,7 @@ static int install_info_symlink_alias( + STRV_FOREACH(s, i->aliases) { + _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL; + +- q = install_path_printf(i, *s, i->root, &dst); ++ q = install_name_printf(i, *s, i->root, &dst); + if (q < 0) + return q; + diff --git a/SOURCES/0156-shared-install-printf-drop-now-unused-install_path_p.patch b/SOURCES/0156-shared-install-printf-drop-now-unused-install_path_p.patch new file mode 100644 index 0000000..361fa69 --- /dev/null +++ b/SOURCES/0156-shared-install-printf-drop-now-unused-install_path_p.patch @@ -0,0 +1,50 @@ +From b635f03ba218df6c184da4d53648b13241b6b07d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 8 Mar 2022 11:49:19 +0100 +Subject: [PATCH] shared/install-printf: drop now-unused install_path_printf() + +(cherry picked from commit 2cdd6bef9c940774d40046db9be41ea73cdb5d8e) + +Related: #2082131 +--- + src/shared/install-printf.c | 4 ++-- + src/shared/install-printf.h | 9 +-------- + 2 files changed, 3 insertions(+), 10 deletions(-) + +diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c +index 403d6013c1..6ff4198ac9 100644 +--- a/src/shared/install-printf.c ++++ b/src/shared/install-printf.c +@@ -103,7 +103,7 @@ static int specifier_last_component(char specifier, const void *data, const char + return 0; + } + +-int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret) { ++int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) { + /* This is similar to unit_name_printf() */ + + const Specifier table[] = { +@@ -123,5 +123,5 @@ int install_full_printf_internal(const UnitFileInstallInfo *i, const char *forma + assert(format); + assert(ret); + +- return specifier_printf(format, max_length, table, root, i, ret); ++ return specifier_printf(format, UNIT_NAME_MAX, table, root, i, ret); + } +diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h +index af32acc2ca..5ca9406797 100644 +--- a/src/shared/install-printf.h ++++ b/src/shared/install-printf.h +@@ -4,11 +4,4 @@ + #include "install.h" + #include "unit-name.h" + +-int install_full_printf_internal(const UnitFileInstallInfo *i, const char *format, size_t max_length, const char *root, char **ret); +- +-static inline int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) { +- return install_full_printf_internal(i, format, UNIT_NAME_MAX, root, ret); +-} +-static inline int install_path_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) { +- return install_full_printf_internal(i, format, PATH_MAX-1, root, ret); +-} ++int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret); diff --git a/SOURCES/0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch b/SOURCES/0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch new file mode 100644 index 0000000..8ce9253 --- /dev/null +++ b/SOURCES/0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch @@ -0,0 +1,1088 @@ +From f7660c55adcf3e6a7eec251c474edc0cbb19e26d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 23 Mar 2022 10:48:13 +0100 +Subject: [PATCH] strv: declare iterator of FOREACH_STRING() in the loop + +Same idea as 03677889f0ef42cdc534bf3b31265a054b20a354. + +No functional change intended. The type of the iterator is generally changed to +be 'const char*' instead of 'char*'. Despite the type commonly used, modifying +the string was not allowed. + +I adjusted the naming of some short variables for clarity and reduced the scope +of some variable declarations in code that was being touched anyway. + +(cherry picked from commit 5980d463048f25411c55da2f6387cdc8eaeef4c8) + +Related: #2082131 +--- + src/activate/activate.c | 1 - + src/basic/fs-util.c | 1 - + src/basic/os-util.c | 2 -- + src/basic/strv.h | 2 +- + src/basic/unit-file.c | 1 - + src/boot/bootctl.c | 9 ++++----- + src/cgtop/cgtop.c | 1 - + src/core/apparmor-setup.c | 1 - + src/core/efi-random.c | 11 +++++------ + src/core/execute.c | 1 - + src/core/timer.c | 2 -- + src/core/unit.c | 1 - + src/getty-generator/getty-generator.c | 4 +--- + src/home/homectl.c | 17 +++-------------- + src/home/homed-manager.c | 1 - + src/libsystemd/sd-device/sd-device.c | 6 +----- + src/locale/localed.c | 2 +- + src/login/logind-user.c | 1 - + src/nspawn/nspawn-cgroup.c | 1 - + src/nspawn/nspawn-mount.c | 4 ++-- + src/nspawn/nspawn.c | 5 ++--- + src/partition/repart.c | 3 +-- + src/portable/portable.c | 1 - + src/resolve/resolved-resolv-conf.c | 2 -- + src/resolve/test-resolved-etc-hosts.c | 1 - + src/run/run.c | 2 -- + src/shared/bootspec.c | 3 ++- + src/shared/chown-recursive.c | 1 - + src/shared/discover-image.c | 2 +- + src/shared/dissect-image.c | 1 - + src/shared/machine-id-setup.c | 2 +- + src/shared/mount-setup.c | 4 ---- + src/shared/netif-util.c | 7 ++++--- + src/shared/pager.c | 2 +- + src/shared/psi-util.c | 2 -- + src/shared/switch-root.c | 11 +++++------ + src/shared/tests.c | 11 +++++------ + src/systemctl/systemctl-edit.c | 8 ++++---- + src/systemctl/systemctl-sysv-compat.c | 25 ++++++++++++------------- + src/test/test-bpf-devices.c | 1 - + src/test/test-ellipsize.c | 8 ++------ + src/test/test-env-file.c | 2 -- + src/test/test-execute.c | 16 ++++++---------- + src/test/test-fileio.c | 1 - + src/test/test-gpt.c | 6 +----- + src/test/test-libcrypt-util.c | 2 -- + src/test/test-loop-block.c | 1 - + src/test/test-mount-util.c | 1 - + src/test/test-stat-util.c | 2 -- + src/test/test-strv.c | 4 +--- + src/test/test-utf8.c | 3 --- + src/tmpfiles/offline-passwd.c | 2 -- + 52 files changed, 66 insertions(+), 145 deletions(-) + +diff --git a/src/activate/activate.c b/src/activate/activate.c +index 0c32152671..b625d97f2e 100644 +--- a/src/activate/activate.c ++++ b/src/activate/activate.c +@@ -124,7 +124,6 @@ static int open_sockets(int *epoll_fd, bool accept) { + + static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) { + _cleanup_strv_free_ char **envp = NULL; +- const char *var; + char **s; + int r; + +diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c +index 552986f546..2ee7c23f68 100644 +--- a/src/basic/fs-util.c ++++ b/src/basic/fs-util.c +@@ -570,7 +570,6 @@ int get_files_in_directory(const char *path, char ***list) { + } + + static int getenv_tmp_dir(const char **ret_path) { +- const char *n; + int r, ret = 0; + + assert(ret_path); +diff --git a/src/basic/os-util.c b/src/basic/os-util.c +index 75c8500e51..a6e4d09473 100644 +--- a/src/basic/os-util.c ++++ b/src/basic/os-util.c +@@ -170,8 +170,6 @@ int open_extension_release(const char *root, const char *extension, char **ret_p + } + } + } else { +- const char *p; +- + FOREACH_STRING(p, "/etc/os-release", "/usr/lib/os-release") { + r = chase_symlinks(p, root, CHASE_PREFIX_ROOT, + ret_path ? &q : NULL, +diff --git a/src/basic/strv.h b/src/basic/strv.h +index 092d40c84b..27d4450468 100644 +--- a/src/basic/strv.h ++++ b/src/basic/strv.h +@@ -207,7 +207,7 @@ void strv_print(char * const *l); + }) + + #define _FOREACH_STRING(uniq, x, y, ...) \ +- for (char **UNIQ_T(l, uniq) = STRV_MAKE(({ x = y; }), ##__VA_ARGS__); \ ++ for (const char *x, * const*UNIQ_T(l, uniq) = STRV_MAKE_CONST(({ x = y; }), ##__VA_ARGS__); \ + x; \ + x = *(++UNIQ_T(l, uniq))) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index faea92f66d..96826e2940 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -237,7 +237,6 @@ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_ + } + + static int directory_name_is_valid(const char *name) { +- const char *suffix; + + /* Accept a directory whose name is a valid unit file name ending in .wants/, .requires/ or .d/ */ + +diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c +index 1bcb4d1689..9427a0e4ce 100644 +--- a/src/boot/bootctl.c ++++ b/src/boot/bootctl.c +@@ -1044,12 +1044,11 @@ static int remove_variables(sd_id128_t uuid, const char *path, bool in_order) { + } + + static int remove_loader_variables(void) { +- const char *variable; + int r = 0; + + /* Remove all persistent loader variables we define */ + +- FOREACH_STRING(variable, ++ FOREACH_STRING(var, + EFI_LOADER_VARIABLE(LoaderConfigTimeout), + EFI_LOADER_VARIABLE(LoaderConfigTimeoutOneShot), + EFI_LOADER_VARIABLE(LoaderEntryDefault), +@@ -1058,15 +1057,15 @@ static int remove_loader_variables(void) { + + int q; + +- q = efi_set_variable(variable, NULL, 0); ++ q = efi_set_variable(var, NULL, 0); + if (q == -ENOENT) + continue; + if (q < 0) { +- log_warning_errno(q, "Failed to remove EFI variable %s: %m", variable); ++ log_warning_errno(q, "Failed to remove EFI variable %s: %m", var); + if (r >= 0) + r = q; + } else +- log_info("Removed EFI variable %s.", variable); ++ log_info("Removed EFI variable %s.", var); + } + + return r; +diff --git a/src/cgtop/cgtop.c b/src/cgtop/cgtop.c +index e5ab904c4f..b023e71757 100644 +--- a/src/cgtop/cgtop.c ++++ b/src/cgtop/cgtop.c +@@ -510,7 +510,6 @@ static int refresh_one( + } + + static int refresh(const char *root, Hashmap *a, Hashmap *b, unsigned iteration) { +- const char *c; + int r; + + FOREACH_STRING(c, SYSTEMD_CGROUP_CONTROLLER, "cpu", "cpuacct", "memory", "io", "blkio", "pids") { +diff --git a/src/core/apparmor-setup.c b/src/core/apparmor-setup.c +index 304a3e6aac..3426a10358 100644 +--- a/src/core/apparmor-setup.c ++++ b/src/core/apparmor-setup.c +@@ -24,7 +24,6 @@ int mac_apparmor_setup(void) { + #if HAVE_APPARMOR + _cleanup_(aa_policy_cache_unrefp) aa_policy_cache *policy_cache = NULL; + _cleanup_(aa_features_unrefp) aa_features *features = NULL; +- const char *current_file; + _cleanup_free_ char *current_profile = NULL, *cache_dir_path = NULL; + int r; + +diff --git a/src/core/efi-random.c b/src/core/efi-random.c +index a0b89d1379..e8d8ccd117 100644 +--- a/src/core/efi-random.c ++++ b/src/core/efi-random.c +@@ -20,24 +20,23 @@ + * is suitably validated. */ + + static void lock_down_efi_variables(void) { +- const char *p; + int r; + + /* Paranoia: let's restrict access modes of these a bit, so that unprivileged users can't use them to + * identify the system or gain too much insight into what we might have credited to the entropy + * pool. */ +- FOREACH_STRING(p, ++ FOREACH_STRING(path, + EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderRandomSeed)), + EFIVAR_PATH(EFI_LOADER_VARIABLE(LoaderSystemToken))) { + +- r = chattr_path(p, 0, FS_IMMUTABLE_FL, NULL); ++ r = chattr_path(path, 0, FS_IMMUTABLE_FL, NULL); + if (r == -ENOENT) + continue; + if (r < 0) +- log_warning_errno(r, "Failed to drop FS_IMMUTABLE_FL from %s, ignoring: %m", p); ++ log_warning_errno(r, "Failed to drop FS_IMMUTABLE_FL from %s, ignoring: %m", path); + +- if (chmod(p, 0600) < 0) +- log_warning_errno(errno, "Failed to reduce access mode of %s, ignoring: %m", p); ++ if (chmod(path, 0600) < 0) ++ log_warning_errno(errno, "Failed to reduce access mode of %s, ignoring: %m", path); + } + } + +diff --git a/src/core/execute.c b/src/core/execute.c +index 8a1d070e26..3cafd0f17d 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -2917,7 +2917,6 @@ static int setup_credentials( + uid_t uid) { + + _cleanup_free_ char *p = NULL, *q = NULL; +- const char *i; + int r; + + assert(context); +diff --git a/src/core/timer.c b/src/core/timer.c +index b439802bc2..23f466c630 100644 +--- a/src/core/timer.c ++++ b/src/core/timer.c +@@ -100,8 +100,6 @@ static int timer_add_default_dependencies(Timer *t) { + return r; + + LIST_FOREACH(value, v, t->values) { +- const char *target; +- + if (v->base != TIMER_CALENDAR) + continue; + +diff --git a/src/core/unit.c b/src/core/unit.c +index 0eade13ee9..3d30f3807c 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -4104,7 +4104,6 @@ int unit_patch_contexts(Unit *u) { + + if ((ec->root_image || !LIST_IS_EMPTY(ec->mount_images)) && + (cc->device_policy != CGROUP_DEVICE_POLICY_AUTO || cc->device_allow)) { +- const char *p; + + /* When RootImage= or MountImages= is specified, the following devices are touched. */ + FOREACH_STRING(p, "/dev/loop-control", "/dev/mapper/control") { +diff --git a/src/getty-generator/getty-generator.c b/src/getty-generator/getty-generator.c +index 59bdfc496b..4e8162a319 100644 +--- a/src/getty-generator/getty-generator.c ++++ b/src/getty-generator/getty-generator.c +@@ -215,9 +215,7 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) + return r; + } + +- /* Automatically add in a serial getty on the first +- * virtualizer console */ +- const char *j; ++ /* Automatically add in a serial getty on the first virtualizer console */ + FOREACH_STRING(j, + "hvc0", + "xvc0", +diff --git a/src/home/homectl.c b/src/home/homectl.c +index 1e3c96f5ad..ac7b00889d 100644 +--- a/src/home/homectl.c ++++ b/src/home/homectl.c +@@ -2961,8 +2961,6 @@ static int parse_argv(int argc, char *argv[]) { + + case ARG_DISK_SIZE: + if (isempty(optarg)) { +- const char *prop; +- + FOREACH_STRING(prop, "diskSize", "diskSizeRelative", "rebalanceWeight") { + r = drop_from_identity(prop); + if (r < 0) +@@ -3464,9 +3462,7 @@ static int parse_argv(int argc, char *argv[]) { + break; + } + +- case ARG_PKCS11_TOKEN_URI: { +- const char *p; +- ++ case ARG_PKCS11_TOKEN_URI: + if (streq(optarg, "list")) + return pkcs11_list_tokens(); + +@@ -3500,11 +3496,8 @@ static int parse_argv(int argc, char *argv[]) { + + strv_uniq(arg_pkcs11_token_uri); + break; +- } +- +- case ARG_FIDO2_DEVICE: { +- const char *p; + ++ case ARG_FIDO2_DEVICE: + if (streq(optarg, "list")) + return fido2_list_devices(); + +@@ -3534,7 +3527,6 @@ static int parse_argv(int argc, char *argv[]) { + + strv_uniq(arg_fido2_device); + break; +- } + + case ARG_FIDO2_WITH_PIN: { + bool lock_with_pin; +@@ -3569,9 +3561,7 @@ static int parse_argv(int argc, char *argv[]) { + break; + } + +- case ARG_RECOVERY_KEY: { +- const char *p; +- ++ case ARG_RECOVERY_KEY: + r = parse_boolean(optarg); + if (r < 0) + return log_error_errno(r, "Failed to parse --recovery-key= argument: %s", optarg); +@@ -3585,7 +3575,6 @@ static int parse_argv(int argc, char *argv[]) { + } + + break; +- } + + case ARG_AUTO_RESIZE_MODE: + if (isempty(optarg)) { +diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c +index c1ec555cac..a02248a6de 100644 +--- a/src/home/homed-manager.c ++++ b/src/home/homed-manager.c +@@ -482,7 +482,6 @@ static int manager_enumerate_records(Manager *m) { + static int search_quota(uid_t uid, const char *exclude_quota_path) { + struct stat exclude_st = {}; + dev_t previous_devno = 0; +- const char *where; + int r; + + /* Checks whether the specified UID owns any files on the files system, but ignore any file system +diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c +index b163a0fb6b..af11730f33 100644 +--- a/src/libsystemd/sd-device/sd-device.c ++++ b/src/libsystemd/sd-device/sd-device.c +@@ -322,7 +322,6 @@ _public_ int sd_device_new_from_subsystem_sysname( + const char *subsystem, + const char *sysname) { + +- const char *s; + char *name; + int r; + +@@ -331,7 +330,6 @@ _public_ int sd_device_new_from_subsystem_sysname( + assert_return(path_is_normalized(sysname), -EINVAL); + + if (streq(subsystem, "subsystem")) { +- + FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/", "/sys/class/") { + r = device_strjoin_new(s, sysname, NULL, NULL, ret); + if (r < 0) +@@ -341,7 +339,6 @@ _public_ int sd_device_new_from_subsystem_sysname( + } + + } else if (streq(subsystem, "module")) { +- + r = device_strjoin_new("/sys/module/", sysname, NULL, NULL, ret); + if (r < 0) + return r; +@@ -353,9 +350,8 @@ _public_ int sd_device_new_from_subsystem_sysname( + + sep = strchr(sysname, ':'); + if (sep && sep[1] != '\0') { /* Require ":" and something non-empty after that. */ +- const char *subsys; + +- subsys = memdupa_suffix0(sysname, sep - sysname); ++ const char *subsys = memdupa_suffix0(sysname, sep - sysname); + sep++; + + FOREACH_STRING(s, "/sys/subsystem/", "/sys/bus/") { +diff --git a/src/locale/localed.c b/src/locale/localed.c +index c228385d0e..f3e6ef2db1 100644 +--- a/src/locale/localed.c ++++ b/src/locale/localed.c +@@ -475,7 +475,7 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er + + static int method_set_vc_keyboard(sd_bus_message *m, void *userdata, sd_bus_error *error) { + Context *c = userdata; +- const char *name, *keymap, *keymap_toggle; ++ const char *keymap, *keymap_toggle; + int convert, interactive, r; + + assert(m); +diff --git a/src/login/logind-user.c b/src/login/logind-user.c +index 6d250be321..74739b4242 100644 +--- a/src/login/logind-user.c ++++ b/src/login/logind-user.c +@@ -626,7 +626,6 @@ int user_check_linger_file(User *u) { + } + + static bool user_unit_active(User *u) { +- const char *i; + int r; + + assert(u->service); +diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c +index d472e80c03..d8e1fe0907 100644 +--- a/src/nspawn/nspawn-cgroup.c ++++ b/src/nspawn/nspawn-cgroup.c +@@ -22,7 +22,6 @@ + + static int chown_cgroup_path(const char *path, uid_t uid_shift) { + _cleanup_close_ int fd = -1; +- const char *fn; + + fd = open(path, O_RDONLY|O_CLOEXEC|O_DIRECTORY); + if (fd < 0) +diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c +index 40773d90c1..678fde3669 100644 +--- a/src/nspawn/nspawn-mount.c ++++ b/src/nspawn/nspawn-mount.c +@@ -408,7 +408,7 @@ int tmpfs_patch_options( + } + + int mount_sysfs(const char *dest, MountSettingsMask mount_settings) { +- const char *full, *top, *x; ++ const char *full, *top; + int r; + unsigned long extra_flags = 0; + +@@ -468,7 +468,7 @@ int mount_sysfs(const char *dest, MountSettingsMask mount_settings) { + /* Create mountpoint for cgroups. Otherwise we are not allowed since we + * remount /sys read-only. + */ +- x = prefix_roota(top, "/fs/cgroup"); ++ const char *x = prefix_roota(top, "/fs/cgroup"); + (void) mkdir_p(x, 0755); + + return mount_nofollow_verbose(LOG_ERR, NULL, top, NULL, +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 9225c8f162..1333a8702a 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2564,7 +2564,7 @@ static int setup_hostname(void) { + + static int setup_journal(const char *directory) { + _cleanup_free_ char *d = NULL; +- const char *dirname, *p, *q; ++ const char *p, *q; + sd_id128_t this_id; + bool try; + int r; +@@ -3513,7 +3513,6 @@ static int inner_child( + (void) fdset_close_others(fds); + + if (arg_start_mode == START_BOOT) { +- const char *init; + char **a; + size_t m; + +@@ -4604,7 +4603,7 @@ static int load_settings(void) { + _cleanup_(settings_freep) Settings *settings = NULL; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_free_ char *p = NULL; +- const char *fn, *i; ++ const char *fn; + int r; + + if (arg_oci_bundle) +diff --git a/src/partition/repart.c b/src/partition/repart.c +index 0862a37a8d..509cf69b5d 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -4561,9 +4561,8 @@ static int acquire_root_devno( + } + + static int find_root(char **ret, int *ret_fd) { +- const char *p; +- int r; + _cleanup_free_ char *device = NULL; ++ int r; + + assert(ret); + assert(ret_fd); +diff --git a/src/portable/portable.c b/src/portable/portable.c +index be311f94c4..bdc10da36f 100644 +--- a/src/portable/portable.c ++++ b/src/portable/portable.c +@@ -1568,7 +1568,6 @@ int portable_detach( + + SET_FOREACH(item, unit_files) { + _cleanup_free_ char *md = NULL; +- const char *suffix; + + if (unlinkat(dirfd(d), item, 0) < 0) { + log_debug_errno(errno, "Can't remove unit file %s/%s: %m", where, item); +diff --git a/src/resolve/resolved-resolv-conf.c b/src/resolve/resolved-resolv-conf.c +index e9785ab964..ee86cf75a0 100644 +--- a/src/resolve/resolved-resolv-conf.c ++++ b/src/resolve/resolved-resolv-conf.c +@@ -51,8 +51,6 @@ int manager_check_resolv_conf(const Manager *m) { + } + + static bool file_is_our_own(const struct stat *st) { +- const char *path; +- + assert(st); + + FOREACH_STRING(path, +diff --git a/src/resolve/test-resolved-etc-hosts.c b/src/resolve/test-resolved-etc-hosts.c +index cc55a980ad..f15e025b7b 100644 +--- a/src/resolve/test-resolved-etc-hosts.c ++++ b/src/resolve/test-resolved-etc-hosts.c +@@ -45,7 +45,6 @@ static void test_parse_etc_hosts(void) { + + int fd; + _cleanup_fclose_ FILE *f; +- const char *s; + + fd = mkostemp_safe(t); + assert_se(fd >= 0); +diff --git a/src/run/run.c b/src/run/run.c +index e75b027542..2ae629f595 100644 +--- a/src/run/run.c ++++ b/src/run/run.c +@@ -1702,8 +1702,6 @@ static int start_transient_trigger( + } + + static bool shall_make_executable_absolute(void) { +- const char *f; +- + if (strv_isempty(arg_cmdline)) + return false; + if (arg_transport != BUS_TRANSPORT_LOCAL) +diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c +index 0076092c2a..a17375eb4c 100644 +--- a/src/shared/bootspec.c ++++ b/src/shared/bootspec.c +@@ -1207,7 +1207,8 @@ int find_esp_and_warn( + goto found; + } + +- FOREACH_STRING(path, "/efi", "/boot", "/boot/efi") { ++ FOREACH_STRING(_path, "/efi", "/boot", "/boot/efi") { ++ path = _path; + + r = verify_esp(path, true, unprivileged_mode, ret_part, ret_pstart, ret_psize, ret_uuid); + if (r >= 0) +diff --git a/src/shared/chown-recursive.c b/src/shared/chown-recursive.c +index 7c9a3050b4..05a7a10ce4 100644 +--- a/src/shared/chown-recursive.c ++++ b/src/shared/chown-recursive.c +@@ -21,7 +21,6 @@ static int chown_one( + gid_t gid, + mode_t mask) { + +- const char *n; + int r; + + assert(fd >= 0); +diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c +index 268d910214..1d432328e7 100644 +--- a/src/shared/discover-image.c ++++ b/src/shared/discover-image.c +@@ -85,7 +85,7 @@ DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(image_hash_ops, char, string_hash_func, st + + static char **image_settings_path(Image *image) { + _cleanup_strv_free_ char **l = NULL; +- const char *fn, *s; ++ const char *fn; + unsigned i = 0; + + assert(image); +diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c +index 39a7f4c3f2..b38f16c37a 100644 +--- a/src/shared/dissect-image.c ++++ b/src/shared/dissect-image.c +@@ -3042,7 +3042,6 @@ int dissected_image_acquire_metadata(DissectedImage *m, DissectImageFlags extra_ + + case META_HAS_INIT_SYSTEM: { + bool found = false; +- const char *init; + + FOREACH_STRING(init, + "/usr/lib/systemd/systemd", /* systemd on /usr merged system */ +diff --git a/src/shared/machine-id-setup.c b/src/shared/machine-id-setup.c +index e483675a75..df4ac419cb 100644 +--- a/src/shared/machine-id-setup.c ++++ b/src/shared/machine-id-setup.c +@@ -197,7 +197,7 @@ finish: + + int machine_id_commit(const char *root) { + _cleanup_close_ int fd = -1, initial_mntns_fd = -1; +- const char *etc_machine_id, *sync_path; ++ const char *etc_machine_id; + sd_id128_t id; + int r; + +diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c +index 7917968497..7eadff3ace 100644 +--- a/src/shared/mount-setup.c ++++ b/src/shared/mount-setup.c +@@ -126,9 +126,6 @@ bool mount_point_is_api(const char *path) { + } + + bool mount_point_ignore(const char *path) { +- +- const char *i; +- + /* These are API file systems that might be mounted by other software, we just list them here so that + * we know that we should ignore them. */ + FOREACH_STRING(i, +@@ -518,7 +515,6 @@ int mount_setup(bool loaded_policy, bool leave_propagation) { + * use the same label for all their files. */ + if (loaded_policy) { + usec_t before_relabel, after_relabel; +- const char *i; + int n_extra; + + before_relabel = now(CLOCK_MONOTONIC); +diff --git a/src/shared/netif-util.c b/src/shared/netif-util.c +index 603d4de109..7605427052 100644 +--- a/src/shared/netif-util.c ++++ b/src/shared/netif-util.c +@@ -39,14 +39,15 @@ int net_get_type_string(sd_device *device, uint16_t iftype, char **ret) { + } + + const char *net_get_persistent_name(sd_device *device) { +- const char *name, *field; +- + assert(device); + + /* fetch some persistent data unique (on this machine) to this device */ +- FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC") ++ FOREACH_STRING(field, "ID_NET_NAME_ONBOARD", "ID_NET_NAME_SLOT", "ID_NET_NAME_PATH", "ID_NET_NAME_MAC") { ++ const char *name; ++ + if (sd_device_get_property_value(device, field, &name) >= 0) + return name; ++ } + + return NULL; + } +diff --git a/src/shared/pager.c b/src/shared/pager.c +index 9426d3ef98..1a93deb628 100644 +--- a/src/shared/pager.c ++++ b/src/shared/pager.c +@@ -144,7 +144,7 @@ void pager_open(PagerFlags flags) { + if (r < 0) + return; + if (r == 0) { +- const char *less_charset, *exe; ++ const char *less_charset; + + /* In the child start the pager */ + +diff --git a/src/shared/psi-util.c b/src/shared/psi-util.c +index 009095e8c3..8bdd0d4a85 100644 +--- a/src/shared/psi-util.c ++++ b/src/shared/psi-util.c +@@ -106,8 +106,6 @@ int read_resource_pressure(const char *path, PressureType type, ResourcePressure + } + + int is_pressure_supported(void) { +- const char *p; +- + /* The pressure files, both under /proc and in cgroups, will exist + * even if the kernel has PSI support disabled; we have to read + * the file to make sure it doesn't return -EOPNOTSUPP */ +diff --git a/src/shared/switch-root.c b/src/shared/switch-root.c +index 99cd574197..1a444841fa 100644 +--- a/src/shared/switch-root.c ++++ b/src/shared/switch-root.c +@@ -33,7 +33,6 @@ int switch_root(const char *new_root, + _cleanup_free_ char *resolved_old_root_after = NULL; + _cleanup_close_ int old_root_fd = -1; + bool old_root_remove; +- const char *i; + int r; + + assert(new_root); +@@ -64,12 +63,12 @@ int switch_root(const char *new_root, + if (mount(NULL, "/", NULL, MS_REC|MS_PRIVATE, NULL) < 0) + return log_error_errno(errno, "Failed to set \"/\" mount propagation to private: %m"); + +- FOREACH_STRING(i, "/sys", "/dev", "/run", "/proc") { ++ FOREACH_STRING(path, "/sys", "/dev", "/run", "/proc") { + _cleanup_free_ char *chased = NULL; + +- r = chase_symlinks(i, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &chased, NULL); ++ r = chase_symlinks(path, new_root, CHASE_PREFIX_ROOT|CHASE_NONEXISTENT, &chased, NULL); + if (r < 0) +- return log_error_errno(r, "Failed to resolve %s/%s: %m", new_root, i); ++ return log_error_errno(r, "Failed to resolve %s/%s: %m", new_root, path); + if (r > 0) { + /* Already exists. Let's see if it is a mount point already. */ + r = path_is_mount_point(chased, NULL, 0); +@@ -81,8 +80,8 @@ int switch_root(const char *new_root, + /* Doesn't exist yet? */ + (void) mkdir_p_label(chased, 0755); + +- if (mount(i, chased, NULL, mount_flags, NULL) < 0) +- return log_error_errno(errno, "Failed to mount %s to %s: %m", i, chased); ++ if (mount(path, chased, NULL, mount_flags, NULL) < 0) ++ return log_error_errno(errno, "Failed to mount %s to %s: %m", path, chased); + } + + /* Do not fail if base_filesystem_create() fails. Not all switch roots are like base_filesystem_create() wants +diff --git a/src/shared/tests.c b/src/shared/tests.c +index b00006b41a..f5d9536411 100644 +--- a/src/shared/tests.c ++++ b/src/shared/tests.c +@@ -307,16 +307,15 @@ const char *ci_environment(void) { + * just the general CI environment type, but also whether we're sanitizing or not, etc. The caller is + * expected to use strstr on the returned value. */ + static const char *ans = POINTER_MAX; +- const char *p; + int r; + + if (ans != POINTER_MAX) + return ans; + + /* We allow specifying the environment with $CITYPE. Nobody uses this so far, but we are ready. */ +- p = getenv("CITYPE"); +- if (!isempty(p)) +- return (ans = p); ++ const char *citype = getenv("CITYPE"); ++ if (!isempty(citype)) ++ return (ans = citype); + + if (getenv_bool("TRAVIS") > 0) + return (ans = "travis"); +@@ -327,12 +326,12 @@ const char *ci_environment(void) { + if (getenv("AUTOPKGTEST_ARTIFACTS") || getenv("AUTOPKGTEST_TMP")) + return (ans = "autopkgtest"); + +- FOREACH_STRING(p, "CI", "CONTINOUS_INTEGRATION") { ++ FOREACH_STRING(var, "CI", "CONTINOUS_INTEGRATION") { + /* Those vars are booleans according to Semaphore and Travis docs: + * https://docs.travis-ci.com/user/environment-variables/#default-environment-variables + * https://docs.semaphoreci.com/ci-cd-environment/environment-variables/#ci + */ +- r = getenv_bool(p); ++ r = getenv_bool(var); + if (r > 0) + return (ans = "unknown"); /* Some other unknown thing */ + if (r == 0) +diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c +index b59a67ac22..a97aa7be4c 100644 +--- a/src/systemctl/systemctl-edit.c ++++ b/src/systemctl/systemctl-edit.c +@@ -320,7 +320,7 @@ static int run_editor(char **paths) { + if (r == 0) { + char **editor_args = NULL, **tmp_path, **original_path; + size_t n_editor_args = 0, i = 1, argc; +- const char **args, *editor, *p; ++ const char **args, *editor; + + argc = strv_length(paths)/2 + 1; + +@@ -358,9 +358,9 @@ static int run_editor(char **paths) { + if (n_editor_args > 0) + execvp(args[0], (char* const*) args); + +- FOREACH_STRING(p, "editor", "nano", "vim", "vi") { +- args[0] = p; +- execvp(p, (char* const*) args); ++ FOREACH_STRING(name, "editor", "nano", "vim", "vi") { ++ args[0] = name; ++ execvp(name, (char* const*) args); + /* We do not fail if the editor doesn't exist because we want to try each one of them + * before failing. */ + if (errno != ENOENT) { +diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c +index a78fa1e04c..017dba2034 100644 +--- a/src/systemctl/systemctl-sysv-compat.c ++++ b/src/systemctl/systemctl-sysv-compat.c +@@ -18,9 +18,8 @@ + + int talk_initctl(char rl) { + #if HAVE_SYSV_COMPAT +- struct init_request request; + _cleanup_close_ int fd = -1; +- const char *p; ++ const char *path; + int r; + + /* Try to switch to the specified SysV runlevel. Returns == 0 if the operation does not apply on this +@@ -29,19 +28,19 @@ int talk_initctl(char rl) { + if (rl == 0) + return 0; + +- FOREACH_STRING(p, "/run/initctl", "/dev/initctl") { +- fd = open(p, O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY); +- if (fd >= 0 || errno != ENOENT) +- break; +- } +- if (fd < 0) { +- if (errno == ENOENT) +- return 0; ++ FOREACH_STRING(_path, "/run/initctl", "/dev/initctl") { ++ path = _path; + +- return log_error_errno(errno, "Failed to open initctl fifo: %m"); ++ fd = open(path, O_WRONLY|O_NONBLOCK|O_CLOEXEC|O_NOCTTY); ++ if (fd < 0 && errno != ENOENT) ++ return log_error_errno(errno, "Failed to open %s: %m", path); ++ if (fd >= 0) ++ break; + } ++ if (fd < 0) ++ return 0; + +- request = (struct init_request) { ++ struct init_request request = { + .magic = INIT_MAGIC, + .sleeptime = 0, + .cmd = INIT_CMD_RUNLVL, +@@ -50,7 +49,7 @@ int talk_initctl(char rl) { + + r = loop_write(fd, &request, sizeof(request), false); + if (r < 0) +- return log_error_errno(r, "Failed to write to %s: %m", p); ++ return log_error_errno(r, "Failed to write to %s: %m", path); + + return 1; + #else +diff --git a/src/test/test-bpf-devices.c b/src/test/test-bpf-devices.c +index bbaa7b3605..587591cf04 100644 +--- a/src/test/test-bpf-devices.c ++++ b/src/test/test-bpf-devices.c +@@ -30,7 +30,6 @@ static void test_policy_closed(const char *cgroup_path, BPFProgram **installed_p + r = bpf_devices_apply_policy(&prog, CGROUP_DEVICE_POLICY_CLOSED, true, cgroup_path, installed_prog); + assert_se(r >= 0); + +- const char *s; + FOREACH_STRING(s, "/dev/null", + "/dev/zero", + "/dev/full", +diff --git a/src/test/test-ellipsize.c b/src/test/test-ellipsize.c +index b840355f5e..7317193363 100644 +--- a/src/test/test-ellipsize.c ++++ b/src/test/test-ellipsize.c +@@ -64,18 +64,14 @@ static void test_ellipsize_mem_one(const char *s, size_t old_length, size_t new_ + } + + TEST(ellipsize_mem) { +- const char *s; +- ssize_t l, k; +- + FOREACH_STRING(s, + "_XXXXXXXXXXX_", /* ASCII */ + "_aąęółśćńżźć_", /* two-byte utf-8 */ + "გამარჯობა", /* multi-byte utf-8 */ + "你好世界", /* wide characters */ + "你გą世óoó界") /* a mix */ +- +- for (l = strlen(s); l >= 0; l--) +- for (k = strlen(s) + 1; k >= 0; k--) ++ for (ssize_t l = strlen(s); l >= 0; l--) ++ for (ssize_t k = strlen(s) + 1; k >= 0; k--) + test_ellipsize_mem_one(s, l, k); + } + +diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c +index 7b132447bf..f97206b4d6 100644 +--- a/src/test/test-env-file.c ++++ b/src/test/test-env-file.c +@@ -166,8 +166,6 @@ TEST(load_env_file_6) { + } + + TEST(write_and_load_env_file) { +- const char *v; +- + /* Make sure that our writer, parser and the shell agree on what our env var files mean */ + + FOREACH_STRING(v, +diff --git a/src/test/test-execute.c b/src/test/test-execute.c +index 49629c6bc2..0760df6603 100644 +--- a/src/test/test-execute.c ++++ b/src/test/test-execute.c +@@ -190,19 +190,15 @@ static bool check_user_has_group_with_same_name(const char *name) { + } + + static bool is_inaccessible_available(void) { +- const char *p; +- + FOREACH_STRING(p, +- "/run/systemd/inaccessible/reg", +- "/run/systemd/inaccessible/dir", +- "/run/systemd/inaccessible/chr", +- "/run/systemd/inaccessible/blk", +- "/run/systemd/inaccessible/fifo", +- "/run/systemd/inaccessible/sock" +- ) { ++ "/run/systemd/inaccessible/reg", ++ "/run/systemd/inaccessible/dir", ++ "/run/systemd/inaccessible/chr", ++ "/run/systemd/inaccessible/blk", ++ "/run/systemd/inaccessible/fifo", ++ "/run/systemd/inaccessible/sock") + if (access(p, F_OK) < 0) + return false; +- } + + return true; + } +diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c +index 087d76f760..4f91d94709 100644 +--- a/src/test/test-fileio.c ++++ b/src/test/test-fileio.c +@@ -1003,7 +1003,6 @@ TEST(read_full_file_offset_size) { + } + + static void test_read_virtual_file_one(size_t max_size) { +- const char *filename; + int r; + + log_info("/* %s (max_size=%zu) */", __func__, max_size); +diff --git a/src/test/test-gpt.c b/src/test/test-gpt.c +index ab26d5d096..05da7a9e48 100644 +--- a/src/test/test-gpt.c ++++ b/src/test/test-gpt.c +@@ -11,16 +11,13 @@ + #include "util.h" + + TEST(gpt_types_against_architectures) { +- const char *prefix; + int r; + + /* Dumps a table indicating for which architectures we know we have matching GPT partition + * types. Also validates whether we can properly categorize the entries. */ + + FOREACH_STRING(prefix, "root-", "usr-") +- for (int a = 0; a < _ARCHITECTURE_MAX; a++) { +- const char *suffix; +- ++ for (int a = 0; a < _ARCHITECTURE_MAX; a++) + FOREACH_STRING(suffix, "", "-verity", "-verity-sig") { + _cleanup_free_ char *joined = NULL; + sd_id128_t id; +@@ -48,7 +45,6 @@ TEST(gpt_types_against_architectures) { + + assert_se(gpt_partition_type_uuid_to_arch(id) == a); + } +- } + } + + DEFINE_TEST_MAIN(LOG_INFO); +diff --git a/src/test/test-libcrypt-util.c b/src/test/test-libcrypt-util.c +index ebd520f7ba..f88a9f9b24 100644 +--- a/src/test/test-libcrypt-util.c ++++ b/src/test/test-libcrypt-util.c +@@ -39,7 +39,6 @@ static int test_hash_password(void) { + /* As a warm-up exercise, check if we can hash passwords. */ + + bool have_sane_hash = false; +- const char *hash; + + FOREACH_STRING(hash, + "ew3bU1.hoKk4o", +@@ -68,7 +67,6 @@ static void test_hash_password_full(void) { + log_info("/* %s */", __func__); + + _cleanup_free_ void *cd_data = NULL; +- const char *i; + int cd_size = 0; + + log_info("sizeof(struct crypt_data): %zu bytes", sizeof(struct crypt_data)); +diff --git a/src/test/test-loop-block.c b/src/test/test-loop-block.c +index 1642f82e40..9c8c55bca2 100644 +--- a/src/test/test-loop-block.c ++++ b/src/test/test-loop-block.c +@@ -114,7 +114,6 @@ int main(int argc, char *argv[]) { + _cleanup_(dissected_image_unrefp) DissectedImage *dissected = NULL; + _cleanup_(umount_and_rmdir_and_freep) char *mounted = NULL; + pthread_t threads[N_THREADS]; +- const char *fs; + sd_id128_t id; + int r; + +diff --git a/src/test/test-mount-util.c b/src/test/test-mount-util.c +index 74d352268e..7e06fc419c 100644 +--- a/src/test/test-mount-util.c ++++ b/src/test/test-mount-util.c +@@ -128,7 +128,6 @@ TEST(mount_flags_to_string) { + TEST(bind_remount_recursive) { + _cleanup_(rm_rf_physical_and_freep) char *tmp = NULL; + _cleanup_free_ char *subdir = NULL; +- const char *p; + + if (geteuid() != 0 || have_effective_cap(CAP_SYS_ADMIN) <= 0) { + (void) log_tests_skipped("not running privileged"); +diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c +index 7f633ab259..5f744b0288 100644 +--- a/src/test/test-stat-util.c ++++ b/src/test/test-stat-util.c +@@ -67,7 +67,6 @@ TEST(path_is_fs_type) { + } + + TEST(path_is_temporary_fs) { +- const char *s; + int r; + + FOREACH_STRING(s, "/", "/run", "/sys", "/sys/", "/proc", "/i-dont-exist", "/var", "/var/lib") { +@@ -85,7 +84,6 @@ TEST(path_is_temporary_fs) { + } + + TEST(path_is_read_only_fs) { +- const char *s; + int r; + + FOREACH_STRING(s, "/", "/run", "/sys", "/sys/", "/proc", "/i-dont-exist", "/var", "/var/lib") { +diff --git a/src/test/test-strv.c b/src/test/test-strv.c +index 94581fc832..0ece342521 100644 +--- a/src/test/test-strv.c ++++ b/src/test/test-strv.c +@@ -924,12 +924,10 @@ TEST(foreach_string) { + "waldo", + NULL + }; +- const char *x; +- unsigned i = 0; + ++ unsigned i = 0; + FOREACH_STRING(x, "foo", "bar", "waldo") + assert_se(streq_ptr(t[i++], x)); +- + assert_se(i == 3); + + FOREACH_STRING(x, "zzz") +diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c +index 7337b81227..f070c171fe 100644 +--- a/src/test/test-utf8.c ++++ b/src/test/test-utf8.c +@@ -144,7 +144,6 @@ TEST(utf8_escape_non_printable) { + } + + TEST(utf8_escape_non_printable_full) { +- const char *s; + FOREACH_STRING(s, + "goo goo goo", /* ASCII */ + "\001 \019\20\a", /* control characters */ +@@ -210,8 +209,6 @@ TEST(utf8_console_width) { + } + + TEST(utf8_to_utf16) { +- const char *p; +- + FOREACH_STRING(p, + "abc", + "zażółcić gęślą jaźń", +diff --git a/src/tmpfiles/offline-passwd.c b/src/tmpfiles/offline-passwd.c +index 8ba3fea984..c847266ed4 100644 +--- a/src/tmpfiles/offline-passwd.c ++++ b/src/tmpfiles/offline-passwd.c +@@ -39,7 +39,6 @@ static int populate_uid_cache(const char *root, Hashmap **ret) { + /* The directory list is hardcoded here: /etc is the standard, and rpm-ostree uses /usr/lib. This + * could be made configurable, but I don't see the point right now. */ + +- const char *fname; + FOREACH_STRING(fname, "/etc/passwd", "/usr/lib/passwd") { + _cleanup_fclose_ FILE *f = NULL; + +@@ -78,7 +77,6 @@ static int populate_gid_cache(const char *root, Hashmap **ret) { + if (!cache) + return -ENOMEM; + +- const char *fname; + FOREACH_STRING(fname, "/etc/group", "/usr/lib/group") { + _cleanup_fclose_ FILE *f = NULL; + diff --git a/SOURCES/0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch b/SOURCES/0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch new file mode 100644 index 0000000..43c2405 --- /dev/null +++ b/SOURCES/0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch @@ -0,0 +1,213 @@ +From d49d646d00078b201cdde2978b7941d20acb1d4b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 2 Mar 2022 16:53:54 +0100 +Subject: [PATCH] basic/unit-file: split out the subroutine for symlink + verification + +The old logs used __func__, but this doesn't make sense now, because the +low-level function will be used in other places. So those are adjusted to be +more generic. + +(cherry picked from commit 9825181143530af7003fc50567b814dbbee39046) + +Related: #2082131 +--- + src/basic/unit-file.c | 159 +++++++++++++++++++++++++----------------- + 1 file changed, 96 insertions(+), 63 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 96826e2940..25abce932a 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -260,6 +260,83 @@ static int directory_name_is_valid(const char *name) { + return false; + } + ++static int unit_file_resolve_symlink( ++ const char *root_dir, ++ char **search_path, ++ const char *dir, ++ int dirfd, ++ const char *filename, ++ char **ret_destination) { ++ ++ _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL; ++ int r; ++ ++ assert(dir); ++ assert(dirfd >= 0); ++ assert(filename); ++ assert(ret_destination); ++ ++ r = readlinkat_malloc(dirfd, filename, &target); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to read symlink %s%s%s: %m", ++ dir, dir ? "/" : "", filename); ++ ++ bool is_abs = path_is_absolute(target); ++ if (root_dir || !is_abs) { ++ char *target_abs = path_join(is_abs ? root_dir : dir, target); ++ if (!target_abs) ++ return log_oom(); ++ ++ free_and_replace(target, target_abs); ++ } ++ ++ /* Get rid of "." and ".." components in target path */ ++ r = chase_symlinks(target, root_dir, CHASE_NOFOLLOW | CHASE_NONEXISTENT, &simplified, NULL); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to resolve symlink %s/%s pointing to %s: %m", ++ dir, filename, target); ++ ++ /* Check if the symlink goes outside of our search path. ++ * If yes, it's a linked unit file or mask, and we don't care about the target name. ++ * Let's just store the link source directly. ++ * If not, let's verify that it's a good symlink. */ ++ const char *tail = path_startswith_strv(simplified, search_path); ++ if (!tail) { ++ log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified); ++ ++ dst = path_join(dir, filename); ++ if (!dst) ++ return log_oom(); ++ ++ } else { ++ r = path_extract_filename(simplified, &dst); ++ if (r < 0) ++ return r; ++ ++ bool self_alias = streq(dst, filename); ++ ++ if (is_path(tail)) ++ log_full(self_alias ? LOG_DEBUG : LOG_WARNING, ++ "Suspicious symlink %s/%s→%s, treating as alias.", ++ dir, filename, simplified); ++ ++ r = unit_validate_alias_symlink_and_warn(filename, simplified); ++ if (r < 0) ++ return r; ++ ++ if (self_alias) ++ /* A self-alias that has no effect */ ++ return log_debug_errno(SYNTHETIC_ERRNO(ELOOP), ++ "Unit file self-alias: %s/%s → %s, ignoring.", ++ dir, filename, dst); ++ ++ log_debug("Unit file alias: %s/%s → %s", dir, filename, dst); ++ } ++ ++ *ret_destination = TAKE_PTR(dst); ++ return 0; ++} ++ + int unit_file_build_name_map( + const LookupPaths *lp, + uint64_t *cache_timestamp_hash, +@@ -310,10 +387,9 @@ int unit_file_build_name_map( + + FOREACH_DIRENT_ALL(de, d, log_warning_errno(errno, "Failed to read \"%s\", ignoring: %m", *dir)) { + _unused_ _cleanup_free_ char *_filename_free = NULL; +- _cleanup_free_ char *simplified = NULL; +- bool symlink_to_dir = false; +- const char *dst = NULL; + char *filename; ++ _cleanup_free_ char *dst = NULL; ++ bool symlink_to_dir = false; + + /* We only care about valid units and dirs with certain suffixes, let's ignore the + * rest. */ +@@ -397,77 +473,34 @@ int unit_file_build_name_map( + /* We don't explicitly check for alias loops here. unit_ids_map_get() which + * limits the number of hops should be used to access the map. */ + +- _cleanup_free_ char *target = NULL; +- +- r = readlinkat_malloc(dirfd(d), de->d_name, &target); +- if (r < 0) { +- log_warning_errno(r, "Failed to read symlink %s/%s, ignoring: %m", +- *dir, de->d_name); ++ r = unit_file_resolve_symlink(lp->root_dir, lp->search_path, ++ *dir, dirfd(d), de->d_name, ++ &dst); ++ if (r == -ENOMEM) ++ return r; ++ if (r < 0) /* we ignore other errors here */ + continue; +- } + +- const bool is_abs = path_is_absolute(target); +- if (lp->root_dir || !is_abs) { +- char *target_abs = path_join(is_abs ? lp->root_dir : *dir, target); +- if (!target_abs) ++ } else { ++ dst = TAKE_PTR(_filename_free); /* Grab the copy we made previously, if available. */ ++ if (!dst) { ++ dst = strdup(filename); ++ if (!dst) + return log_oom(); +- +- free_and_replace(target, target_abs); + } + +- /* Get rid of "." and ".." components in target path */ +- r = chase_symlinks(target, lp->root_dir, CHASE_NOFOLLOW | CHASE_NONEXISTENT, &simplified, NULL); +- if (r < 0) { +- log_warning_errno(r, "Failed to resolve symlink %s pointing to %s, ignoring: %m", +- filename, target); +- continue; +- } +- +- /* Check if the symlink goes outside of our search path. +- * If yes, it's a linked unit file or mask, and we don't care about the target name. +- * Let's just store the link source directly. +- * If not, let's verify that it's a good symlink. */ +- char *tail = path_startswith_strv(simplified, lp->search_path); +- if (!tail) { +- log_debug("%s: linked unit file: %s → %s", +- __func__, filename, simplified); +- +- dst = filename; +- } else { +- +- bool self_alias; +- +- dst = basename(simplified); +- self_alias = streq(dst, de->d_name); +- +- if (is_path(tail)) +- log_full(self_alias ? LOG_DEBUG : LOG_WARNING, +- "Suspicious symlink %s→%s, treating as alias.", +- filename, simplified); +- +- r = unit_validate_alias_symlink_and_warn(filename, simplified); +- if (r < 0) +- continue; +- +- if (self_alias) { +- /* A self-alias that has no effect */ +- log_debug("%s: self-alias: %s/%s → %s, ignoring.", +- __func__, *dir, de->d_name, dst); +- continue; +- } +- +- log_debug("%s: alias: %s/%s → %s", __func__, *dir, de->d_name, dst); +- } +- +- } else { +- dst = filename; + log_debug("%s: normal unit file: %s", __func__, dst); + } + +- r = hashmap_put_strdup(&ids, de->d_name, dst); ++ _cleanup_free_ char *key = strdup(de->d_name); ++ if (!key) ++ return log_oom(); ++ ++ r = hashmap_ensure_put(&ids, &string_hash_ops_free_free, key, dst); + if (r < 0) + return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m", + de->d_name, dst); ++ key = dst = NULL; + } + } + diff --git a/SOURCES/0159-basic-stat-util-add-null_or_empty_path_with_root.patch b/SOURCES/0159-basic-stat-util-add-null_or_empty_path_with_root.patch new file mode 100644 index 0000000..64f0c2e --- /dev/null +++ b/SOURCES/0159-basic-stat-util-add-null_or_empty_path_with_root.patch @@ -0,0 +1,100 @@ +From fae45af368a90cdce95680d82b66d8e460ab939f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 23 Mar 2022 17:47:33 +0100 +Subject: [PATCH] basic/stat-util: add null_or_empty_path_with_root() + +(cherry picked from commit 48542eac39999f58f6c331b4b3cdf2d78bf15979) + +Related: #2082131 +--- + src/basic/stat-util.c | 15 ++++++++++----- + src/basic/stat-util.h | 6 +++++- + src/test/test-stat-util.c | 24 ++++++++++++++++++++++++ + 3 files changed, 39 insertions(+), 6 deletions(-) + +diff --git a/src/basic/stat-util.c b/src/basic/stat-util.c +index efac7b002e..21e71794b4 100644 +--- a/src/basic/stat-util.c ++++ b/src/basic/stat-util.c +@@ -127,17 +127,22 @@ bool null_or_empty(struct stat *st) { + return false; + } + +-int null_or_empty_path(const char *fn) { ++int null_or_empty_path_with_root(const char *fn, const char *root) { + struct stat st; ++ int r; + + assert(fn); + +- /* If we have the path, let's do an easy text comparison first. */ +- if (path_equal(fn, "/dev/null")) ++ /* A symlink to /dev/null or an empty file? ++ * When looking under root_dir, we can't expect /dev/ to be mounted, ++ * so let's see if the path is a (possibly dangling) symlink to /dev/null. */ ++ ++ if (path_equal_ptr(path_startswith(fn, root ?: "/"), "dev/null")) + return true; + +- if (stat(fn, &st) < 0) +- return -errno; ++ r = chase_symlinks_and_stat(fn, root, CHASE_PREFIX_ROOT, NULL, &st, NULL); ++ if (r < 0) ++ return r; + + return null_or_empty(&st); + } +diff --git a/src/basic/stat-util.h b/src/basic/stat-util.h +index a566114f7c..2c5edeb891 100644 +--- a/src/basic/stat-util.h ++++ b/src/basic/stat-util.h +@@ -31,9 +31,13 @@ static inline int dir_is_populated(const char *path) { + } + + bool null_or_empty(struct stat *st) _pure_; +-int null_or_empty_path(const char *fn); ++int null_or_empty_path_with_root(const char *fn, const char *root); + int null_or_empty_fd(int fd); + ++static inline int null_or_empty_path(const char *fn) { ++ return null_or_empty_path_with_root(fn, NULL); ++} ++ + int path_is_read_only_fs(const char *path); + + int files_same(const char *filea, const char *fileb, int flags); +diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c +index 5f744b0288..9975a1848d 100644 +--- a/src/test/test-stat-util.c ++++ b/src/test/test-stat-util.c +@@ -18,6 +18,30 @@ + #include "tests.h" + #include "tmpfile-util.h" + ++TEST(null_or_empty_path) { ++ assert_se(null_or_empty_path("/dev/null") == 1); ++ assert_se(null_or_empty_path("/dev/tty") == 1); /* We assume that any character device is "empty", bleh. */ ++ assert_se(null_or_empty_path("../../../../../../../../../../../../../../../../../../../../dev/null") == 1); ++ assert_se(null_or_empty_path("/proc/self/exe") == 0); ++ assert_se(null_or_empty_path("/nosuchfileordir") == -ENOENT); ++} ++ ++TEST(null_or_empty_path_with_root) { ++ assert_se(null_or_empty_path_with_root("/dev/null", NULL) == 1); ++ assert_se(null_or_empty_path_with_root("/dev/null", "/") == 1); ++ assert_se(null_or_empty_path_with_root("/dev/null", "/.././../") == 1); ++ assert_se(null_or_empty_path_with_root("/dev/null", "/.././..") == 1); ++ assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", NULL) == 1); ++ assert_se(null_or_empty_path_with_root("../../../../../../../../../../../../../../../../../../../../dev/null", "/") == 1); ++ assert_se(null_or_empty_path_with_root("/proc/self/exe", NULL) == 0); ++ assert_se(null_or_empty_path_with_root("/proc/self/exe", "/") == 0); ++ assert_se(null_or_empty_path_with_root("/nosuchfileordir", NULL) == -ENOENT); ++ assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././../") == -ENOENT); ++ assert_se(null_or_empty_path_with_root("/nosuchfileordir", "/.././..") == -ENOENT); ++ assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar") == 1); ++ assert_se(null_or_empty_path_with_root("/foobar/barbar/dev/null", "/foobar/barbar/") == 1); ++} ++ + TEST(files_same) { + _cleanup_close_ int fd = -1; + char name[] = "/tmp/test-files_same.XXXXXX"; diff --git a/SOURCES/0160-shared-install-reuse-the-standard-symlink-verificati.patch b/SOURCES/0160-shared-install-reuse-the-standard-symlink-verificati.patch new file mode 100644 index 0000000..3ba922e --- /dev/null +++ b/SOURCES/0160-shared-install-reuse-the-standard-symlink-verificati.patch @@ -0,0 +1,298 @@ +From 5ec751ab9a06dadc62b30dc07e9dd7a41f8da403 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 4 Mar 2022 18:47:31 +0100 +Subject: [PATCH] shared/install: reuse the standard symlink verification + subroutine +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We save a few lines, but the important thing is that we don't have two +different implementations with slightly different rules used for enablement +and loading. Fixes #22000. + +Tested with: +- the report in #22000, it now says: +$ SYSTEMD_LOG_LEVEL=debug systemctl --root=/ enable test.service +Suspicious symlink /etc/systemd/system/test.service→/etc/systemd/system/myown.d/test.service, treating as alias. +unit_file_resolve_symlink: self-alias: /etc/systemd/system/test.service → test.service, ignoring. +running_in_chroot(): Permission denied +Suspicious symlink /etc/systemd/system/test.service→/etc/systemd/system/myown.d/test.service, treating as alias. +unit_file_resolve_symlink: self-alias: /etc/systemd/system/test.service → test.service, ignoring. +Failed to enable unit, refusing to operate on linked unit file test.service + +- a symlink to /dev/null: +... +unit_file_resolve_symlink: linked unit file: /etc/systemd/system/test3.service → /dev/null +Failed to enable unit, unit /etc/systemd/system/test3.service is masked. + +- the same from the host: +... +unit_file_resolve_symlink: linked unit file: /var/lib/machines/rawhide/etc/systemd/system/test3.service → /var/lib/machines/rawhide/dev/null +Failed to enable unit, unit /var/lib/machines/rawhide/etc/systemd/system/test3.service is masked. + +- through the manager: +$ sudo systemctl enable test.service +Failed to enable unit: Refusing to operate on alias name or linked unit file: test.service +$ sudo systemctl enable test3.service +Failed to enable unit: Unit file /etc/systemd/system/test3.service is masked. + +As seen in the first example, the warning is repeated. This is because we call +the lookup logic twice: first for sysv-compat, and then again for real. I think +that since this is only for broken setups, and when sysv-compat is enabled, and +in an infrequent manual operation, at debug level, this is OK. + +(cherry picked from commit 047d37dc3d376d912275c14d217f7a0dda9a5f0e) + +Related: #2082131 +--- + src/basic/unit-file.c | 70 +++++++++++++++++++++++++++++++---------- + src/basic/unit-file.h | 10 ++++++ + src/shared/install.c | 72 +++++++------------------------------------ + 3 files changed, 75 insertions(+), 77 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 25abce932a..f7a10b22c6 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -260,27 +260,50 @@ static int directory_name_is_valid(const char *name) { + return false; + } + +-static int unit_file_resolve_symlink( ++int unit_file_resolve_symlink( + const char *root_dir, + char **search_path, + const char *dir, + int dirfd, + const char *filename, ++ bool resolve_destination_target, + char **ret_destination) { + +- _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL; ++ _cleanup_free_ char *target = NULL, *simplified = NULL, *dst = NULL, *_dir = NULL, *_filename = NULL; + int r; + +- assert(dir); +- assert(dirfd >= 0); ++ /* This can be called with either dir+dirfd valid and filename just a name, ++ * or !dir && dirfd==AT_FDCWD, and filename being a full path. ++ * ++ * If resolve_destination_target is true, an absolute path will be returned. ++ * If not, an absolute path is returned for linked unit files, and a relative ++ * path otherwise. */ ++ + assert(filename); + assert(ret_destination); ++ assert(dir || path_is_absolute(filename)); ++ assert(dirfd >= 0 || dirfd == AT_FDCWD); + + r = readlinkat_malloc(dirfd, filename, &target); + if (r < 0) + return log_warning_errno(r, "Failed to read symlink %s%s%s: %m", + dir, dir ? "/" : "", filename); + ++ if (!dir) { ++ r = path_extract_directory(filename, &_dir); ++ if (r < 0) ++ return r; ++ dir = _dir; ++ ++ r = path_extract_filename(filename, &_filename); ++ if (r < 0) ++ return r; ++ if (r == O_DIRECTORY) ++ return log_warning_errno(SYNTHETIC_ERRNO(EISDIR), ++ "Unexpected path to a directory \"%s\", refusing.", filename); ++ filename = _filename; ++ } ++ + bool is_abs = path_is_absolute(target); + if (root_dir || !is_abs) { + char *target_abs = path_join(is_abs ? root_dir : dir, target); +@@ -296,24 +319,36 @@ static int unit_file_resolve_symlink( + return log_warning_errno(r, "Failed to resolve symlink %s/%s pointing to %s: %m", + dir, filename, target); + ++ assert(path_is_absolute(simplified)); ++ + /* Check if the symlink goes outside of our search path. +- * If yes, it's a linked unit file or mask, and we don't care about the target name. +- * Let's just store the link source directly. +- * If not, let's verify that it's a good symlink. */ ++ * If yes, it's a linked unit file or mask, and we don't care about the target name ++ * when loading units, and we return the link *source* (resolve_destination_target == false); ++ * When this is called for installation purposes, we want the final destination, ++ * so we return the *target*. ++ * ++ * Otherwise, let's verify that it's a good alias. ++ */ + const char *tail = path_startswith_strv(simplified, search_path); + if (!tail) { + log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified); + +- dst = path_join(dir, filename); +- if (!dst) +- return log_oom(); ++ if (resolve_destination_target) ++ dst = TAKE_PTR(simplified); ++ else { ++ dst = path_join(dir, filename); ++ if (!dst) ++ return log_oom(); ++ } + + } else { +- r = path_extract_filename(simplified, &dst); ++ _cleanup_free_ char *target_name = NULL; ++ ++ r = path_extract_filename(simplified, &target_name); + if (r < 0) + return r; + +- bool self_alias = streq(dst, filename); ++ bool self_alias = streq(target_name, filename); + + if (is_path(tail)) + log_full(self_alias ? LOG_DEBUG : LOG_WARNING, +@@ -324,13 +359,15 @@ static int unit_file_resolve_symlink( + if (r < 0) + return r; + +- if (self_alias) +- /* A self-alias that has no effect */ ++ if (self_alias && !resolve_destination_target) ++ /* A self-alias that has no effect when loading, let's just ignore it. */ + return log_debug_errno(SYNTHETIC_ERRNO(ELOOP), + "Unit file self-alias: %s/%s → %s, ignoring.", +- dir, filename, dst); ++ dir, filename, target_name); ++ ++ log_debug("Unit file alias: %s/%s → %s", dir, filename, target_name); + +- log_debug("Unit file alias: %s/%s → %s", dir, filename, dst); ++ dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name); + } + + *ret_destination = TAKE_PTR(dst); +@@ -475,6 +512,7 @@ int unit_file_build_name_map( + + r = unit_file_resolve_symlink(lp->root_dir, lp->search_path, + *dir, dirfd(d), de->d_name, ++ /* resolve_destination_target= */ false, + &dst); + if (r == -ENOMEM) + return r; +diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h +index cc731a9e06..e29e878cfd 100644 +--- a/src/basic/unit-file.h ++++ b/src/basic/unit-file.h +@@ -44,6 +44,16 @@ int unit_symlink_name_compatible(const char *symlink, const char *target, bool i + int unit_validate_alias_symlink_and_warn(const char *filename, const char *target); + + bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_hash, uint64_t *ret_new); ++ ++int unit_file_resolve_symlink( ++ const char *root_dir, ++ char **search_path, ++ const char *dir, ++ int dirfd, ++ const char *filename, ++ bool resolve_destination_target, ++ char **ret_destination); ++ + int unit_file_build_name_map( + const LookupPaths *lp, + uint64_t *cache_timestamp_hash, +diff --git a/src/shared/install.c b/src/shared/install.c +index 79e5109ce1..e07ca31797 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1338,76 +1338,26 @@ static int unit_file_load_or_readlink( + const char *path, + const LookupPaths *lp, + SearchFlags flags) { +- +- _cleanup_free_ char *resolved = NULL; + int r; + + r = unit_file_load(c, info, path, lp->root_dir, flags); + if (r != -ELOOP || (flags & SEARCH_DROPIN)) + return r; + +- r = chase_symlinks(path, lp->root_dir, CHASE_WARN | CHASE_NONEXISTENT, &resolved, NULL); +- if (r >= 0 && +- lp->root_dir && +- path_equal_ptr(path_startswith(resolved, lp->root_dir), "dev/null")) +- /* When looking under root_dir, we can't expect /dev/ to be mounted, +- * so let's see if the path is a (possibly dangling) symlink to /dev/null. */ +- info->type = UNIT_FILE_TYPE_MASKED; +- +- else if (r > 0 && null_or_empty_path(resolved) > 0) ++ /* This is a symlink, let's read and verify it. */ ++ r = unit_file_resolve_symlink(lp->root_dir, lp->search_path, ++ NULL, AT_FDCWD, path, ++ true, &info->symlink_target); ++ if (r < 0) ++ return r; + ++ r = null_or_empty_path_with_root(info->symlink_target, lp->root_dir); ++ if (r < 0 && r != -ENOENT) ++ return log_debug_errno(r, "Failed to stat %s: %m", info->symlink_target); ++ if (r > 0) + info->type = UNIT_FILE_TYPE_MASKED; +- +- else { +- _cleanup_free_ char *target = NULL; +- const char *bn; +- UnitType a, b; +- +- /* This is a symlink, let's read it. We read the link again, because last time +- * we followed the link until resolution, and here we need to do one step. */ +- +- r = readlink_malloc(path, &target); +- if (r < 0) +- return r; +- +- bn = basename(target); +- +- if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN)) { +- +- if (!unit_name_is_valid(bn, UNIT_NAME_PLAIN)) +- return -EINVAL; +- +- } else if (unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) { +- +- if (!unit_name_is_valid(bn, UNIT_NAME_INSTANCE|UNIT_NAME_TEMPLATE)) +- return -EINVAL; +- +- } else if (unit_name_is_valid(info->name, UNIT_NAME_TEMPLATE)) { +- +- if (!unit_name_is_valid(bn, UNIT_NAME_TEMPLATE)) +- return -EINVAL; +- } else +- return -EINVAL; +- +- /* Enforce that the symlink destination does not +- * change the unit file type. */ +- +- a = unit_name_to_type(info->name); +- b = unit_name_to_type(bn); +- if (a < 0 || b < 0 || a != b) +- return -EINVAL; +- +- if (path_is_absolute(target)) +- /* This is an absolute path, prefix the root so that we always deal with fully qualified paths */ +- info->symlink_target = path_join(lp->root_dir, target); +- else +- /* This is a relative path, take it relative to the dir the symlink is located in. */ +- info->symlink_target = file_in_same_dir(path, target); +- if (!info->symlink_target) +- return -ENOMEM; +- ++ else + info->type = UNIT_FILE_TYPE_SYMLINK; +- } + + return 0; + } diff --git a/SOURCES/0161-shared-install-add-a-bit-more-quoting.patch b/SOURCES/0161-shared-install-add-a-bit-more-quoting.patch new file mode 100644 index 0000000..290f6b1 --- /dev/null +++ b/SOURCES/0161-shared-install-add-a-bit-more-quoting.patch @@ -0,0 +1,118 @@ +From 348699605248eb30743c0aac4f2ecbff5dd986ad Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 3 Mar 2022 11:09:25 +0100 +Subject: [PATCH] shared/install: add a bit more quoting + +When we are printing a valid unit name, quoting isn't necessary, because +unit names cannot contain whitespace or other confusing characters. In particular +if the unit name is prefixed by " unit " or something else that clearly +identifies the string as a unit name, quoting would just add unnecessary +noise. But when we're printing paths or invalid names, it's better to add +quotes for clarity. + +(cherry picked from commit e75a26d0457d67a3146ff2d90af07db22213da3c) + +Related: #2082131 +--- + src/shared/install.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index e07ca31797..cbfe96b1e8 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -338,7 +338,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + break; + case UNIT_FILE_UNLINK: + if (!quiet) +- log_info("Removed %s.", changes[i].path); ++ log_info("Removed \"%s\".", changes[i].path); + break; + case UNIT_FILE_IS_MASKED: + if (!quiet) +@@ -361,11 +361,11 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + case -EEXIST: + if (changes[i].source) + log_error_errno(changes[i].type_or_errno, +- "Failed to %s unit, file %s already exists and is a symlink to %s.", ++ "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".", + verb, changes[i].path, changes[i].source); + else + log_error_errno(changes[i].type_or_errno, +- "Failed to %s unit, file %s already exists.", ++ "Failed to %s unit, file \"%s\" already exists.", + verb, changes[i].path); + logged = true; + break; +@@ -391,7 +391,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + logged = true; + break; + case -ELOOP: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s", ++ log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.", + verb, changes[i].path); + logged = true; + break; +@@ -403,7 +403,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + + default: + assert(changes[i].type_or_errno < 0); +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file %s: %m.", ++ log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m", + verb, changes[i].path); + logged = true; + } +@@ -840,7 +840,7 @@ static int find_symlinks( + + d = opendir(path); + if (!d) { +- log_error_errno(errno, "Failed to open directory '%s' while scanning for symlinks, ignoring: %m", path); ++ log_error_errno(errno, "Failed to open directory \"%s\" while scanning for symlinks, ignoring: %m", path); + continue; + } + +@@ -848,7 +848,7 @@ static int find_symlinks( + if (r > 0) + return 1; + else if (r < 0) +- log_debug_errno(r, "Failed to lookup for symlinks in '%s': %m", path); ++ log_debug_errno(r, "Failed to look up symlinks in \"%s\": %m", path); + } + + /* We didn't find any suitable symlinks in .wants or .requires directories, let's look for linked unit files in this directory. */ +@@ -1321,7 +1321,7 @@ static int unit_file_load( + 0, info, + NULL); + if (r < 0) +- return log_debug_errno(r, "Failed to parse %s: %m", info->name); ++ return log_debug_errno(r, "Failed to parse \"%s\": %m", info->name); + + if ((flags & SEARCH_DROPIN) == 0) + info->type = UNIT_FILE_TYPE_REGULAR; +@@ -1481,7 +1481,7 @@ static int unit_file_search( + STRV_FOREACH(p, files) { + r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN); + if (r < 0) +- return log_debug_errno(r, "Failed to load conf file %s: %m", *p); ++ return log_debug_errno(r, "Failed to load conf file \"%s\": %m", *p); + } + + return result; +@@ -1726,7 +1726,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + return log_error_errno(r, "Failed to verify alias validity: %m"); + if (r == 0) + return log_warning_errno(SYNTHETIC_ERRNO(EXDEV), +- "Invalid unit %s symlink %s.", ++ "Invalid unit \"%s\" symlink \"%s\".", + i->name, dst); + + } else { +@@ -1737,7 +1737,7 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + + UnitNameFlags type = unit_name_to_instance(i->name, &inst); + if (type < 0) +- return log_error_errno(type, "Failed to extract instance name from %s: %m", i->name); ++ return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", i->name); + + if (type == UNIT_NAME_INSTANCE) { + r = unit_name_replace_instance(dst, inst, &dst_updated); diff --git a/SOURCES/0162-test-add-test-for-systemctl-link-enable.patch b/SOURCES/0162-test-add-test-for-systemctl-link-enable.patch new file mode 100644 index 0000000..439eb7c --- /dev/null +++ b/SOURCES/0162-test-add-test-for-systemctl-link-enable.patch @@ -0,0 +1,587 @@ +From e7bd636e75a5435b80a1df478e9e637dd2f7b851 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 7 Mar 2022 12:15:42 +0100 +Subject: [PATCH] test: add test for systemctl link & enable + +This test has overlap with test-install-root, but it tests things at a +different level, so I think it's useful to add. It immediately shows various +bugs which will be fixed in later patches. + +(cherry picked from commit 50c5f5a3d907f819fa139e1853f660ad4fd82c55) + +Related: #2082131 +--- + meson.build | 9 +- + test/meson.build | 1 + + test/test-systemctl-enable.sh | 523 ++++++++++++++++++++++++++++++++++ + 3 files changed, 532 insertions(+), 1 deletion(-) + create mode 100644 test/test-systemctl-enable.sh + +diff --git a/meson.build b/meson.build +index fdf02b8110..005af872cf 100644 +--- a/meson.build ++++ b/meson.build +@@ -2371,7 +2371,7 @@ public_programs += executable( + install_rpath : rootlibexecdir, + install : true) + +-public_programs += executable( ++exe = executable( + 'systemctl', + systemctl_sources, + include_directories : includes, +@@ -2385,6 +2385,13 @@ public_programs += executable( + install_rpath : rootlibexecdir, + install : true, + install_dir : rootbindir) ++public_programs += exe ++if want_tests != 'false' ++ test('test-systemctl-enable', ++ test_systemctl_enable_sh, ++ # https://github.com/mesonbuild/meson/issues/2681 ++ args : exe.full_path()) ++endif + + if conf.get('ENABLE_PORTABLED') == 1 + dbus_programs += executable( +diff --git a/test/meson.build b/test/meson.build +index c5d8d6917b..c69d8a0204 100644 +--- a/test/meson.build ++++ b/test/meson.build +@@ -88,6 +88,7 @@ endif + + test_fstab_generator_sh = find_program('test-fstab-generator.sh') + test_network_generator_conversion_sh = find_program('test-network-generator-conversion.sh') ++test_systemctl_enable_sh = find_program('test-systemctl-enable.sh') + test_systemd_tmpfiles_py = find_program('test-systemd-tmpfiles.py') + hwdb_test_sh = find_program('hwdb-test.sh') + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +new file mode 100644 +index 0000000000..30ba6532e7 +--- /dev/null ++++ b/test/test-systemctl-enable.sh +@@ -0,0 +1,523 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -ex ++ ++# Silence warning from running_in_chroot_or_offline() ++export SYSTEMD_IGNORE_CHROOT=1 ++ ++systemctl=${1:-systemctl} ++ ++unset root ++cleanup() { ++ [ -n "$root" ] && rm -rf "$root" ++} ++trap cleanup exit ++root=$(mktemp -d --tmpdir systemctl-test.XXXXXX) ++ ++islink() { ++ test -h "$1" || return 1 ++ test "$(readlink "$1")" = "$2" || return 2 ++} ++ ++: ------enablement nonexistent-------------------------------- ++"$systemctl" --root="$root" enable test1.service && { echo "Expected failure" >&2; exit 1; } ++ ++: ------basic enablement-------------------------------------- ++mkdir -p "$root/etc/systemd/system" ++cat >"$root/etc/systemd/system/test1.service" <>"$root/etc/systemd/system/test1.service" <"$root/etc/systemd/system/test2.socket" <"$root/etc/systemd/system/test2.service" <&2; exit 1; } ++test ! -e "$root/etc/systemd/system/link1.path" ++ ++cat >"$root/link1.path" <&2; exit 1; } ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++ ++: -------link bad suffix-------------------------------------- ++cp "$root/link1.path" "$root/subdir/link1.suffix" ++"$systemctl" --root="$root" link '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; } ++test ! -e "$root/etc/systemd/system/link1.suffix" ++ ++: -------unlink by unit name---------------------------------- ++"$systemctl" --root="$root" disable 'link1.path' ++test ! -e "$root/etc/systemd/system/link1.path" ++ ++: -------unlink by path--------------------------------------- ++"$systemctl" --root="$root" link '/link1.path' ++test -h "$root/etc/systemd/system/link1.path" ++"$systemctl" --root="$root" disable '/link1.path' ++test ! -e "$root/etc/systemd/system/link1.path" ++ ++: -------unlink by wrong path--------------------------------- ++"$systemctl" --root="$root" link '/link1.path' ++test -h "$root/etc/systemd/system/link1.path" ++"$systemctl" --root="$root" disable '/subdir/link1.path' # we only care about the name ++test ! -e "$root/etc/systemd/system/link1.path" ++ ++ ++: -------link and enable-------------------------------------- ++"$systemctl" --root="$root" enable '/link1.path' ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++ ++: -------enable already linked same path---------------------- ++"$systemctl" --root="$root" enable '/link1.path' ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++ ++: -------enable already linked different path----------------- ++# FIXME ++# "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; } ++# test -h "$root/etc/systemd/system/link1.path" ++# readlink "$root/etc/systemd/system/link1.path" ++# test -h "$root/etc/systemd/system/paths.target.wants/link1.path" ++# readlink "$root/etc/systemd/system/paths.target.wants/link1.path" ++ ++: -------enable bad suffix------------------------------------ ++cp "$root/link1.path" "$root/subdir/link1.suffix" ++"$systemctl" --root="$root" enable '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; } ++test ! -e "$root/etc/systemd/system/link1.suffix" ++test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix" ++ ++: -------disable by unit name--------------------------------- ++"$systemctl" --root="$root" disable 'link1.path' ++test ! -e "$root/etc/systemd/system/link1.path" ++test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path" ++ ++: -------disable by path-------------------------------------- ++"$systemctl" --root="$root" enable '/link1.path' ++test -h "$root/etc/systemd/system/link1.path" ++test -h "$root/etc/systemd/system/paths.target.wants/link1.path" ++"$systemctl" --root="$root" disable '/link1.path' ++test ! -e "$root/etc/systemd/system/link1.path" ++test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path" ++ ++ ++: -------link then enable------------------------------------- ++"$systemctl" --root="$root" link '/link1.path' ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path" ++ ++"$systemctl" --root="$root" enable 'link1.path' ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++ ++# FIXME ++# "$systemctl" --root="$root" reenable 'link1.path' ++# islink "$root/etc/systemd/system/link1.path" "/link1.path" ++# islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++ ++ ++: -------manual link------------------------------------------ ++cat >"$root/link3.suffix" <&2; exit 1; } ++"$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' && { echo "Expected failure" >&2; exit 1; } ++ ++: -------enable on masked alias------------------------------- ++test -h "$root/etc/systemd/system/masked.service" ++ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service" ++"$systemctl" --root="$root" enable 'masked-alias.service' && { echo "Expected failure" >&2; exit 1; } ++"$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' && { echo "Expected failure" >&2; exit 1; } ++ ++: -------issue 22000: link in subdirectory-------------------- ++mkdir -p "$root/etc/systemd/system/myown.d" ++cat >"$root/etc/systemd/system/link5-also.service" <"$root/etc/systemd/system/myown.d/link5.service" <&2; exit 1; } ++test ! -h "$root/etc/systemd/system/services.target.wants/link5.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service" ++ ++"$systemctl" --root="$root" enable 'link5-also.service' ++test ! -h "$root/etc/systemd/system/services.target.wants/link5.service" ++islink "$root/etc/systemd/system/services.target.wants/link5-also.service" "/etc/systemd/system/link5-also.service" ++ ++: -------template enablement---------------------------------- ++cat >"$root/etc/systemd/system/templ1@.service" <&2; exit 1; } ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" ++ ++"$systemctl" --root="$root" enable 'templ1@one.service' ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" ++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service" ++ ++"$systemctl" --root="$root" enable 'templ1@two.service' ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" ++islink "$root/etc/systemd/system/services.target.wants/templ1@one.service" "/etc/systemd/system/templ1@.service" ++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service" ++ ++"$systemctl" --root="$root" disable 'templ1@one.service' ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" ++islink "$root/etc/systemd/system/services.target.wants/templ1@two.service" "/etc/systemd/system/templ1@.service" ++ ++"$systemctl" --root="$root" disable 'templ1@two.service' ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" ++ ++: -------template enablement w/ default instance-------------- ++cat >>"$root/etc/systemd/system/templ1@.service" <"$root/etc/systemd/system/link4.service" <"$root/etc/systemd/system/link5.service" <"$root/etc/systemd/system/link5@.path" <"$root/etc/systemd/system/multilink.mount" <"$root/etc/systemd/system/some-some-link6@.socket" <&2; exit 1; } ++ ++check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; } ++ ++# FIXME: if there's an invalid Alias=, we shouldn't preach about empty [Install] ++ ++exit 0 # yes, this is needed because the last test above fails ++ ++# TODO: repeat the tests above for presets diff --git a/SOURCES/0163-tests-add-helper-for-creating-tempfiles-with-content.patch b/SOURCES/0163-tests-add-helper-for-creating-tempfiles-with-content.patch new file mode 100644 index 0000000..50d813b --- /dev/null +++ b/SOURCES/0163-tests-add-helper-for-creating-tempfiles-with-content.patch @@ -0,0 +1,248 @@ +From ad50f15e51f4f2ffc4ebbfab10a3e1c5739c9ce6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 7 Mar 2022 15:06:57 +0100 +Subject: [PATCH] tests: add helper for creating tempfiles with content + +I put it in tests because I think we're most likely to use it in tests. +If necessary, it can be moved somewhere else later. + +(cherry picked from commit 367c47c886af7d915e23de8d6aae0a1c135c0350) + +Related: #2082131 +--- + src/shared/tests.c | 19 +++++++++ + src/shared/tests.h | 2 + + src/test/test-env-file.c | 77 +++++++++---------------------------- + src/test/test-socket-util.c | 19 +++------ + 4 files changed, 44 insertions(+), 73 deletions(-) + +diff --git a/src/shared/tests.c b/src/shared/tests.c +index f5d9536411..307f796fe2 100644 +--- a/src/shared/tests.c ++++ b/src/shared/tests.c +@@ -25,6 +25,7 @@ + #include "cgroup-util.h" + #include "env-file.h" + #include "env-util.h" ++#include "fd-util.h" + #include "fs-util.h" + #include "log.h" + #include "namespace-util.h" +@@ -33,6 +34,7 @@ + #include "random-util.h" + #include "strv.h" + #include "tests.h" ++#include "tmpfile-util.h" + + char* setup_fake_runtime_dir(void) { + char t[] = "/tmp/fake-xdg-runtime-XXXXXX", *p; +@@ -133,6 +135,23 @@ int log_tests_skipped_errno(int r, const char *message) { + return EXIT_TEST_SKIP; + } + ++int write_tmpfile(char *pattern, const char *contents) { ++ _cleanup_close_ int fd = -1; ++ ++ assert(pattern); ++ assert(contents); ++ ++ fd = mkostemp_safe(pattern); ++ if (fd < 0) ++ return fd; ++ ++ ssize_t l = strlen(contents); ++ errno = 0; ++ if (write(fd, contents, l) != l) ++ return errno_or_else(EIO); ++ return 0; ++} ++ + bool have_namespaces(void) { + siginfo_t si = {}; + pid_t pid; +diff --git a/src/shared/tests.h b/src/shared/tests.h +index ef6acd368e..ade527590b 100644 +--- a/src/shared/tests.h ++++ b/src/shared/tests.h +@@ -30,6 +30,8 @@ void test_setup_logging(int level); + int log_tests_skipped(const char *message); + int log_tests_skipped_errno(int r, const char *message); + ++int write_tmpfile(char *pattern, const char *contents); ++ + bool have_namespaces(void); + + /* We use the small but non-trivial limit here */ +diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c +index f97206b4d6..886a8e4bc8 100644 +--- a/src/test/test-env-file.c ++++ b/src/test/test-env-file.c +@@ -55,18 +55,11 @@ + + + TEST(load_env_file_1) { +- _cleanup_strv_free_ char **data = NULL; +- int r; +- + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; +- _cleanup_close_ int fd; +- +- fd = mkostemp_safe(name); +- assert_se(fd >= 0); +- assert_se(write(fd, env_file_1, strlen(env_file_1)) == strlen(env_file_1)); ++ assert_se(write_tmpfile(name, env_file_1) == 0); + +- r = load_env_file(NULL, name, &data); +- assert_se(r == 0); ++ _cleanup_strv_free_ char **data = NULL; ++ assert_se(load_env_file(NULL, name, &data) == 0); + assert_se(streq(data[0], "a=a")); + assert_se(streq(data[1], "b=bc")); + assert_se(streq(data[2], "d=de f")); +@@ -77,50 +70,30 @@ TEST(load_env_file_1) { + } + + TEST(load_env_file_2) { +- _cleanup_strv_free_ char **data = NULL; +- int r; +- + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; +- _cleanup_close_ int fd; ++ assert_se(write_tmpfile(name, env_file_2) == 0); + +- fd = mkostemp_safe(name); +- assert_se(fd >= 0); +- assert_se(write(fd, env_file_2, strlen(env_file_2)) == strlen(env_file_2)); +- +- r = load_env_file(NULL, name, &data); +- assert_se(r == 0); ++ _cleanup_strv_free_ char **data = NULL; ++ assert_se(load_env_file(NULL, name, &data) == 0); + assert_se(streq(data[0], "a=a")); + assert_se(data[1] == NULL); + } + + TEST(load_env_file_3) { +- _cleanup_strv_free_ char **data = NULL; +- int r; +- + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; +- _cleanup_close_ int fd; +- +- fd = mkostemp_safe(name); +- assert_se(fd >= 0); +- assert_se(write(fd, env_file_3, strlen(env_file_3)) == strlen(env_file_3)); ++ assert_se(write_tmpfile(name, env_file_3) == 0); + +- r = load_env_file(NULL, name, &data); +- assert_se(r == 0); ++ _cleanup_strv_free_ char **data = NULL; ++ assert_se(load_env_file(NULL, name, &data) == 0); + assert_se(data == NULL); + } + + TEST(load_env_file_4) { +- _cleanup_strv_free_ char **data = NULL; + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; +- _cleanup_close_ int fd; +- int r; +- +- fd = mkostemp_safe(name); +- assert_se(fd >= 0); +- assert_se(write(fd, env_file_4, strlen(env_file_4)) == strlen(env_file_4)); ++ assert_se(write_tmpfile(name, env_file_4) == 0); + +- r = load_env_file(NULL, name, &data); +- assert_se(r == 0); ++ _cleanup_strv_free_ char **data = NULL; ++ assert_se(load_env_file(NULL, name, &data) == 0); + assert_se(streq(data[0], "HWMON_MODULES=coretemp f71882fg")); + assert_se(streq(data[1], "MODULE_0=coretemp")); + assert_se(streq(data[2], "MODULE_1=f71882fg")); +@@ -128,36 +101,22 @@ TEST(load_env_file_4) { + } + + TEST(load_env_file_5) { +- _cleanup_strv_free_ char **data = NULL; +- int r; +- + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; +- _cleanup_close_ int fd; +- +- fd = mkostemp_safe(name); +- assert_se(fd >= 0); +- assert_se(write(fd, env_file_5, strlen(env_file_5)) == strlen(env_file_5)); ++ assert_se(write_tmpfile(name, env_file_5) == 0); + +- r = load_env_file(NULL, name, &data); +- assert_se(r == 0); ++ _cleanup_strv_free_ char **data = NULL; ++ assert_se(load_env_file(NULL, name, &data) == 0); + assert_se(streq(data[0], "a=")); + assert_se(streq(data[1], "b=")); + assert_se(data[2] == NULL); + } + + TEST(load_env_file_6) { +- _cleanup_strv_free_ char **data = NULL; +- int r; +- + _cleanup_(unlink_tempfilep) char name[] = "/tmp/test-load-env-file.XXXXXX"; +- _cleanup_close_ int fd; ++ assert_se(write_tmpfile(name, env_file_6) == 0); + +- fd = mkostemp_safe(name); +- assert_se(fd >= 0); +- assert_se(write(fd, env_file_6, strlen(env_file_6)) == strlen(env_file_6)); +- +- r = load_env_file(NULL, name, &data); +- assert_se(r == 0); ++ _cleanup_strv_free_ char **data = NULL; ++ assert_se(load_env_file(NULL, name, &data) == 0); + assert_se(streq(data[0], "a= n t x y '")); + assert_se(streq(data[1], "b=$'")); + assert_se(streq(data[2], "c= \\n\\t\\$\\`\\\\\n")); +diff --git a/src/test/test-socket-util.c b/src/test/test-socket-util.c +index 9ee651a5fa..3245516f9a 100644 +--- a/src/test/test-socket-util.c ++++ b/src/test/test-socket-util.c +@@ -228,17 +228,12 @@ TEST(passfd_read) { + + if (r == 0) { + /* Child */ +- char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX"; +- _cleanup_close_ int tmpfd = -1; +- + pair[0] = safe_close(pair[0]); + +- tmpfd = mkostemp_safe(tmpfile); +- assert_se(tmpfd >= 0); +- assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents)); +- tmpfd = safe_close(tmpfd); ++ char tmpfile[] = "/tmp/test-socket-util-passfd-read-XXXXXX"; ++ assert_se(write_tmpfile(tmpfile, file_contents) == 0); + +- tmpfd = open(tmpfile, O_RDONLY); ++ _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY); + assert_se(tmpfd >= 0); + assert_se(unlink(tmpfile) == 0); + +@@ -277,16 +272,12 @@ TEST(passfd_contents_read) { + /* Child */ + struct iovec iov = IOVEC_INIT_STRING(wire_contents); + char tmpfile[] = "/tmp/test-socket-util-passfd-contents-read-XXXXXX"; +- _cleanup_close_ int tmpfd = -1; + + pair[0] = safe_close(pair[0]); + +- tmpfd = mkostemp_safe(tmpfile); +- assert_se(tmpfd >= 0); +- assert_se(write(tmpfd, file_contents, strlen(file_contents)) == (ssize_t) strlen(file_contents)); +- tmpfd = safe_close(tmpfd); ++ assert_se(write_tmpfile(tmpfile, file_contents) == 0); + +- tmpfd = open(tmpfile, O_RDONLY); ++ _cleanup_close_ int tmpfd = open(tmpfile, O_RDONLY); + assert_se(tmpfd >= 0); + assert_se(unlink(tmpfile) == 0); + diff --git a/SOURCES/0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch b/SOURCES/0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch new file mode 100644 index 0000000..a47ca97 --- /dev/null +++ b/SOURCES/0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch @@ -0,0 +1,106 @@ +From 2c9079ca0eaa2a1df2a1775c28fa7a49785999df Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 28 Mar 2022 11:46:38 +0200 +Subject: [PATCH] man: clarify the descriptions of aliases and linked unit + files + +This just describes the rules that are implemented by the manager, and this +pull request does not change any of them. + +(cherry picked from commit ecd6c000d3a2e743a0f533d427250714c7593cf7) + +Related: #2082131 +--- + man/systemd.unit.xml | 58 ++++++++++++++++++++++++++++++++------------ + 1 file changed, 43 insertions(+), 15 deletions(-) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 2a44b8cfd8..4ba602b5ad 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -140,7 +140,7 @@ + a symlink, so when systemd is asked through D-Bus to load + dbus-org.freedesktop.network1.service, it'll load + systemd-networkd.service. As another example, default.target — +- the default system target started at boot — is commonly symlinked (aliased) to either ++ the default system target started at boot — is commonly aliased to either + multi-user.target or graphical.target to select what is started + by default. Alias names may be used in commands like disable, + start, stop, status, and similar, and in all +@@ -156,8 +156,12 @@ + template instance (e.g. alias@inst.service) may be a symlink to different template + (e.g. template@inst.service). In that case, just this specific instance is aliased, + while other instances of the template (e.g. alias@foo.service, +- alias@bar.service) are not aliased. Those rule preserve the requirement that the +- instance (if any) is always uniquely defined for a given unit and all its aliases. ++ alias@bar.service) are not aliased. Those rules preserve the requirement that the ++ instance (if any) is always uniquely defined for a given unit and all its aliases. The target of alias ++ symlink must point to a valid unit file location, i.e. the symlink target name must match the symlink ++ source name as described, and the destination path must be in one of the unit search paths, see UNIT FILE ++ LOAD PATH section below for more details. Note that the target file may not exist, i.e. the symlink may ++ be dangling. + + Unit files may specify aliases through the Alias= directive in the [Install] + section. When the unit is enabled, symlinks will be created for those names, and removed when the unit is +@@ -177,11 +181,18 @@ + exists for Requires= type dependencies as well, the directory suffix is + .requires/ in this case. This functionality is useful to hook units into the + start-up of other units, without having to modify their unit files. For details about the semantics of +- Wants=, see below. The preferred way to create symlinks in the +- .wants/ or .requires/ directory of a unit file is by embedding +- the dependency in [Install] section of the target unit, and creating the symlink in the file system with +- the enable or preset commands of +- systemctl1. ++ Wants= and Requires=, see below. The preferred way to create ++ symlinks in the .wants/ or .requires/ directories is by ++ specifying the dependency in [Install] section of the target unit, and creating the symlink in the file ++ system with the enable or preset commands of ++ systemctl1. The ++ target can be a normal unit (either plain or a specific instance of a template unit). In case when the ++ source unit is a template, the target can also be a template, in which case the instance will be ++ "propagated" to the target unit to form a valid unit instance. The target of symlinks in ++ .wants/ or .requires/ must thus point to a valid unit file ++ location, i.e. the symlink target name must satisfy the described requirements, and the destination path ++ must be in one of the unit search paths, see UNIT FILE LOAD PATH section below for more details. Note ++ that the target file may not exist, i.e. the symlink may be dangling. + + Along with a unit file foo.service, a "drop-in" directory + foo.service.d/ may exist. All files with the suffix +@@ -503,13 +514,30 @@ + systemd-analyze --user unit-paths + + +- Moreover, additional units might be loaded into systemd from +- directories not on the unit load path by creating a symlink pointing to a +- unit file in the directories. You can use systemctl link +- for this operation. See +- systemctl1 +- for its usage and precaution. +- ++ Moreover, additional units might be loaded into systemd from directories not on the unit load path ++ by creating a symlink pointing to a unit file in the directories. You can use systemctl ++ link for this; see ++ systemctl1. The file ++ system where the linked unit files are located must be accessible when systemd is started (e.g. anything ++ underneath /home/ or /var/ is not allowed, unless those ++ directories are located on the root file system). ++ ++ It is important to distinguish "linked unit files" from "unit file aliases": any symlink where the ++ symlink target is within the unit load path becomes an alias: the source name and ++ the target file name must satisfy specific constraints listed above in the discussion of aliases, but the ++ symlink target doesn't have to exist, and in fact the symlink target path is not used, except to check ++ whether the target is within the unit load path. In constrast, a symlink which goes outside of the unit ++ load path signifies a linked unit file. The symlink is followed when loading the file, but the ++ destination name is otherwise unused (and may even not be a valid unit file name). For example, symlinks ++ /etc/systemd/system/alias1.serviceservice1.service, ++ /etc/systemd/system/alias2.service/usr/lib/systemd/service1.service, ++ /etc/systemd/system/alias3.service/etc/systemd/system/service1.service ++ are all valid aliases and service1.service will have ++ four names, even if the unit file is located at ++ /run/systemd/system/service1.service. In contrast, ++ a symlink /etc/systemd/system/link1.service../link1_service_file ++ means that link1.service is a "linked unit" and the contents of ++ /etc/systemd/link1_service_file provide its configuration. + + + diff --git a/SOURCES/0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch b/SOURCES/0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch new file mode 100644 index 0000000..83b187f --- /dev/null +++ b/SOURCES/0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch @@ -0,0 +1,85 @@ +From d424adce45d593d41e52294bd8f32fd33c625498 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 7 Mar 2022 18:54:50 +0100 +Subject: [PATCH] basic: add new variable $SYSTEMD_OS_RELEASE to override + location of os-release + +The test for the variable is added in test-systemctl-enable because there we +can do it almost for free, and the variable is most likely to be used with +'systemctl enable --root' anyway. + +(cherry picked from commit df78419d107662dd49892d76a745c294d7031d66) + +Related: #2082131 +--- + docs/ENVIRONMENT.md | 5 +++++ + src/basic/os-util.c | 16 +++++++++++----- + test/test-systemctl-enable.sh | 12 ++++++++++-- + 3 files changed, 26 insertions(+), 7 deletions(-) + +diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md +index 71d6c55010..5e9548449c 100644 +--- a/docs/ENVIRONMENT.md ++++ b/docs/ENVIRONMENT.md +@@ -43,6 +43,11 @@ All tools: + debugging, in order to test generators and other code against specific kernel + command lines. + ++* `$SYSTEMD_OS_RELEASE` — if set, use this path instead of `/etc/os-release` or ++ `/usr/lib/os-release`. When operating under some root (e.g. `systemctl ++ --root=…`), the path is taken relative to the outside root. Only useful for ++ debugging. ++ + * `$SYSTEMD_FSTAB` — if set, use this path instead of `/etc/fstab`. Only useful + for debugging. + +diff --git a/src/basic/os-util.c b/src/basic/os-util.c +index a6e4d09473..38b2179e48 100644 +--- a/src/basic/os-util.c ++++ b/src/basic/os-util.c +@@ -170,13 +170,19 @@ int open_extension_release(const char *root, const char *extension, char **ret_p + } + } + } else { +- FOREACH_STRING(p, "/etc/os-release", "/usr/lib/os-release") { +- r = chase_symlinks(p, root, CHASE_PREFIX_ROOT, ++ const char *var = secure_getenv("SYSTEMD_OS_RELEASE"); ++ if (var) ++ r = chase_symlinks(var, root, 0, + ret_path ? &q : NULL, + ret_fd ? &fd : NULL); +- if (r != -ENOENT) +- break; +- } ++ else ++ FOREACH_STRING(path, "/etc/os-release", "/usr/lib/os-release") { ++ r = chase_symlinks(path, root, CHASE_PREFIX_ROOT, ++ ret_path ? &q : NULL, ++ ret_fd ? &fd : NULL); ++ if (r != -ENOENT) ++ break; ++ } + } + if (r < 0) + return r; +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 30ba6532e7..769341129c 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -518,6 +518,14 @@ check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit + + # FIXME: if there's an invalid Alias=, we shouldn't preach about empty [Install] + +-exit 0 # yes, this is needed because the last test above fails +- + # TODO: repeat the tests above for presets ++ ++: -------SYSTEMD_OS_RELEASE relative to root------------------ ++# check that os-release overwriting works as expected with root ++test -e "$root/etc/os-release" ++ ++cat >"$root/etc/os-release2" < +Date: Mon, 7 Mar 2022 19:22:01 +0100 +Subject: [PATCH] test-os-util: add basic tests for os-release parsing + +(cherry picked from commit 80e72f80bc407753582b421421c13ca50b675027) + +Related: #2082131 +--- + src/test/test-os-util.c | 62 +++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 62 insertions(+) + +diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c +index eb5466259a..5f82748783 100644 +--- a/src/test/test-os-util.c ++++ b/src/test/test-os-util.c +@@ -2,8 +2,11 @@ + + #include + ++#include "fs-util.h" + #include "log.h" + #include "os-util.h" ++#include "string-util.h" ++#include "strv.h" + #include "tests.h" + + TEST(path_is_os_tree) { +@@ -12,4 +15,63 @@ TEST(path_is_os_tree) { + assert_se(path_is_os_tree("/idontexist") == -ENOENT); + } + ++TEST(parse_os_release) { ++ /* Let's assume that we're running in a valid system, so os-release is available */ ++ _cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL; ++ assert_se(parse_os_release(NULL, "ID", &id) == 1); ++ log_info("ID: %s", id); ++ ++ assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0); ++ assert_se(parse_os_release(NULL, "ID", &id2) == 0); ++ log_info("ID: %s", strnull(id2)); ++ ++ _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX"; ++ assert_se(write_tmpfile(tmpfile, ++ "ID=the-id \n" ++ "NAME=the-name") == 0); ++ ++ assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0); ++ assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 2); ++ log_info("ID: %s NAME: %s", id, name); ++ assert_se(streq(id, "the-id")); ++ assert_se(streq(name, "the-name")); ++ ++ _cleanup_(unlink_tempfilep) char tmpfile2[] = "/tmp/test-os-util.XXXXXX"; ++ assert_se(write_tmpfile(tmpfile2, ++ "ID=\"ignored\" \n" ++ "ID=\"the-id\" \n" ++ "NAME='the-name'") == 0); ++ ++ assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0); ++ // FIXME: we return 3, which means that the return value is useless in face of repeats ++ assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 3); ++ log_info("ID: %s NAME: %s", id, name); ++ assert_se(streq(id, "the-id")); ++ assert_se(streq(name, "the-name")); ++ ++ assert_se(parse_os_release(NULL, "FOOBAR", &foobar) == 0); ++ log_info("FOOBAR: %s", strnull(foobar)); ++ assert_se(foobar == NULL); ++ ++ assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); ++} ++ ++TEST(load_os_release_pairs) { ++ _cleanup_(unlink_tempfilep) char tmpfile[] = "/tmp/test-os-util.XXXXXX"; ++ assert_se(write_tmpfile(tmpfile, ++ "ID=\"ignored\" \n" ++ "ID=\"the-id\" \n" ++ "NAME='the-name'") == 0); ++ ++ assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0); ++ ++ _cleanup_strv_free_ char **pairs = NULL; ++ assert_se(load_os_release_pairs(NULL, &pairs) == 0); ++ assert_se(strv_equal(pairs, STRV_MAKE("ID", "ignored", // FIXME ++ "ID", "the-id", ++ "NAME", "the-name"))); ++ ++ assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); ++} ++ + DEFINE_TEST_MAIN(LOG_DEBUG); diff --git a/SOURCES/0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch b/SOURCES/0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch new file mode 100644 index 0000000..3ba038c --- /dev/null +++ b/SOURCES/0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch @@ -0,0 +1,104 @@ +From f990ee961a75791adfdea2f5efb35017a51a310e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 8 Mar 2022 10:08:05 +0100 +Subject: [PATCH] basic/env-file: make load-env-file deduplicate entries with + the same key + +We generally assume parsing like the shell would do it, so the last value +should win when there are repeats. + +(cherry picked from commit 25407ad2a785d10b1aadff0c99829ea0cf51082b) + +Related: #2082131 +--- + src/basic/env-file.c | 31 ++++++++++++++++++++----------- + src/test/test-env-file.c | 5 +++++ + src/test/test-os-util.c | 3 +-- + 3 files changed, 26 insertions(+), 13 deletions(-) + +diff --git a/src/basic/env-file.c b/src/basic/env-file.c +index 599b73bc22..0353f3f2a0 100644 +--- a/src/basic/env-file.c ++++ b/src/basic/env-file.c +@@ -415,30 +415,39 @@ static int load_env_file_push_pairs( + const char *key, char *value, + void *userdata, + int *n_pushed) { +- char ***m = userdata; ++ char ***m = ASSERT_PTR(userdata); ++ bool added = false; + int r; + + r = check_utf8ness_and_warn(filename, line, key, value); + if (r < 0) + return r; + ++ /* Check if the key is present */ ++ for (char **t = *m; t && *t; t += 2) ++ if (streq(t[0], key)) { ++ if (value) ++ r = free_and_replace(t[1], value); ++ else ++ r = free_and_strdup(t+1, ""); ++ goto finish; ++ } ++ + r = strv_extend(m, key); + if (r < 0) + return -ENOMEM; + +- if (!value) { +- r = strv_extend(m, ""); +- if (r < 0) +- return -ENOMEM; +- } else { ++ if (value) + r = strv_push(m, value); +- if (r < 0) +- return r; +- } ++ else ++ r = strv_extend(m, ""); ++ added = true; ++ finish: ++ if (r < 0) ++ return r; + +- if (n_pushed) ++ if (n_pushed && added) + (*n_pushed)++; +- + return 0; + } + +diff --git a/src/test/test-env-file.c b/src/test/test-env-file.c +index 886a8e4bc8..461a0f0810 100644 +--- a/src/test/test-env-file.c ++++ b/src/test/test-env-file.c +@@ -9,7 +9,12 @@ + #include "tests.h" + #include "tmpfile-util.h" + ++/* In case of repeating keys, later entries win. */ ++ + #define env_file_1 \ ++ "a=a\n" \ ++ "a=b\n" \ ++ "a=b\n" \ + "a=a\n" \ + "b=b\\\n" \ + "c\n" \ +diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c +index 5f82748783..d6336c53e9 100644 +--- a/src/test/test-os-util.c ++++ b/src/test/test-os-util.c +@@ -67,8 +67,7 @@ TEST(load_os_release_pairs) { + + _cleanup_strv_free_ char **pairs = NULL; + assert_se(load_os_release_pairs(NULL, &pairs) == 0); +- assert_se(strv_equal(pairs, STRV_MAKE("ID", "ignored", // FIXME +- "ID", "the-id", ++ assert_se(strv_equal(pairs, STRV_MAKE("ID", "the-id", + "NAME", "the-name"))); + + assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); diff --git a/SOURCES/0168-man-os-release-add-a-note-about-repeating-entries.patch b/SOURCES/0168-man-os-release-add-a-note-about-repeating-entries.patch new file mode 100644 index 0000000..2fe5e02 --- /dev/null +++ b/SOURCES/0168-man-os-release-add-a-note-about-repeating-entries.patch @@ -0,0 +1,33 @@ +From b4087419bac3cd656a3f8ba82653750fd60c19b9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 8 Mar 2022 10:10:12 +0100 +Subject: [PATCH] man/os-release: add a note about repeating entries + +We didn't actually say that keys should not be repeated. At least the +examples in docs (both python and shell) would do that, and any simple +parser that builds a dictionary would most likely behave the same way. +But let's document this expectation, but also say how to deal with malformed +files. + +(cherry picked from commit 3a84a3c9dfde5182398a6d0863a2b2fe90a936b1) + +Related: #2082131 +--- + man/os-release.xml | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/man/os-release.xml b/man/os-release.xml +index 1826a60d1a..baff088bc0 100644 +--- a/man/os-release.xml ++++ b/man/os-release.xml +@@ -75,6 +75,10 @@ + from earliest boot on, and hence must be located on the root file + system. + ++ os-release must not contain repeating keys. Nevertheless, readers should pick ++ the entries later in the file in case of repeats, similarly to how a shell sourcing the file would. A ++ reader may warn about repeating entries. ++ + For a longer rationale for os-release + please refer to the Announcement of /etc/os-release. diff --git a/SOURCES/0169-shared-specifier-clarify-and-add-test-for-missing-da.patch b/SOURCES/0169-shared-specifier-clarify-and-add-test-for-missing-da.patch new file mode 100644 index 0000000..9e778f6 --- /dev/null +++ b/SOURCES/0169-shared-specifier-clarify-and-add-test-for-missing-da.patch @@ -0,0 +1,55 @@ +From fb51d78042fec1a2df2a7da1f9a759875bd7e07e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 8 Mar 2022 11:38:46 +0100 +Subject: [PATCH] shared/specifier: clarify and add test for missing data + +In systemd.unit we document that unset fields resolve to "". But we didn't +directly test this, so let's do that. Also, we return -ENOENT if the file +is missing, which we didn't document or test. + +(cherry picked from commit 7962116fc8a2572c5c89904ac50fe99c8101f28f) + +Related: #2082131 +--- + src/shared/specifier.c | 4 +++- + src/test/test-specifier.c | 14 ++++++++++++++ + 2 files changed, 17 insertions(+), 1 deletion(-) + +diff --git a/src/shared/specifier.c b/src/shared/specifier.c +index f8ab98541f..c26628975c 100644 +--- a/src/shared/specifier.c ++++ b/src/shared/specifier.c +@@ -213,7 +213,9 @@ int specifier_architecture(char specifier, const void *data, const char *root, c + } + + /* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid +- * otherwise. We'll return an empty value or NULL in that case from the functions below. */ ++ * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the ++ * os-release file is missing, we'll return -ENOENT. This means that something is seriously wrong with the ++ * installation. */ + + int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + return parse_os_release(root, "ID", ret); +diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c +index dda993ce9d..790f0252d7 100644 +--- a/src/test/test-specifier.c ++++ b/src/test/test-specifier.c +@@ -96,4 +96,18 @@ TEST(specifiers) { + } + } + ++TEST(specifiers_missing_data_ok) { ++ _cleanup_free_ char *resolved = NULL; ++ ++ assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0); ++ assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) >= 0); ++ assert_se(streq(resolved, "-----")); ++ ++ assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0); ++ assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -ENOENT); ++ assert_se(streq(resolved, "-----")); ++ ++ assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); ++} ++ + DEFINE_TEST_MAIN(LOG_DEBUG); diff --git a/SOURCES/0170-shared-specifier-provide-proper-error-messages-when-.patch b/SOURCES/0170-shared-specifier-provide-proper-error-messages-when-.patch new file mode 100644 index 0000000..843675d --- /dev/null +++ b/SOURCES/0170-shared-specifier-provide-proper-error-messages-when-.patch @@ -0,0 +1,278 @@ +From b3b45ed9385341e72edfc1bae08819026d841d46 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 8 Mar 2022 12:08:00 +0100 +Subject: [PATCH] shared/specifier: provide proper error messages when + specifiers fail to read files + +ENOENT is easily confused with the file that we're working on not being +present, e.g. when the file contains %o or something else that requires +os-release to be present. Let's use -EUNATCH instead to reduce that chances of +confusion if the context of the error is lost. + +And once we have pinpointed the reason, let's provide a proper error message: + ++ build/systemctl --root=/tmp/systemctl-test.TO7Mcb enable some-some-link6@.socket +/tmp/systemctl-test.TO7Mcb/etc/systemd/system/some-some-link6@.socket: Failed to resolve alias "target@A:%A.socket": Protocol driver not attached +Failed to enable unit, cannot resolve specifiers in "target@A:%A.socket". + +(cherry picked from commit 6ec4c852c910b1aca649e87ba3143841334f01fa) + +Related: #2082131 +--- + src/shared/install.c | 31 +++++++++++++------- + src/shared/specifier.c | 27 ++++++++++++----- + src/test/test-specifier.c | 2 +- + test/test-systemctl-enable.sh | 55 ++++++++++++++++++++++++++--------- + 4 files changed, 82 insertions(+), 33 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index cbfe96b1e8..ea5bc36482 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -374,6 +374,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + verb, changes[i].path); + logged = true; + break; ++ + case -EADDRNOTAVAIL: + log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.", + verb, changes[i].path); +@@ -401,6 +402,12 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + logged = true; + break; + ++ case -EUNATCH: ++ log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".", ++ verb, changes[i].path); ++ logged = true; ++ break; ++ + default: + assert(changes[i].type_or_errno < 0); + log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m", +@@ -1154,7 +1161,8 @@ static int config_parse_also( + + r = install_name_printf(info, word, info->root, &printed); + if (r < 0) +- return r; ++ return log_syntax(unit, LOG_WARNING, filename, line, r, ++ "Failed to resolve unit name in Also=\"%s\": %m", word); + + r = install_info_add(c, printed, NULL, info->root, /* auxiliary= */ true, NULL); + if (r < 0) +@@ -1201,14 +1209,13 @@ static int config_parse_default_instance( + + r = install_name_printf(i, rvalue, i->root, &printed); + if (r < 0) +- return r; ++ return log_syntax(unit, LOG_WARNING, filename, line, r, ++ "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue); + +- if (isempty(printed)) { +- i->default_instance = mfree(i->default_instance); +- return 0; +- } ++ if (isempty(printed)) ++ printed = mfree(printed); + +- if (!unit_instance_is_valid(printed)) ++ if (printed && !unit_instance_is_valid(printed)) + return log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL), + "Invalid DefaultInstance= value \"%s\".", printed); + +@@ -1776,8 +1783,10 @@ static int install_info_symlink_alias( + _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL; + + q = install_name_printf(i, *s, i->root, &dst); +- if (q < 0) ++ if (q < 0) { ++ unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; ++ } + + q = unit_file_verify_alias(i, dst, &dst_updated); + if (q < 0) +@@ -1861,8 +1870,10 @@ static int install_info_symlink_wants( + _cleanup_free_ char *path = NULL, *dst = NULL; + + q = install_name_printf(i, *s, i->root, &dst); +- if (q < 0) ++ if (q < 0) { ++ unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; ++ } + + if (!unit_name_is_valid(dst, valid_dst_type)) { + /* Generate a proper error here: EUCLEAN if the name is generally bad, EIDRM if the +@@ -3332,7 +3343,7 @@ int unit_file_preset_all( + + r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes); + if (r < 0 && +- !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT)) ++ !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH)) + /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors. + * Coordinate with unit_file_dump_changes() above. */ + return r; +diff --git a/src/shared/specifier.c b/src/shared/specifier.c +index c26628975c..a917378427 100644 +--- a/src/shared/specifier.c ++++ b/src/shared/specifier.c +@@ -131,7 +131,8 @@ int specifier_machine_id(char specifier, const void *data, const char *root, con + + fd = chase_symlinks_and_open("/etc/machine-id", root, CHASE_PREFIX_ROOT, O_RDONLY|O_CLOEXEC|O_NOCTTY, NULL); + if (fd < 0) +- return fd; ++ /* Translate error for missing os-release file to EUNATCH. */ ++ return fd == -ENOENT ? -EUNATCH : fd; + + r = id128_read_fd(fd, ID128_PLAIN, &id); + } else +@@ -214,31 +215,41 @@ int specifier_architecture(char specifier, const void *data, const char *root, c + + /* Note: fields in /etc/os-release might quite possibly be missing, even if everything is entirely valid + * otherwise. We'll return an empty value or NULL in that case from the functions below. But if the +- * os-release file is missing, we'll return -ENOENT. This means that something is seriously wrong with the ++ * os-release file is missing, we'll return -EUNATCH. This means that something is seriously wrong with the + * installation. */ + ++static int parse_os_release_specifier(const char *root, const char *id, char **ret) { ++ int r; ++ ++ assert(ret); ++ ++ /* Translate error for missing os-release file to EUNATCH. */ ++ r = parse_os_release(root, id, ret); ++ return r == -ENOENT ? -EUNATCH : r; ++} ++ + int specifier_os_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return parse_os_release(root, "ID", ret); ++ return parse_os_release_specifier(root, "ID", ret); + } + + int specifier_os_version_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return parse_os_release(root, "VERSION_ID", ret); ++ return parse_os_release_specifier(root, "VERSION_ID", ret); + } + + int specifier_os_build_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return parse_os_release(root, "BUILD_ID", ret); ++ return parse_os_release_specifier(root, "BUILD_ID", ret); + } + + int specifier_os_variant_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return parse_os_release(root, "VARIANT_ID", ret); ++ return parse_os_release_specifier(root, "VARIANT_ID", ret); + } + + int specifier_os_image_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return parse_os_release(root, "IMAGE_ID", ret); ++ return parse_os_release_specifier(root, "IMAGE_ID", ret); + } + + int specifier_os_image_version(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- return parse_os_release(root, "IMAGE_VERSION", ret); ++ return parse_os_release_specifier(root, "IMAGE_VERSION", ret); + } + + int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c +index 790f0252d7..a45d1bd0b9 100644 +--- a/src/test/test-specifier.c ++++ b/src/test/test-specifier.c +@@ -104,7 +104,7 @@ TEST(specifiers_missing_data_ok) { + assert_se(streq(resolved, "-----")); + + assert_se(setenv("SYSTEMD_OS_RELEASE", "/nosuchfileordirectory", 1) == 0); +- assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -ENOENT); ++ assert_se(specifier_printf("%A-%B-%M-%o-%w-%W", SIZE_MAX, specifier_table, NULL, NULL, &resolved) == -EUNATCH); + assert_se(streq(resolved, "-----")); + + assert_se(unsetenv("SYSTEMD_OS_RELEASE") == 0); +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 769341129c..43a2c0a0fb 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -445,12 +445,45 @@ EOF + + check_alias a "$(uname -m | tr '_' '-')" + +-# FIXME: when os-release is not found, we fail we a cryptic error +-# Alias=target@%A.socket ++test ! -e "$root/etc/os-release" ++test ! -e "$root/usr/lib/os-release" ++ ++check_alias A '' && { echo "Expected failure" >&2; exit 1; } ++check_alias B '' && { echo "Expected failure" >&2; exit 1; } ++check_alias M '' && { echo "Expected failure" >&2; exit 1; } ++check_alias o '' && { echo "Expected failure" >&2; exit 1; } ++check_alias w '' && { echo "Expected failure" >&2; exit 1; } ++check_alias W '' && { echo "Expected failure" >&2; exit 1; } ++ ++cat >"$root/etc/os-release" <"$root/etc/os-release" <&2; exit 1; } + +-# FIXME: Failed to enable: No such file or directory. +-# Alias=target@%M.socket ++systemd-id128 new >"$root/etc/machine-id" ++check_alias m "$(cat "$root/etc/machine-id")" + + check_alias n 'some-some-link6@.socket' + check_alias N 'some-some-link6@' + +-# FIXME: Failed to enable: No such file or directory. +-# Alias=target@%o.socket +- + check_alias p 'some-some-link6' + + # FIXME: Failed to enable: Invalid slot. +@@ -509,9 +539,6 @@ check_alias v "$(uname -r)" + # FIXME: Failed to enable: Invalid slot. + # Alias=target@%V.socket + +-# Alias=target@%w.socket +-# Alias=target@%W.socket +- + check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; } + + check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; } diff --git a/SOURCES/0171-shared-install-provide-proper-error-messages-when-in.patch b/SOURCES/0171-shared-install-provide-proper-error-messages-when-in.patch new file mode 100644 index 0000000..7b886a8 --- /dev/null +++ b/SOURCES/0171-shared-install-provide-proper-error-messages-when-in.patch @@ -0,0 +1,142 @@ +From 256e0d19abd531ab34ed28181ffdae5d5c0dcfed Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 9 Mar 2022 16:06:24 +0100 +Subject: [PATCH] shared/install: provide proper error messages when invalid + specifiers are used + +$ build/systemctl --root=/tmp/systemctl-test.KXY8fu enable some-some-link6@.socket +Failed to enable unit, invalid specifier in "target@C:%C.socket". + +(cherry picked from commit 19b9d5d0d14f2c9b8be8d0a026b0445168808b94) + +Related: #2082131 +--- + src/shared/install.c | 11 +++++----- + test/test-systemctl-enable.sh | 40 ++++++++++++----------------------- + 2 files changed, 20 insertions(+), 31 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index ea5bc36482..fd57488024 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -374,12 +374,16 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + verb, changes[i].path); + logged = true; + break; +- + case -EADDRNOTAVAIL: + log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.", + verb, changes[i].path); + logged = true; + break; ++ case -EBADSLT: ++ log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid specifier in \"%s\".", ++ verb, changes[i].path); ++ logged = true; ++ break; + case -EIDRM: + log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.", + verb, changes[i].source, changes[i].path); +@@ -396,18 +400,15 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + verb, changes[i].path); + logged = true; + break; +- + case -ENOENT: + log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path); + logged = true; + break; +- + case -EUNATCH: + log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".", + verb, changes[i].path); + logged = true; + break; +- + default: + assert(changes[i].type_or_errno < 0); + log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m", +@@ -3343,7 +3344,7 @@ int unit_file_preset_all( + + r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes); + if (r < 0 && +- !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH)) ++ !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH)) + /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors. + * Coordinate with unit_file_dump_changes() above. */ + return r; +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 43a2c0a0fb..da1fffe944 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -485,33 +485,31 @@ check_alias W 'right' + + check_alias b "$(systemd-id128 boot-id)" + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%C.socket +-# Alias=target@%E.socket +-# Alias=target@%f.socket ++# Specifiers not available for [Install] ++check_alias C '' && { echo "Expected failure" >&2; exit 1; } ++check_alias E '' && { echo "Expected failure" >&2; exit 1; } ++check_alias f '' && { echo "Expected failure" >&2; exit 1; } ++check_alias h '' && { echo "Expected failure" >&2; exit 1; } ++check_alias I '' && { echo "Expected failure" >&2; exit 1; } ++check_alias J '' && { echo "Expected failure" >&2; exit 1; } ++check_alias L '' && { echo "Expected failure" >&2; exit 1; } ++check_alias P '' && { echo "Expected failure" >&2; exit 1; } ++check_alias s '' && { echo "Expected failure" >&2; exit 1; } ++check_alias S '' && { echo "Expected failure" >&2; exit 1; } ++check_alias t '' && { echo "Expected failure" >&2; exit 1; } ++check_alias T '' && { echo "Expected failure" >&2; exit 1; } ++check_alias V '' && { echo "Expected failure" >&2; exit 1; } + + # FIXME: we use the calling user instead of root :( + check_alias g root || : + check_alias G 0 || : + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%h.socket +- + check_alias i "" + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%I.socket +- + check_alias j 'link6' + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%J.socket +- + check_alias l "$(uname -n | sed 's/\..*//')" + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%L.socket +- + test ! -e "$root/etc/machine-id" + check_alias m '' && { echo "Expected failure" >&2; exit 1; } + +@@ -523,22 +521,12 @@ check_alias N 'some-some-link6@' + + check_alias p 'some-some-link6' + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%P.socket +-# Alias=target@%s.socket +-# Alias=target@%S.socket +-# Alias=target@%t.socket +-# Alias=target@%T.socket +- + # FIXME: we use the calling user instead of root :( + check_alias u root || : + check_alias U 0 || : + + check_alias v "$(uname -r)" + +-# FIXME: Failed to enable: Invalid slot. +-# Alias=target@%V.socket +- + check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; } + + check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; } diff --git a/SOURCES/0172-shared-install-move-scope-into-InstallContext.patch b/SOURCES/0172-shared-install-move-scope-into-InstallContext.patch new file mode 100644 index 0000000..ed0c624 --- /dev/null +++ b/SOURCES/0172-shared-install-move-scope-into-InstallContext.patch @@ -0,0 +1,1239 @@ +From b6088ce6c68e3f6e50f75ca3d1d60d2dae16dbb9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 9 Mar 2022 17:51:36 +0100 +Subject: [PATCH] shared/install: move scope into InstallContext +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This makes it easier to pass it around in preparation for future changes. + +While at it, let's rename InstallContext c → ctx, and InstallInfo i → info. +'c' and 'i' are bad names for variables that are passed through multiple layers +of functions calls. It's easier to follow what is happening with a meaningful +variable names. + +(cherry picked from commit 4a84db4c0c2eef6f40da35347c95dfa6b6e3d139) + +Related: #2082131 +--- + src/shared/install.c | 386 +++++++++++++++++++++---------------------- + 1 file changed, 191 insertions(+), 195 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index fd57488024..bfdeee48bf 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -47,6 +47,7 @@ typedef enum SearchFlags { + } SearchFlags; + + typedef struct { ++ UnitFileScope scope; + OrderedHashmap *will_process; + OrderedHashmap *have_processed; + } InstallContext; +@@ -727,7 +728,7 @@ static int find_symlinks_in_directory( + DIR *dir, + const char *dir_path, + const char *root_dir, +- const UnitFileInstallInfo *i, ++ const UnitFileInstallInfo *info, + bool match_aliases, + bool ignore_same_name, + const char *config_path, +@@ -764,17 +765,17 @@ static int find_symlinks_in_directory( + free_and_replace(dest, x); + } + +- assert(unit_name_is_valid(i->name, UNIT_NAME_ANY)); ++ assert(unit_name_is_valid(info->name, UNIT_NAME_ANY)); + if (!ignore_same_name) + /* Check if the symlink itself matches what we are looking for. + * + * If ignore_same_name is specified, we are in one of the directories which + * have lower priority than the unit file, and even if a file or symlink with + * this name was found, we should ignore it. */ +- found_path = streq(de->d_name, i->name); ++ found_path = streq(de->d_name, info->name); + + /* Check if what the symlink points to matches what we are looking for */ +- found_dest = streq(basename(dest), i->name); ++ found_dest = streq(basename(dest), info->name); + + if (found_path && found_dest) { + _cleanup_free_ char *p = NULL, *t = NULL; +@@ -782,7 +783,7 @@ static int find_symlinks_in_directory( + /* Filter out same name links in the main + * config path */ + p = path_make_absolute(de->d_name, dir_path); +- t = path_make_absolute(i->name, config_path); ++ t = path_make_absolute(info->name, config_path); + + if (!p || !t) + return -ENOMEM; +@@ -797,7 +798,7 @@ static int find_symlinks_in_directory( + return 1; + + /* Check if symlink name is in the set of names used by [Install] */ +- q = is_symlink_with_known_name(i, de->d_name); ++ q = is_symlink_with_known_name(info, de->d_name); + if (q < 0) + return q; + if (q > 0) +@@ -867,7 +868,7 @@ static int find_symlinks( + static int find_symlinks_in_scope( + UnitFileScope scope, + const LookupPaths *lp, +- const UnitFileInstallInfo *i, ++ const UnitFileInstallInfo *info, + bool match_name, + UnitFileState *state) { + +@@ -878,7 +879,7 @@ static int find_symlinks_in_scope( + int r; + + assert(lp); +- assert(i); ++ assert(info); + + /* As we iterate over the list of search paths in lp->search_path, we may encounter "same name" + * symlinks. The ones which are "below" (i.e. have lower priority) than the unit file itself are +@@ -887,7 +888,7 @@ static int find_symlinks_in_scope( + STRV_FOREACH(p, lp->search_path) { + bool same_name_link = false; + +- r = find_symlinks(lp->root_dir, i, match_name, ignore_same_name, *p, &same_name_link); ++ r = find_symlinks(lp->root_dir, info, match_name, ignore_same_name, *p, &same_name_link); + if (r < 0) + return r; + if (r > 0) { +@@ -927,7 +928,7 @@ static int find_symlinks_in_scope( + + /* Check if next iteration will be "below" the unit file (either a regular file + * or a symlink), and hence should be ignored */ +- if (!ignore_same_name && path_startswith(i->path, *p)) ++ if (!ignore_same_name && path_startswith(info->path, *p)) + ignore_same_name = true; + } + +@@ -940,7 +941,7 @@ static int find_symlinks_in_scope( + * outside of runtime and configuration directory, then we consider it statically enabled. Note we do that only + * for instance, not for regular names, as those are merely aliases, while instances explicitly instantiate + * something, and hence are a much stronger concept. */ +- if (enabled_at_all && unit_name_is_valid(i->name, UNIT_NAME_INSTANCE)) { ++ if (enabled_at_all && unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) { + *state = UNIT_FILE_STATIC; + return 1; + } +@@ -960,7 +961,6 @@ static int find_symlinks_in_scope( + } + + static void install_info_free(UnitFileInstallInfo *i) { +- + if (!i) + return; + +@@ -976,21 +976,21 @@ static void install_info_free(UnitFileInstallInfo *i) { + free(i); + } + +-static void install_context_done(InstallContext *c) { +- assert(c); ++static void install_context_done(InstallContext *ctx) { ++ assert(ctx); + +- c->will_process = ordered_hashmap_free_with_destructor(c->will_process, install_info_free); +- c->have_processed = ordered_hashmap_free_with_destructor(c->have_processed, install_info_free); ++ ctx->will_process = ordered_hashmap_free_with_destructor(ctx->will_process, install_info_free); ++ ctx->have_processed = ordered_hashmap_free_with_destructor(ctx->have_processed, install_info_free); + } + +-static UnitFileInstallInfo *install_info_find(InstallContext *c, const char *name) { ++static UnitFileInstallInfo *install_info_find(InstallContext *ctx, const char *name) { + UnitFileInstallInfo *i; + +- i = ordered_hashmap_get(c->have_processed, name); ++ i = ordered_hashmap_get(ctx->have_processed, name); + if (i) + return i; + +- return ordered_hashmap_get(c->will_process, name); ++ return ordered_hashmap_get(ctx->will_process, name); + } + + static int install_info_may_process( +@@ -1024,7 +1024,7 @@ static int install_info_may_process( + * Returns negative on error, 0 if the unit was already known, 1 otherwise. + */ + static int install_info_add( +- InstallContext *c, ++ InstallContext *ctx, + const char *name, + const char *path, + const char *root, +@@ -1034,7 +1034,7 @@ static int install_info_add( + UnitFileInstallInfo *i = NULL; + int r; + +- assert(c); ++ assert(ctx); + + if (!name) { + /* 'name' and 'path' must not both be null. Check here 'path' using assert_se() to +@@ -1047,7 +1047,7 @@ static int install_info_add( + if (!unit_name_is_valid(name, UNIT_NAME_ANY)) + return -EINVAL; + +- i = install_info_find(c, name); ++ i = install_info_find(ctx, name); + if (i) { + i->auxiliary = i->auxiliary && auxiliary; + +@@ -1087,7 +1087,7 @@ static int install_info_add( + } + } + +- r = ordered_hashmap_ensure_put(&c->will_process, &string_hash_ops, i->name, i); ++ r = ordered_hashmap_ensure_put(&ctx->will_process, &string_hash_ops, i->name, i); + if (r < 0) + goto fail; + +@@ -1142,8 +1142,8 @@ static int config_parse_also( + void *data, + void *userdata) { + +- UnitFileInstallInfo *info = userdata; +- InstallContext *c = data; ++ UnitFileInstallInfo *info = ASSERT_PTR(userdata); ++ InstallContext *ctx = ASSERT_PTR(data); + int r; + + assert(unit); +@@ -1165,7 +1165,7 @@ static int config_parse_also( + return log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to resolve unit name in Also=\"%s\": %m", word); + +- r = install_info_add(c, printed, NULL, info->root, /* auxiliary= */ true, NULL); ++ r = install_info_add(ctx, printed, NULL, info->root, /* auxiliary= */ true, NULL); + if (r < 0) + return r; + +@@ -1191,7 +1191,7 @@ static int config_parse_default_instance( + void *data, + void *userdata) { + +- UnitFileInstallInfo *i = data; ++ UnitFileInstallInfo *info = ASSERT_PTR(userdata); + _cleanup_free_ char *printed = NULL; + int r; + +@@ -1208,7 +1208,7 @@ static int config_parse_default_instance( + return log_syntax(unit, LOG_WARNING, filename, line, 0, + "DefaultInstance= only makes sense for template units, ignoring."); + +- r = install_name_printf(i, rvalue, i->root, &printed); ++ r = install_name_printf(info, rvalue, info->root, &printed); + if (r < 0) + return log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue); +@@ -1220,11 +1220,11 @@ static int config_parse_default_instance( + return log_syntax(unit, LOG_WARNING, filename, line, SYNTHETIC_ERRNO(EINVAL), + "Invalid DefaultInstance= value \"%s\".", printed); + +- return free_and_replace(i->default_instance, printed); ++ return free_and_replace(info->default_instance, printed); + } + + static int unit_file_load( +- InstallContext *c, ++ InstallContext *ctx, + UnitFileInstallInfo *info, + const char *path, + const char *root_dir, +@@ -1235,7 +1235,7 @@ static int unit_file_load( + { "Install", "WantedBy", config_parse_strv, 0, &info->wanted_by }, + { "Install", "RequiredBy", config_parse_strv, 0, &info->required_by }, + { "Install", "DefaultInstance", config_parse_default_instance, 0, info }, +- { "Install", "Also", config_parse_also, 0, c }, ++ { "Install", "Also", config_parse_also, 0, ctx }, + {} + }; + +@@ -1308,8 +1308,8 @@ static int unit_file_load( + if (!f) + return -errno; + +- /* c is only needed if we actually load the file (it's referenced from items[] btw, in case you wonder.) */ +- assert(c); ++ /* ctx is only needed if we actually load the file (it's referenced from items[] btw, in case you wonder.) */ ++ assert(ctx); + + r = config_parse(info->name, path, f, + "Install\0" +@@ -1341,14 +1341,14 @@ static int unit_file_load( + } + + static int unit_file_load_or_readlink( +- InstallContext *c, ++ InstallContext *ctx, + UnitFileInstallInfo *info, + const char *path, + const LookupPaths *lp, + SearchFlags flags) { + int r; + +- r = unit_file_load(c, info, path, lp->root_dir, flags); ++ r = unit_file_load(ctx, info, path, lp->root_dir, flags); + if (r != -ELOOP || (flags & SEARCH_DROPIN)) + return r; + +@@ -1371,7 +1371,7 @@ static int unit_file_load_or_readlink( + } + + static int unit_file_search( +- InstallContext *c, ++ InstallContext *ctx, + UnitFileInstallInfo *info, + const LookupPaths *lp, + SearchFlags flags) { +@@ -1391,7 +1391,7 @@ static int unit_file_search( + return 0; + + if (info->path) +- return unit_file_load_or_readlink(c, info, info->path, lp, flags); ++ return unit_file_load_or_readlink(ctx, info, info->path, lp, flags); + + assert(info->name); + +@@ -1408,7 +1408,7 @@ static int unit_file_search( + if (!path) + return -ENOMEM; + +- r = unit_file_load_or_readlink(c, info, path, lp, flags); ++ r = unit_file_load_or_readlink(ctx, info, path, lp, flags); + if (r >= 0) { + info->path = TAKE_PTR(path); + result = r; +@@ -1431,7 +1431,7 @@ static int unit_file_search( + if (!path) + return -ENOMEM; + +- r = unit_file_load_or_readlink(c, info, path, lp, flags); ++ r = unit_file_load_or_readlink(ctx, info, path, lp, flags); + if (r >= 0) { + info->path = TAKE_PTR(path); + result = r; +@@ -1487,7 +1487,7 @@ static int unit_file_search( + return log_debug_errno(r, "Failed to get list of conf files: %m"); + + STRV_FOREACH(p, files) { +- r = unit_file_load_or_readlink(c, info, *p, lp, flags | SEARCH_DROPIN); ++ r = unit_file_load_or_readlink(ctx, info, *p, lp, flags | SEARCH_DROPIN); + if (r < 0) + return log_debug_errno(r, "Failed to load conf file \"%s\": %m", *p); + } +@@ -1496,30 +1496,30 @@ static int unit_file_search( + } + + static int install_info_follow( +- InstallContext *c, +- UnitFileInstallInfo *i, ++ InstallContext *ctx, ++ UnitFileInstallInfo *info, + const LookupPaths *lp, + SearchFlags flags, + bool ignore_different_name) { + +- assert(c); +- assert(i); ++ assert(ctx); ++ assert(info); + +- if (i->type != UNIT_FILE_TYPE_SYMLINK) ++ if (info->type != UNIT_FILE_TYPE_SYMLINK) + return -EINVAL; +- if (!i->symlink_target) ++ if (!info->symlink_target) + return -EINVAL; + + /* If the basename doesn't match, the caller should add a + * complete new entry for this. */ + +- if (!ignore_different_name && !streq(basename(i->symlink_target), i->name)) ++ if (!ignore_different_name && !streq(basename(info->symlink_target), info->name)) + return -EXDEV; + +- free_and_replace(i->path, i->symlink_target); +- i->type = _UNIT_FILE_TYPE_INVALID; ++ free_and_replace(info->path, info->symlink_target); ++ info->type = _UNIT_FILE_TYPE_INVALID; + +- return unit_file_load_or_readlink(c, i, i->path, lp, flags); ++ return unit_file_load_or_readlink(ctx, info, info->path, lp, flags); + } + + /** +@@ -1527,8 +1527,7 @@ static int install_info_follow( + * target, maybe more than once. Propagate the instance name if present. + */ + static int install_info_traverse( +- UnitFileScope scope, +- InstallContext *c, ++ InstallContext *ctx, + const LookupPaths *lp, + UnitFileInstallInfo *start, + SearchFlags flags, +@@ -1540,9 +1539,9 @@ static int install_info_traverse( + + assert(lp); + assert(start); +- assert(c); ++ assert(ctx); + +- r = unit_file_search(c, start, lp, flags); ++ r = unit_file_search(ctx, start, lp, flags); + if (r < 0) + return r; + +@@ -1561,7 +1560,7 @@ static int install_info_traverse( + return -ELOOP; + } + +- r = install_info_follow(c, i, lp, flags, false); ++ r = install_info_follow(ctx, i, lp, flags, false); + if (r == -EXDEV) { + _cleanup_free_ char *buffer = NULL; + const char *bn; +@@ -1590,7 +1589,7 @@ static int install_info_traverse( + /* We filled in the instance, and the target stayed the same? If so, then let's + * honour the link as it is. */ + +- r = install_info_follow(c, i, lp, flags, true); ++ r = install_info_follow(ctx, i, lp, flags, true); + if (r < 0) + return r; + +@@ -1600,12 +1599,12 @@ static int install_info_traverse( + bn = buffer; + } + +- r = install_info_add(c, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i); ++ r = install_info_add(ctx, bn, NULL, lp->root_dir, /* auxiliary= */ false, &i); + if (r < 0) + return r; + + /* Try again, with the new target we found. */ +- r = unit_file_search(c, i, lp, flags); ++ r = unit_file_search(ctx, i, lp, flags); + if (r == -ENOENT) + /* Translate error code to highlight this specific case */ + return -ENOLINK; +@@ -1626,12 +1625,12 @@ static int install_info_traverse( + * or the name (otherwise). root_dir is prepended to the path. + */ + static int install_info_add_auto( +- InstallContext *c, ++ InstallContext *ctx, + const LookupPaths *lp, + const char *name_or_path, + UnitFileInstallInfo **ret) { + +- assert(c); ++ assert(ctx); + assert(name_or_path); + + if (path_is_absolute(name_or_path)) { +@@ -1639,14 +1638,13 @@ static int install_info_add_auto( + + pp = prefix_roota(lp->root_dir, name_or_path); + +- return install_info_add(c, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret); ++ return install_info_add(ctx, NULL, pp, lp->root_dir, /* auxiliary= */ false, ret); + } else +- return install_info_add(c, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret); ++ return install_info_add(ctx, name_or_path, NULL, lp->root_dir, /* auxiliary= */ false, ret); + } + + static int install_info_discover( +- UnitFileScope scope, +- InstallContext *c, ++ InstallContext *ctx, + const LookupPaths *lp, + const char *name, + SearchFlags flags, +@@ -1654,16 +1652,16 @@ static int install_info_discover( + UnitFileChange **changes, + size_t *n_changes) { + +- UnitFileInstallInfo *i; ++ UnitFileInstallInfo *info; + int r; + +- assert(c); ++ assert(ctx); + assert(lp); + assert(name); + +- r = install_info_add_auto(c, lp, name, &i); ++ r = install_info_add_auto(ctx, lp, name, &info); + if (r >= 0) +- r = install_info_traverse(scope, c, lp, i, flags, ret); ++ r = install_info_traverse(ctx, lp, info, flags, ret); + + if (r < 0) + unit_file_changes_add(changes, n_changes, r, name, NULL); +@@ -1671,25 +1669,24 @@ static int install_info_discover( + } + + static int install_info_discover_and_check( +- UnitFileScope scope, +- InstallContext *c, +- const LookupPaths *lp, +- const char *name, +- SearchFlags flags, +- UnitFileInstallInfo **ret, +- UnitFileChange **changes, +- size_t *n_changes) { ++ InstallContext *ctx, ++ const LookupPaths *lp, ++ const char *name, ++ SearchFlags flags, ++ UnitFileInstallInfo **ret, ++ UnitFileChange **changes, ++ size_t *n_changes) { + + int r; + +- r = install_info_discover(scope, c, lp, name, flags, ret, changes, n_changes); ++ r = install_info_discover(ctx, lp, name, flags, ret, changes, n_changes); + if (r < 0) + return r; + + return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes); + } + +-int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst) { ++int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, char **ret_dst) { + _cleanup_free_ char *dst_updated = NULL; + int r; + +@@ -1729,13 +1726,13 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + const bool instance_propagation = type == UNIT_NAME_TEMPLATE; + + /* That's the name we want to use for verification. */ +- r = unit_symlink_name_compatible(path_alias, i->name, instance_propagation); ++ r = unit_symlink_name_compatible(path_alias, info->name, instance_propagation); + if (r < 0) + return log_error_errno(r, "Failed to verify alias validity: %m"); + if (r == 0) + return log_warning_errno(SYNTHETIC_ERRNO(EXDEV), + "Invalid unit \"%s\" symlink \"%s\".", +- i->name, dst); ++ info->name, dst); + + } else { + /* If the symlink target has an instance set and the symlink source doesn't, we "propagate +@@ -1743,9 +1740,9 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + if (unit_name_is_valid(dst, UNIT_NAME_TEMPLATE)) { + _cleanup_free_ char *inst = NULL; + +- UnitNameFlags type = unit_name_to_instance(i->name, &inst); ++ UnitNameFlags type = unit_name_to_instance(info->name, &inst); + if (type < 0) +- return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", i->name); ++ return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", info->name); + + if (type == UNIT_NAME_INSTANCE) { + r = unit_name_replace_instance(dst, inst, &dst_updated); +@@ -1755,10 +1752,9 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + } + } + +- r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, i->name); ++ r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, info->name); + if (r < 0) + return r; +- + } + + *ret_dst = TAKE_PTR(dst_updated); +@@ -1766,7 +1762,8 @@ int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char * + } + + static int install_info_symlink_alias( +- UnitFileInstallInfo *i, ++ UnitFileScope scope, ++ UnitFileInstallInfo *info, + const LookupPaths *lp, + const char *config_path, + bool force, +@@ -1776,20 +1773,20 @@ static int install_info_symlink_alias( + char **s; + int r = 0, q; + +- assert(i); ++ assert(info); + assert(lp); + assert(config_path); + +- STRV_FOREACH(s, i->aliases) { ++ STRV_FOREACH(s, info->aliases) { + _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL; + +- q = install_name_printf(i, *s, i->root, &dst); ++ q = install_name_printf(info, *s, info->root, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; + } + +- q = unit_file_verify_alias(i, dst, &dst_updated); ++ q = unit_file_verify_alias(info, dst, &dst_updated); + if (q < 0) + continue; + +@@ -1797,7 +1794,7 @@ static int install_info_symlink_alias( + if (!alias_path) + return -ENOMEM; + +- q = create_symlink(lp, i->path, alias_path, force, changes, n_changes); ++ q = create_symlink(lp, info->path, alias_path, force, changes, n_changes); + if (r == 0) + r = q; + } +@@ -1808,7 +1805,7 @@ static int install_info_symlink_alias( + static int install_info_symlink_wants( + UnitFileScope scope, + UnitFileFlags file_flags, +- UnitFileInstallInfo *i, ++ UnitFileInstallInfo *info, + const LookupPaths *lp, + const char *config_path, + char **list, +@@ -1822,18 +1819,18 @@ static int install_info_symlink_wants( + char **s; + int r = 0, q; + +- assert(i); ++ assert(info); + assert(lp); + assert(config_path); + + if (strv_isempty(list)) + return 0; + +- if (unit_name_is_valid(i->name, UNIT_NAME_PLAIN | UNIT_NAME_INSTANCE)) ++ if (unit_name_is_valid(info->name, UNIT_NAME_PLAIN | UNIT_NAME_INSTANCE)) + /* Not a template unit. Use the name directly. */ +- n = i->name; ++ n = info->name; + +- else if (i->default_instance) { ++ else if (info->default_instance) { + UnitFileInstallInfo instance = { + .type = _UNIT_FILE_TYPE_INVALID, + }; +@@ -1841,7 +1838,7 @@ static int install_info_symlink_wants( + + /* If this is a template, and we have a default instance, use it. */ + +- r = unit_name_replace_instance(i->name, i->default_instance, &buf); ++ r = unit_name_replace_instance(info->name, info->default_instance, &buf); + if (r < 0) + return r; + +@@ -1864,13 +1861,13 @@ static int install_info_symlink_wants( + * the instance from that unit. Cannot be used with non-instance units. */ + + valid_dst_type = UNIT_NAME_INSTANCE | UNIT_NAME_TEMPLATE; +- n = i->name; ++ n = info->name; + } + + STRV_FOREACH(s, list) { + _cleanup_free_ char *path = NULL, *dst = NULL; + +- q = install_name_printf(i, *s, i->root, &dst); ++ q = install_name_printf(info, *s, info->root, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; +@@ -1902,19 +1899,19 @@ static int install_info_symlink_wants( + if (!path) + return -ENOMEM; + +- q = create_symlink(lp, i->path, path, true, changes, n_changes); ++ q = create_symlink(lp, info->path, path, true, changes, n_changes); + if (r == 0) + r = q; + + if (unit_file_exists(scope, lp, dst) == 0) +- unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, i->path); ++ unit_file_changes_add(changes, n_changes, UNIT_FILE_DESTINATION_NOT_PRESENT, dst, info->path); + } + + return r; + } + + static int install_info_symlink_link( +- UnitFileInstallInfo *i, ++ UnitFileInstallInfo *info, + const LookupPaths *lp, + const char *config_path, + bool force, +@@ -1924,28 +1921,28 @@ static int install_info_symlink_link( + _cleanup_free_ char *path = NULL; + int r; + +- assert(i); ++ assert(info); + assert(lp); + assert(config_path); +- assert(i->path); ++ assert(info->path); + +- r = in_search_path(lp, i->path); ++ r = in_search_path(lp, info->path); + if (r < 0) + return r; + if (r > 0) + return 0; + +- path = path_join(config_path, i->name); ++ path = path_join(config_path, info->name); + if (!path) + return -ENOMEM; + +- return create_symlink(lp, i->path, path, force, changes, n_changes); ++ return create_symlink(lp, info->path, path, force, changes, n_changes); + } + + static int install_info_apply( + UnitFileScope scope, + UnitFileFlags file_flags, +- UnitFileInstallInfo *i, ++ UnitFileInstallInfo *info, + const LookupPaths *lp, + const char *config_path, + UnitFileChange **changes, +@@ -1953,26 +1950,26 @@ static int install_info_apply( + + int r, q; + +- assert(i); ++ assert(info); + assert(lp); + assert(config_path); + +- if (i->type != UNIT_FILE_TYPE_REGULAR) ++ if (info->type != UNIT_FILE_TYPE_REGULAR) + return 0; + + bool force = file_flags & UNIT_FILE_FORCE; + +- r = install_info_symlink_alias(i, lp, config_path, force, changes, n_changes); ++ r = install_info_symlink_alias(scope, info, lp, config_path, force, changes, n_changes); + +- q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->wanted_by, ".wants/", changes, n_changes); ++ q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->wanted_by, ".wants/", changes, n_changes); + if (r == 0) + r = q; + +- q = install_info_symlink_wants(scope, file_flags, i, lp, config_path, i->required_by, ".requires/", changes, n_changes); ++ q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->required_by, ".requires/", changes, n_changes); + if (r == 0) + r = q; + +- q = install_info_symlink_link(i, lp, config_path, force, changes, n_changes); ++ q = install_info_symlink_link(info, lp, config_path, force, changes, n_changes); + /* Do not count links to the unit file towards the "carries_install_info" count */ + if (r == 0 && q < 0) + r = q; +@@ -1981,10 +1978,9 @@ static int install_info_apply( + } + + static int install_context_apply( +- UnitFileScope scope, +- UnitFileFlags file_flags, +- InstallContext *c, ++ InstallContext *ctx, + const LookupPaths *lp, ++ UnitFileFlags file_flags, + const char *config_path, + SearchFlags flags, + UnitFileChange **changes, +@@ -1993,26 +1989,26 @@ static int install_context_apply( + UnitFileInstallInfo *i; + int r; + +- assert(c); ++ assert(ctx); + assert(lp); + assert(config_path); + +- if (ordered_hashmap_isempty(c->will_process)) ++ if (ordered_hashmap_isempty(ctx->will_process)) + return 0; + +- r = ordered_hashmap_ensure_allocated(&c->have_processed, &string_hash_ops); ++ r = ordered_hashmap_ensure_allocated(&ctx->have_processed, &string_hash_ops); + if (r < 0) + return r; + + r = 0; +- while ((i = ordered_hashmap_first(c->will_process))) { ++ while ((i = ordered_hashmap_first(ctx->will_process))) { + int q; + +- q = ordered_hashmap_move_one(c->have_processed, c->will_process, i->name); ++ q = ordered_hashmap_move_one(ctx->have_processed, ctx->will_process, i->name); + if (q < 0) + return q; + +- q = install_info_traverse(scope, c, lp, i, flags, NULL); ++ q = install_info_traverse(ctx, lp, i, flags, NULL); + if (q < 0) { + if (i->auxiliary) { + q = unit_file_changes_add(changes, n_changes, UNIT_FILE_AUXILIARY_FAILED, NULL, i->name); +@@ -2039,7 +2035,7 @@ static int install_context_apply( + if (i->type != UNIT_FILE_TYPE_REGULAR) + continue; + +- q = install_info_apply(scope, file_flags, i, lp, config_path, changes, n_changes); ++ q = install_info_apply(ctx->scope, file_flags, i, lp, config_path, changes, n_changes); + if (r >= 0) { + if (q < 0) + r = q; +@@ -2052,8 +2048,7 @@ static int install_context_apply( + } + + static int install_context_mark_for_removal( +- UnitFileScope scope, +- InstallContext *c, ++ InstallContext *ctx, + const LookupPaths *lp, + Set **remove_symlinks_to, + const char *config_path, +@@ -2063,26 +2058,26 @@ static int install_context_mark_for_removal( + UnitFileInstallInfo *i; + int r; + +- assert(c); ++ assert(ctx); + assert(lp); + assert(config_path); + + /* Marks all items for removal */ + +- if (ordered_hashmap_isempty(c->will_process)) ++ if (ordered_hashmap_isempty(ctx->will_process)) + return 0; + +- r = ordered_hashmap_ensure_allocated(&c->have_processed, &string_hash_ops); ++ r = ordered_hashmap_ensure_allocated(&ctx->have_processed, &string_hash_ops); + if (r < 0) + return r; + +- while ((i = ordered_hashmap_first(c->will_process))) { ++ while ((i = ordered_hashmap_first(ctx->will_process))) { + +- r = ordered_hashmap_move_one(c->have_processed, c->will_process, i->name); ++ r = ordered_hashmap_move_one(ctx->have_processed, ctx->will_process, i->name); + if (r < 0) + return r; + +- r = install_info_traverse(scope, c, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL); ++ r = install_info_traverse(ctx, lp, i, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, NULL); + if (r == -ENOLINK) { + log_debug_errno(r, "Name %s leads to a dangling symlink, removing name.", i->name); + unit_file_changes_add(changes, n_changes, UNIT_FILE_IS_DANGLING, i->path ?: i->name, NULL); +@@ -2521,8 +2516,8 @@ int unit_file_add_dependency( + size_t *n_changes) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- _cleanup_(install_context_done) InstallContext c = {}; +- UnitFileInstallInfo *i, *target_info; ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; ++ UnitFileInstallInfo *info, *target_info; + const char *config_path; + char **f; + int r; +@@ -2545,7 +2540,7 @@ int unit_file_add_dependency( + if (!config_path) + return -ENXIO; + +- r = install_info_discover_and_check(scope, &c, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(&ctx, &lp, target, SEARCH_FOLLOW_CONFIG_SYMLINKS, + &target_info, changes, n_changes); + if (r < 0) + return r; +@@ -2555,21 +2550,21 @@ int unit_file_add_dependency( + STRV_FOREACH(f, files) { + char ***l; + +- r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, changes, n_changes); ++ r = install_info_discover_and_check(&ctx, &lp, *f, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, changes, n_changes); + if (r < 0) + return r; + +- assert(i->type == UNIT_FILE_TYPE_REGULAR); ++ assert(info->type == UNIT_FILE_TYPE_REGULAR); + + /* We didn't actually load anything from the unit + * file, but instead just add in our new symlink to + * create. */ + + if (dep == UNIT_WANTS) +- l = &i->wanted_by; ++ l = &info->wanted_by; + else +- l = &i->required_by; ++ l = &info->required_by; + + strv_free(*l); + *l = strv_new(target_info->name); +@@ -2577,7 +2572,7 @@ int unit_file_add_dependency( + return -ENOMEM; + } + +- return install_context_apply(scope, file_flags, &c, &lp, config_path, ++ return install_context_apply(&ctx, &lp, file_flags, config_path, + SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes); + } + +@@ -2590,9 +2585,9 @@ int unit_file_enable( + size_t *n_changes) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- _cleanup_(install_context_done) InstallContext c = {}; ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; + const char *config_path; +- UnitFileInstallInfo *i; ++ UnitFileInstallInfo *info; + char **f; + int r; + +@@ -2608,12 +2603,12 @@ int unit_file_enable( + return -ENXIO; + + STRV_FOREACH(f, files) { +- r = install_info_discover_and_check(scope, &c, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, changes, n_changes); ++ r = install_info_discover_and_check(&ctx, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, changes, n_changes); + if (r < 0) + return r; + +- assert(i->type == UNIT_FILE_TYPE_REGULAR); ++ assert(info->type == UNIT_FILE_TYPE_REGULAR); + } + + /* This will return the number of symlink rules that were +@@ -2621,7 +2616,8 @@ int unit_file_enable( + is useful to determine whether the passed files had any + installation data at all. */ + +- return install_context_apply(scope, file_flags, &c, &lp, config_path, SEARCH_LOAD, changes, n_changes); ++ return install_context_apply(&ctx, &lp, file_flags, config_path, ++ SEARCH_LOAD, changes, n_changes); + } + + int unit_file_disable( +@@ -2633,7 +2629,7 @@ int unit_file_disable( + size_t *n_changes) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- _cleanup_(install_context_done) InstallContext c = {}; ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; + const char *config_path; + char **i; +@@ -2654,12 +2650,12 @@ int unit_file_disable( + if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_add(&c, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL); ++ r = install_info_add(&ctx, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL); + if (r < 0) + return r; + } + +- r = install_context_mark_for_removal(scope, &c, &lp, &remove_symlinks_to, config_path, changes, n_changes); ++ r = install_context_mark_for_removal(&ctx, &lp, &remove_symlinks_to, config_path, changes, n_changes); + if (r < 0) + return r; + +@@ -2702,8 +2698,8 @@ int unit_file_set_default( + size_t *n_changes) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- _cleanup_(install_context_done) InstallContext c = {}; +- UnitFileInstallInfo *i; ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; ++ UnitFileInstallInfo *info; + const char *new_path; + int r; + +@@ -2720,12 +2716,12 @@ int unit_file_set_default( + if (r < 0) + return r; + +- r = install_info_discover_and_check(scope, &c, &lp, name, 0, &i, changes, n_changes); ++ r = install_info_discover_and_check(&ctx, &lp, name, 0, &info, changes, n_changes); + if (r < 0) + return r; + + new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET); +- return create_symlink(&lp, i->path, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); ++ return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes); + } + + int unit_file_get_default( +@@ -2734,8 +2730,8 @@ int unit_file_get_default( + char **name) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- _cleanup_(install_context_done) InstallContext c = {}; +- UnitFileInstallInfo *i; ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; ++ UnitFileInstallInfo *info; + char *n; + int r; + +@@ -2747,15 +2743,15 @@ int unit_file_get_default( + if (r < 0) + return r; + +- r = install_info_discover(scope, &c, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, NULL, NULL); ++ r = install_info_discover(&ctx, &lp, SPECIAL_DEFAULT_TARGET, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, NULL, NULL); + if (r < 0) + return r; +- r = install_info_may_process(i, &lp, NULL, 0); ++ r = install_info_may_process(info, &lp, NULL, 0); + if (r < 0) + return r; + +- n = strdup(i->name); ++ n = strdup(info->name); + if (!n) + return -ENOMEM; + +@@ -2769,8 +2765,8 @@ int unit_file_lookup_state( + const char *name, + UnitFileState *ret) { + +- _cleanup_(install_context_done) InstallContext c = {}; +- UnitFileInstallInfo *i; ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; ++ UnitFileInstallInfo *info; + UnitFileState state; + int r; + +@@ -2780,23 +2776,23 @@ int unit_file_lookup_state( + if (!unit_name_is_valid(name, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_discover(scope, &c, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, NULL, NULL); ++ r = install_info_discover(&ctx, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, NULL, NULL); + if (r < 0) + return log_debug_errno(r, "Failed to discover unit %s: %m", name); + +- assert(IN_SET(i->type, UNIT_FILE_TYPE_REGULAR, UNIT_FILE_TYPE_MASKED)); +- log_debug("Found unit %s at %s (%s)", name, strna(i->path), +- i->type == UNIT_FILE_TYPE_REGULAR ? "regular file" : "mask"); ++ assert(IN_SET(info->type, UNIT_FILE_TYPE_REGULAR, UNIT_FILE_TYPE_MASKED)); ++ log_debug("Found unit %s at %s (%s)", name, strna(info->path), ++ info->type == UNIT_FILE_TYPE_REGULAR ? "regular file" : "mask"); + + /* Shortcut things, if the caller just wants to know if this unit exists. */ + if (!ret) + return 0; + +- switch (i->type) { ++ switch (info->type) { + + case UNIT_FILE_TYPE_MASKED: +- r = path_is_runtime(lp, i->path, true); ++ r = path_is_runtime(lp, info->path, true); + if (r < 0) + return r; + +@@ -2805,12 +2801,12 @@ int unit_file_lookup_state( + + case UNIT_FILE_TYPE_REGULAR: + /* Check if the name we were querying is actually an alias */ +- if (!streq(name, basename(i->path)) && !unit_name_is_valid(i->name, UNIT_NAME_INSTANCE)) { ++ if (!streq(name, basename(info->path)) && !unit_name_is_valid(info->name, UNIT_NAME_INSTANCE)) { + state = UNIT_FILE_ALIAS; + break; + } + +- r = path_is_generator(lp, i->path); ++ r = path_is_generator(lp, info->path); + if (r < 0) + return r; + if (r > 0) { +@@ -2818,7 +2814,7 @@ int unit_file_lookup_state( + break; + } + +- r = path_is_transient(lp, i->path); ++ r = path_is_transient(lp, info->path); + if (r < 0) + return r; + if (r > 0) { +@@ -2829,7 +2825,7 @@ int unit_file_lookup_state( + /* Check if any of the Alias= symlinks have been created. + * We ignore other aliases, and only check those that would + * be created by systemctl enable for this unit. */ +- r = find_symlinks_in_scope(scope, lp, i, true, &state); ++ r = find_symlinks_in_scope(scope, lp, info, true, &state); + if (r < 0) + return r; + if (r > 0) +@@ -2837,15 +2833,15 @@ int unit_file_lookup_state( + + /* Check if the file is known under other names. If it is, + * it might be in use. Report that as UNIT_FILE_INDIRECT. */ +- r = find_symlinks_in_scope(scope, lp, i, false, &state); ++ r = find_symlinks_in_scope(scope, lp, info, false, &state); + if (r < 0) + return r; + if (r > 0) + state = UNIT_FILE_INDIRECT; + else { +- if (unit_file_install_info_has_rules(i)) ++ if (unit_file_install_info_has_rules(info)) + state = UNIT_FILE_DISABLED; +- else if (unit_file_install_info_has_also(i)) ++ else if (unit_file_install_info_has_also(info)) + state = UNIT_FILE_INDIRECT; + else + state = UNIT_FILE_STATIC; +@@ -2882,7 +2878,7 @@ int unit_file_get_state( + } + + int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) { +- _cleanup_(install_context_done) InstallContext c = {}; ++ _cleanup_(install_context_done) InstallContext c = { .scope = scope }; + int r; + + assert(lp); +@@ -2891,7 +2887,7 @@ int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *nam + if (!unit_name_is_valid(name, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_discover(scope, &c, lp, name, 0, NULL, NULL, NULL); ++ r = install_info_discover(&c, lp, name, 0, NULL, NULL, NULL); + if (r == -ENOENT) + return 0; + if (r < 0) +@@ -3150,7 +3146,6 @@ int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char + } + + static int execute_preset( +- UnitFileScope scope, + UnitFileFlags file_flags, + InstallContext *plus, + InstallContext *minus, +@@ -3171,7 +3166,7 @@ static int execute_preset( + if (mode != UNIT_FILE_PRESET_ENABLE_ONLY) { + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; + +- r = install_context_mark_for_removal(scope, minus, lp, &remove_symlinks_to, config_path, changes, n_changes); ++ r = install_context_mark_for_removal(minus, lp, &remove_symlinks_to, config_path, changes, n_changes); + if (r < 0) + return r; + +@@ -3183,9 +3178,10 @@ static int execute_preset( + int q; + + /* Returns number of symlinks that where supposed to be installed. */ +- q = install_context_apply(scope, ++ q = install_context_apply(plus, lp, + file_flags | UNIT_FILE_IGNORE_AUXILIARY_FAILURE, +- plus, lp, config_path, SEARCH_LOAD, changes, n_changes); ++ config_path, ++ SEARCH_LOAD, changes, n_changes); + if (r >= 0) { + if (q < 0) + r = q; +@@ -3207,20 +3203,20 @@ static int preset_prepare_one( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(install_context_done) InstallContext tmp = {}; ++ _cleanup_(install_context_done) InstallContext tmp = { .scope = scope }; + _cleanup_strv_free_ char **instance_name_list = NULL; +- UnitFileInstallInfo *i; ++ UnitFileInstallInfo *info; + int r; + + if (install_info_find(plus, name) || install_info_find(minus, name)) + return 0; + +- r = install_info_discover(scope, &tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, changes, n_changes); ++ r = install_info_discover(&tmp, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, changes, n_changes); + if (r < 0) + return r; +- if (!streq(name, i->name)) { +- log_debug("Skipping %s because it is an alias for %s.", name, i->name); ++ if (!streq(name, info->name)) { ++ log_debug("Skipping %s because it is an alias for %s.", name, info->name); + return 0; + } + +@@ -3232,21 +3228,21 @@ static int preset_prepare_one( + if (instance_name_list) { + char **s; + STRV_FOREACH(s, instance_name_list) { +- r = install_info_discover_and_check(scope, plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, changes, n_changes); ++ r = install_info_discover_and_check(plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, changes, n_changes); + if (r < 0) + return r; + } + } else { +- r = install_info_discover_and_check(scope, plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, changes, n_changes); ++ r = install_info_discover_and_check(plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, changes, n_changes); + if (r < 0) + return r; + } + + } else +- r = install_info_discover(scope, minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, +- &i, changes, n_changes); ++ r = install_info_discover(minus, lp, name, SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ &info, changes, n_changes); + + return r; + } +@@ -3289,7 +3285,7 @@ int unit_file_preset( + return r; + } + +- return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes); ++ return execute_preset(file_flags, &plus, &minus, &lp, config_path, files, mode, changes, n_changes); + } + + int unit_file_preset_all( +@@ -3351,7 +3347,7 @@ int unit_file_preset_all( + } + } + +- return execute_preset(scope, file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes); ++ return execute_preset(file_flags, &plus, &minus, &lp, config_path, NULL, mode, changes, n_changes); + } + + static UnitFileList* unit_file_list_free_one(UnitFileList *f) { diff --git a/SOURCES/0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch b/SOURCES/0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch new file mode 100644 index 0000000..ec381a7 --- /dev/null +++ b/SOURCES/0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch @@ -0,0 +1,549 @@ +From 87df0601074b024ab591534e0e78b2d1e7013a8d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 9 Mar 2022 22:29:19 +0100 +Subject: [PATCH] shared/specifier: fix %u/%U/%g/%G when called as unprivileged + user +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We would resolve those specifiers to the calling user/group. This is mostly OK +when done in the manager, because the manager generally operates as root +in system mode, and a non-root in user mode. It would still be wrong if +called with --test though. But in systemctl, this would be generally wrong, +since we can call 'systemctl --system' as a normal user, either for testing +or even for actual operation with '--root=…'. + +When operating in --global mode, %u/%U/%g/%G should return an error. + +The information whether we're operating in system mode, user mode, or global +mode is passed as the data pointer to specifier_group_name(), specifier_user_name(), +specifier_group_id(), specifier_user_id(). We can't use userdata, because +it's already used for other things. + +(cherry picked from commit 172e9cc3ee3dcca288d04c744984a9a3b2a0d008) + +Related: #2082131 +--- + src/core/unit-printf.c | 4 +- + src/shared/install-printf.c | 9 ++- + src/shared/install-printf.h | 7 ++- + src/shared/install.c | 9 +-- + src/shared/specifier.c | 52 ++++++++++++++--- + src/shared/specifier.h | 10 ++-- + src/test/test-load-fragment.c | 101 +++++++++++++++++++--------------- + src/test/test-specifier.c | 3 +- + src/tmpfiles/tmpfiles.c | 53 +++++++++--------- + test/test-systemctl-enable.sh | 11 ++-- + test/test-systemd-tmpfiles.py | 8 +-- + 11 files changed, 163 insertions(+), 104 deletions(-) + +diff --git a/src/core/unit-printf.c b/src/core/unit-printf.c +index 46c383b841..3086356419 100644 +--- a/src/core/unit-printf.c ++++ b/src/core/unit-printf.c +@@ -190,7 +190,7 @@ int unit_name_printf(const Unit *u, const char* format, char **ret) { + + COMMON_SYSTEM_SPECIFIERS, + +- COMMON_CREDS_SPECIFIERS, ++ COMMON_CREDS_SPECIFIERS(u->manager->unit_file_scope), + {} + }; + +@@ -256,7 +256,7 @@ int unit_full_printf_full(const Unit *u, const char *format, size_t max_length, + + COMMON_SYSTEM_SPECIFIERS, + +- COMMON_CREDS_SPECIFIERS, ++ COMMON_CREDS_SPECIFIERS(u->manager->unit_file_scope), + + COMMON_TMP_SPECIFIERS, + {} +diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c +index 6ff4198ac9..963102674b 100644 +--- a/src/shared/install-printf.c ++++ b/src/shared/install-printf.c +@@ -103,7 +103,12 @@ static int specifier_last_component(char specifier, const void *data, const char + return 0; + } + +-int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret) { ++int install_name_printf( ++ UnitFileScope scope, ++ const UnitFileInstallInfo *i, ++ const char *format, ++ const char *root, ++ char **ret) { + /* This is similar to unit_name_printf() */ + + const Specifier table[] = { +@@ -115,7 +120,7 @@ int install_name_printf(const UnitFileInstallInfo *i, const char *format, const + + COMMON_SYSTEM_SPECIFIERS, + +- COMMON_CREDS_SPECIFIERS, ++ COMMON_CREDS_SPECIFIERS(scope), + {} + }; + +diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h +index 5ca9406797..d2cccdf66d 100644 +--- a/src/shared/install-printf.h ++++ b/src/shared/install-printf.h +@@ -4,4 +4,9 @@ + #include "install.h" + #include "unit-name.h" + +-int install_name_printf(const UnitFileInstallInfo *i, const char *format, const char *root, char **ret); ++int install_name_printf( ++ UnitFileScope scope, ++ const UnitFileInstallInfo *i, ++ const char *format, ++ const char *root, ++ char **ret); +diff --git a/src/shared/install.c b/src/shared/install.c +index bfdeee48bf..8d82cb6b16 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1160,7 +1160,7 @@ static int config_parse_also( + if (r == 0) + break; + +- r = install_name_printf(info, word, info->root, &printed); ++ r = install_name_printf(ctx->scope, info, word, info->root, &printed); + if (r < 0) + return log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to resolve unit name in Also=\"%s\": %m", word); +@@ -1191,6 +1191,7 @@ static int config_parse_default_instance( + void *data, + void *userdata) { + ++ InstallContext *ctx = ASSERT_PTR(data); + UnitFileInstallInfo *info = ASSERT_PTR(userdata); + _cleanup_free_ char *printed = NULL; + int r; +@@ -1208,7 +1209,7 @@ static int config_parse_default_instance( + return log_syntax(unit, LOG_WARNING, filename, line, 0, + "DefaultInstance= only makes sense for template units, ignoring."); + +- r = install_name_printf(info, rvalue, info->root, &printed); ++ r = install_name_printf(ctx->scope, info, rvalue, info->root, &printed); + if (r < 0) + return log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue); +@@ -1780,7 +1781,7 @@ static int install_info_symlink_alias( + STRV_FOREACH(s, info->aliases) { + _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL; + +- q = install_name_printf(info, *s, info->root, &dst); ++ q = install_name_printf(scope, info, *s, info->root, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; +@@ -1867,7 +1868,7 @@ static int install_info_symlink_wants( + STRV_FOREACH(s, list) { + _cleanup_free_ char *path = NULL, *dst = NULL; + +- q = install_name_printf(info, *s, info->root, &dst); ++ q = install_name_printf(scope, info, *s, info->root, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; +diff --git a/src/shared/specifier.c b/src/shared/specifier.c +index a917378427..ac353a651c 100644 +--- a/src/shared/specifier.c ++++ b/src/shared/specifier.c +@@ -21,6 +21,7 @@ + #include "specifier.h" + #include "string-util.h" + #include "strv.h" ++#include "unit-file.h" + #include "user-util.h" + + /* +@@ -253,9 +254,15 @@ int specifier_os_image_version(char specifier, const void *data, const char *roo + } + + int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { ++ UnitFileScope scope = PTR_TO_INT(data); + char *t; + +- t = gid_to_name(getgid()); ++ assert(ret); ++ ++ if (scope == UNIT_FILE_GLOBAL) ++ return -EINVAL; ++ ++ t = gid_to_name(scope == UNIT_FILE_USER ? getgid() : 0); + if (!t) + return -ENOMEM; + +@@ -264,23 +271,42 @@ int specifier_group_name(char specifier, const void *data, const char *root, con + } + + int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- if (asprintf(ret, UID_FMT, getgid()) < 0) ++ UnitFileScope scope = PTR_TO_INT(data); ++ gid_t gid; ++ ++ assert(ret); ++ ++ if (scope == UNIT_FILE_GLOBAL) ++ return -EINVAL; ++ ++ gid = scope == UNIT_FILE_USER ? getgid() : 0; ++ ++ if (asprintf(ret, UID_FMT, gid) < 0) + return -ENOMEM; + + return 0; + } + + int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { ++ UnitFileScope scope = PTR_TO_INT(data); ++ uid_t uid; + char *t; + +- /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want to be able +- * to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed. ++ assert(ret); + +- * We don't use getusername_malloc() here, because we don't want to look at $USER, to remain consistent with +- * specifer_user_id() below. ++ if (scope == UNIT_FILE_GLOBAL) ++ return -EINVAL; ++ ++ uid = scope == UNIT_FILE_USER ? getuid() : 0; ++ ++ /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want ++ * to be able to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed. ++ ++ * We don't use getusername_malloc() here, because we don't want to look at $USER, to remain ++ * consistent with specifer_user_id() below. + */ + +- t = uid_to_name(getuid()); ++ t = uid_to_name(uid); + if (!t) + return -ENOMEM; + +@@ -289,7 +315,17 @@ int specifier_user_name(char specifier, const void *data, const char *root, cons + } + + int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- if (asprintf(ret, UID_FMT, getuid()) < 0) ++ UnitFileScope scope = PTR_TO_INT(data); ++ uid_t uid; ++ ++ assert(ret); ++ ++ if (scope == UNIT_FILE_GLOBAL) ++ return -EINVAL; ++ ++ uid = scope == UNIT_FILE_USER ? getuid() : 0; ++ ++ if (asprintf(ret, UID_FMT, uid) < 0) + return -ENOMEM; + + return 0; +diff --git a/src/shared/specifier.h b/src/shared/specifier.h +index c433ee2d63..3c619a6c8f 100644 +--- a/src/shared/specifier.h ++++ b/src/shared/specifier.h +@@ -80,11 +80,11 @@ int specifier_var_tmp_dir(char specifier, const void *data, const char *root, co + { 'w', specifier_os_version_id, NULL }, \ + { 'W', specifier_os_variant_id, NULL } + +-#define COMMON_CREDS_SPECIFIERS \ +- { 'g', specifier_group_name, NULL }, \ +- { 'G', specifier_group_id, NULL }, \ +- { 'u', specifier_user_name, NULL }, \ +- { 'U', specifier_user_id, NULL } ++#define COMMON_CREDS_SPECIFIERS(scope) \ ++ { 'g', specifier_group_name, INT_TO_PTR(scope) }, \ ++ { 'G', specifier_group_id, INT_TO_PTR(scope) }, \ ++ { 'u', specifier_user_name, INT_TO_PTR(scope) }, \ ++ { 'U', specifier_user_id, INT_TO_PTR(scope) } + + #define COMMON_TMP_SPECIFIERS \ + { 'T', specifier_tmp_dir, NULL }, \ +diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c +index c579be4150..9df53cec2b 100644 +--- a/src/test/test-load-fragment.c ++++ b/src/test/test-load-fragment.c +@@ -526,59 +526,74 @@ TEST(install_printf, .sd_booted = true) { + assert_se(user = uid_to_name(getuid())); + assert_se(asprintf(&uid, UID_FMT, getuid()) >= 0); + +-#define expect(src, pattern, result) \ ++#define expect(scope, src, pattern, result) \ + do { \ +- _cleanup_free_ char *t = NULL; \ +- _cleanup_free_ char \ +- *d1 = strdup(i.name), \ +- *d2 = strdup(i.path); \ +- assert_se(install_name_printf(&src, pattern, NULL, &t) >= 0 || !result); \ ++ _cleanup_free_ char *t = NULL, \ ++ *d1 = ASSERT_PTR(strdup(i.name)), \ ++ *d2 = ASSERT_PTR(strdup(i.path)); \ ++ int r = install_name_printf(scope, &src, pattern, NULL, &t); \ ++ assert_se(result ? r >= 0 : r < 0); \ + memzero(i.name, strlen(i.name)); \ + memzero(i.path, strlen(i.path)); \ +- assert_se(d1 && d2); \ + if (result) { \ + printf("%s\n", t); \ + assert_se(streq(t, result)); \ +- } else assert_se(t == NULL); \ ++ } else \ ++ assert_se(!t); \ + strcpy(i.name, d1); \ + strcpy(i.path, d2); \ + } while (false) + +- expect(i, "%n", "name.service"); +- expect(i, "%N", "name"); +- expect(i, "%p", "name"); +- expect(i, "%i", ""); +- expect(i, "%j", "name"); +- expect(i, "%g", group); +- expect(i, "%G", gid); +- expect(i, "%u", user); +- expect(i, "%U", uid); +- +- expect(i, "%m", mid); +- expect(i, "%b", bid); +- expect(i, "%H", host); +- +- expect(i2, "%g", group); +- expect(i2, "%G", gid); +- expect(i2, "%u", user); +- expect(i2, "%U", uid); +- +- expect(i3, "%n", "name@inst.service"); +- expect(i3, "%N", "name@inst"); +- expect(i3, "%p", "name"); +- expect(i3, "%g", group); +- expect(i3, "%G", gid); +- expect(i3, "%u", user); +- expect(i3, "%U", uid); +- +- expect(i3, "%m", mid); +- expect(i3, "%b", bid); +- expect(i3, "%H", host); +- +- expect(i4, "%g", group); +- expect(i4, "%G", gid); +- expect(i4, "%u", user); +- expect(i4, "%U", uid); ++ expect(UNIT_FILE_SYSTEM, i, "%n", "name.service"); ++ expect(UNIT_FILE_SYSTEM, i, "%N", "name"); ++ expect(UNIT_FILE_SYSTEM, i, "%p", "name"); ++ expect(UNIT_FILE_SYSTEM, i, "%i", ""); ++ expect(UNIT_FILE_SYSTEM, i, "%j", "name"); ++ expect(UNIT_FILE_SYSTEM, i, "%g", "root"); ++ expect(UNIT_FILE_SYSTEM, i, "%G", "0"); ++ expect(UNIT_FILE_SYSTEM, i, "%u", "root"); ++ expect(UNIT_FILE_SYSTEM, i, "%U", "0"); ++ ++ expect(UNIT_FILE_SYSTEM, i, "%m", mid); ++ expect(UNIT_FILE_SYSTEM, i, "%b", bid); ++ expect(UNIT_FILE_SYSTEM, i, "%H", host); ++ ++ expect(UNIT_FILE_SYSTEM, i2, "%g", "root"); ++ expect(UNIT_FILE_SYSTEM, i2, "%G", "0"); ++ expect(UNIT_FILE_SYSTEM, i2, "%u", "root"); ++ expect(UNIT_FILE_SYSTEM, i2, "%U", "0"); ++ ++ expect(UNIT_FILE_USER, i2, "%g", group); ++ expect(UNIT_FILE_USER, i2, "%G", gid); ++ expect(UNIT_FILE_USER, i2, "%u", user); ++ expect(UNIT_FILE_USER, i2, "%U", uid); ++ ++ /* gcc-12.0.1-0.9.fc36.x86_64 insist that streq(…, NULL) is called, ++ * even though the call is inside of a conditional where the pointer is checked. :( */ ++#pragma GCC diagnostic push ++#pragma GCC diagnostic ignored "-Wnonnull" ++ expect(UNIT_FILE_GLOBAL, i2, "%g", NULL); ++ expect(UNIT_FILE_GLOBAL, i2, "%G", NULL); ++ expect(UNIT_FILE_GLOBAL, i2, "%u", NULL); ++ expect(UNIT_FILE_GLOBAL, i2, "%U", NULL); ++#pragma GCC diagnostic pop ++ ++ expect(UNIT_FILE_SYSTEM, i3, "%n", "name@inst.service"); ++ expect(UNIT_FILE_SYSTEM, i3, "%N", "name@inst"); ++ expect(UNIT_FILE_SYSTEM, i3, "%p", "name"); ++ expect(UNIT_FILE_USER, i3, "%g", group); ++ expect(UNIT_FILE_USER, i3, "%G", gid); ++ expect(UNIT_FILE_USER, i3, "%u", user); ++ expect(UNIT_FILE_USER, i3, "%U", uid); ++ ++ expect(UNIT_FILE_SYSTEM, i3, "%m", mid); ++ expect(UNIT_FILE_SYSTEM, i3, "%b", bid); ++ expect(UNIT_FILE_SYSTEM, i3, "%H", host); ++ ++ expect(UNIT_FILE_USER, i4, "%g", group); ++ expect(UNIT_FILE_USER, i4, "%G", gid); ++ expect(UNIT_FILE_USER, i4, "%u", user); ++ expect(UNIT_FILE_USER, i4, "%U", uid); + } + + static uint64_t make_cap(int cap) { +diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c +index a45d1bd0b9..dd47f0285e 100644 +--- a/src/test/test-specifier.c ++++ b/src/test/test-specifier.c +@@ -7,6 +7,7 @@ + #include "string-util.h" + #include "strv.h" + #include "tests.h" ++#include "unit-file.h" + + static void test_specifier_escape_one(const char *a, const char *b) { + _cleanup_free_ char *x = NULL; +@@ -45,7 +46,7 @@ TEST(specifier_escape_strv) { + static const Specifier specifier_table[] = { + COMMON_SYSTEM_SPECIFIERS, + +- COMMON_CREDS_SPECIFIERS, ++ COMMON_CREDS_SPECIFIERS(UNIT_FILE_USER), + { 'h', specifier_user_home, NULL }, + + COMMON_TMP_SPECIFIERS, +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index fcab51c208..aa7ff73a36 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -204,31 +204,6 @@ STATIC_DESTRUCTOR_REGISTER(arg_image, freep); + static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret); + static int specifier_directory(char specifier, const void *data, const char *root, const void *userdata, char **ret); + +-static const Specifier specifier_table[] = { +- { 'a', specifier_architecture, NULL }, +- { 'b', specifier_boot_id, NULL }, +- { 'B', specifier_os_build_id, NULL }, +- { 'H', specifier_host_name, NULL }, +- { 'l', specifier_short_host_name, NULL }, +- { 'm', specifier_machine_id_safe, NULL }, +- { 'o', specifier_os_id, NULL }, +- { 'v', specifier_kernel_release, NULL }, +- { 'w', specifier_os_version_id, NULL }, +- { 'W', specifier_os_variant_id, NULL }, +- +- { 'h', specifier_user_home, NULL }, +- +- { 'C', specifier_directory, UINT_TO_PTR(DIRECTORY_CACHE) }, +- { 'L', specifier_directory, UINT_TO_PTR(DIRECTORY_LOGS) }, +- { 'S', specifier_directory, UINT_TO_PTR(DIRECTORY_STATE) }, +- { 't', specifier_directory, UINT_TO_PTR(DIRECTORY_RUNTIME) }, +- +- COMMON_CREDS_SPECIFIERS, +- +- COMMON_TMP_SPECIFIERS, +- {} +-}; +- + static int specifier_machine_id_safe(char specifier, const void *data, const char *root, const void *userdata, char **ret) { + int r; + +@@ -2743,7 +2718,7 @@ static bool should_include_path(const char *path) { + return false; + } + +-static int specifier_expansion_from_arg(Item *i) { ++static int specifier_expansion_from_arg(const Specifier *specifier_table, Item *i) { + int r; + + assert(i); +@@ -2951,6 +2926,30 @@ static int parse_line( + assert(line >= 1); + assert(buffer); + ++ const Specifier specifier_table[] = { ++ { 'a', specifier_architecture, NULL }, ++ { 'b', specifier_boot_id, NULL }, ++ { 'B', specifier_os_build_id, NULL }, ++ { 'H', specifier_host_name, NULL }, ++ { 'l', specifier_short_host_name, NULL }, ++ { 'm', specifier_machine_id_safe, NULL }, ++ { 'o', specifier_os_id, NULL }, ++ { 'v', specifier_kernel_release, NULL }, ++ { 'w', specifier_os_version_id, NULL }, ++ { 'W', specifier_os_variant_id, NULL }, ++ ++ { 'h', specifier_user_home, NULL }, ++ ++ { 'C', specifier_directory, UINT_TO_PTR(DIRECTORY_CACHE) }, ++ { 'L', specifier_directory, UINT_TO_PTR(DIRECTORY_LOGS) }, ++ { 'S', specifier_directory, UINT_TO_PTR(DIRECTORY_STATE) }, ++ { 't', specifier_directory, UINT_TO_PTR(DIRECTORY_RUNTIME) }, ++ ++ COMMON_CREDS_SPECIFIERS(arg_user ? UNIT_FILE_USER : UNIT_FILE_SYSTEM), ++ COMMON_TMP_SPECIFIERS, ++ {} ++ }; ++ + r = extract_many_words( + &buffer, + NULL, +@@ -3155,7 +3154,7 @@ static int parse_line( + if (!should_include_path(i.path)) + return 0; + +- r = specifier_expansion_from_arg(&i); ++ r = specifier_expansion_from_arg(specifier_table, &i); + if (r == -ENXIO) + return log_unresolvable_specifier(fname, line); + if (r < 0) { +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index da1fffe944..8ac1342b91 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -500,9 +500,10 @@ check_alias t '' && { echo "Expected failure" >&2; exit 1; } + check_alias T '' && { echo "Expected failure" >&2; exit 1; } + check_alias V '' && { echo "Expected failure" >&2; exit 1; } + +-# FIXME: we use the calling user instead of root :( +-check_alias g root || : +-check_alias G 0 || : ++check_alias g root ++check_alias G 0 ++check_alias u root ++check_alias U 0 + + check_alias i "" + +@@ -521,10 +522,6 @@ check_alias N 'some-some-link6@' + + check_alias p 'some-some-link6' + +-# FIXME: we use the calling user instead of root :( +-check_alias u root || : +-check_alias U 0 || : +- + check_alias v "$(uname -r)" + + check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; } +diff --git a/test/test-systemd-tmpfiles.py b/test/test-systemd-tmpfiles.py +index 3376029463..ba42b3fa37 100755 +--- a/test/test-systemd-tmpfiles.py ++++ b/test/test-systemd-tmpfiles.py +@@ -98,13 +98,13 @@ def test_valid_specifiers(*, user): + test_content('f {} - - - - %b', '{}'.format(id128.get_boot().hex), user=user) + test_content('f {} - - - - %H', '{}'.format(socket.gethostname()), user=user) + test_content('f {} - - - - %v', '{}'.format(os.uname().release), user=user) +- test_content('f {} - - - - %U', '{}'.format(os.getuid()), user=user) +- test_content('f {} - - - - %G', '{}'.format(os.getgid()), user=user) ++ test_content('f {} - - - - %U', '{}'.format(os.getuid() if user else 0), user=user) ++ test_content('f {} - - - - %G', '{}'.format(os.getgid() if user else 0), user=user) + +- puser = pwd.getpwuid(os.getuid()) ++ puser = pwd.getpwuid(os.getuid() if user else 0) + test_content('f {} - - - - %u', '{}'.format(puser.pw_name), user=user) + +- pgroup = grp.getgrgid(os.getgid()) ++ pgroup = grp.getgrgid(os.getgid() if user else 0) + test_content('f {} - - - - %g', '{}'.format(pgroup.gr_name), user=user) + + # Note that %h is the only specifier in which we look the environment, diff --git a/SOURCES/0174-shared-install-simplify-unit_file_dump_changes.patch b/SOURCES/0174-shared-install-simplify-unit_file_dump_changes.patch new file mode 100644 index 0000000..a463fab --- /dev/null +++ b/SOURCES/0174-shared-install-simplify-unit_file_dump_changes.patch @@ -0,0 +1,118 @@ +From cb49e80f8adf8fe81b6aa96b17a39a96850dcfa6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Mar 2022 09:19:37 +0100 +Subject: [PATCH] shared/install: simplify unit_file_dump_changes() + +No functional change. + +(cherry picked from commit 32450f5348c03262f3257af328b6547cbfba5859) + +Related: #2082131 +--- + src/shared/install.c | 63 +++++++++++++++++++------------------------- + 1 file changed, 27 insertions(+), 36 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 8d82cb6b16..80863b448b 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -320,7 +320,7 @@ void unit_file_changes_free(UnitFileChange *changes, size_t n_changes) { + } + + void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet) { +- bool logged = false; ++ int err = 0; + + assert(changes || n_changes == 0); + /* If verb is not specified, errors are not allowed! */ +@@ -361,64 +361,55 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + break; + case -EEXIST: + if (changes[i].source) +- log_error_errno(changes[i].type_or_errno, +- "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".", +- verb, changes[i].path, changes[i].source); ++ err = log_error_errno(changes[i].type_or_errno, ++ "Failed to %s unit, file \"%s\" already exists and is a symlink to \"%s\".", ++ verb, changes[i].path, changes[i].source); + else +- log_error_errno(changes[i].type_or_errno, +- "Failed to %s unit, file \"%s\" already exists.", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, ++ "Failed to %s unit, file \"%s\" already exists.", ++ verb, changes[i].path); + break; + case -ERFKILL: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is masked.", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is masked.", ++ verb, changes[i].path); + break; + case -EADDRNOTAVAIL: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s is transient or generated.", ++ verb, changes[i].path); + break; + case -EBADSLT: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid specifier in \"%s\".", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid specifier in \"%s\".", ++ verb, changes[i].path); + break; + case -EIDRM: +- log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.", +- verb, changes[i].source, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s %s, destination unit %s is a non-template unit.", ++ verb, changes[i].source, changes[i].path); + break; + case -EUCLEAN: +- log_error_errno(changes[i].type_or_errno, +- "Failed to %s unit, \"%s\" is not a valid unit name.", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, ++ "Failed to %s unit, \"%s\" is not a valid unit name.", ++ verb, changes[i].path); + break; + case -ELOOP: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.", ++ verb, changes[i].path); + break; + case -ENOENT: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", ++ verb, changes[i].path); + break; + case -EUNATCH: +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot resolve specifiers in \"%s\".", ++ verb, changes[i].path); + break; + default: + assert(changes[i].type_or_errno < 0); +- log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m", +- verb, changes[i].path); +- logged = true; ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, file \"%s\": %m", ++ verb, changes[i].path); + } + } + +- if (r < 0 && !logged) ++ if (r < 0 && err >= 0) + log_error_errno(r, "Failed to %s: %m.", verb); + } + diff --git a/SOURCES/0175-shared-install-propagate-errors-about-invalid-aliase.patch b/SOURCES/0175-shared-install-propagate-errors-about-invalid-aliase.patch new file mode 100644 index 0000000..4fa41b3 --- /dev/null +++ b/SOURCES/0175-shared-install-propagate-errors-about-invalid-aliase.patch @@ -0,0 +1,325 @@ +From 35bcb96c1ac2db777db1649026f931ce77c9c7ba Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Mar 2022 11:03:41 +0100 +Subject: [PATCH] shared/install: propagate errors about invalid aliases and + such too + +If an invalid arg appears in [Install] Alias=, WantedBy=, RequiredBy=, +we'd warn in the logs, but not propagate this information to the caller, +and in particular not over dbus. But if we call "systemctl enable" on a +unit, and the config if invalid, this information is quite important. + +(cherry picked from commit cbfdbffb618f1d75e668c59887a27c7a60950546) + +Related: #2082131 +--- + src/basic/unit-file.c | 44 +++++++++++++------------- + src/basic/unit-file.h | 2 +- + src/shared/install.c | 61 ++++++++++++++++++++++++++---------- + src/shared/install.h | 7 ++++- + src/test/test-install-root.c | 2 +- + src/test/test-unit-file.c | 28 ++++++++--------- + 6 files changed, 88 insertions(+), 56 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index f7a10b22c6..105dacc1b2 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -69,7 +69,7 @@ int unit_symlink_name_compatible(const char *symlink, const char *target, bool i + return 0; + } + +-int unit_validate_alias_symlink_and_warn(const char *filename, const char *target) { ++int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, const char *target) { + const char *src, *dst; + _cleanup_free_ char *src_instance = NULL, *dst_instance = NULL; + UnitType src_unit_type, dst_unit_type; +@@ -92,51 +92,51 @@ int unit_validate_alias_symlink_and_warn(const char *filename, const char *targe + + src_name_type = unit_name_to_instance(src, &src_instance); + if (src_name_type < 0) +- return log_notice_errno(src_name_type, +- "%s: not a valid unit name \"%s\": %m", filename, src); ++ return log_full_errno(log_level, src_name_type, ++ "%s: not a valid unit name \"%s\": %m", filename, src); + + src_unit_type = unit_name_to_type(src); + assert(src_unit_type >= 0); /* unit_name_to_instance() checked the suffix already */ + + if (!unit_type_may_alias(src_unit_type)) +- return log_notice_errno(SYNTHETIC_ERRNO(EINVAL), +- "%s: symlinks are not allowed for units of this type, rejecting.", +- filename); ++ return log_full_errno(log_level, SYNTHETIC_ERRNO(EINVAL), ++ "%s: symlinks are not allowed for units of this type, rejecting.", ++ filename); + + if (src_name_type != UNIT_NAME_PLAIN && + !unit_type_may_template(src_unit_type)) +- return log_notice_errno(SYNTHETIC_ERRNO(EINVAL), +- "%s: templates not allowed for %s units, rejecting.", +- filename, unit_type_to_string(src_unit_type)); ++ return log_full_errno(log_level, SYNTHETIC_ERRNO(EINVAL), ++ "%s: templates not allowed for %s units, rejecting.", ++ filename, unit_type_to_string(src_unit_type)); + + /* dst checks */ + + dst_name_type = unit_name_to_instance(dst, &dst_instance); + if (dst_name_type < 0) +- return log_notice_errno(dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type, +- "%s points to \"%s\" which is not a valid unit name: %m", +- filename, dst); ++ return log_full_errno(log_level, dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type, ++ "%s points to \"%s\" which is not a valid unit name: %m", ++ filename, dst); + + if (!(dst_name_type == src_name_type || + (src_name_type == UNIT_NAME_INSTANCE && dst_name_type == UNIT_NAME_TEMPLATE))) +- return log_notice_errno(SYNTHETIC_ERRNO(EXDEV), +- "%s: symlink target name type \"%s\" does not match source, rejecting.", +- filename, dst); ++ return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV), ++ "%s: symlink target name type \"%s\" does not match source, rejecting.", ++ filename, dst); + + if (dst_name_type == UNIT_NAME_INSTANCE) { + assert(src_instance); + assert(dst_instance); + if (!streq(src_instance, dst_instance)) +- return log_notice_errno(SYNTHETIC_ERRNO(EXDEV), +- "%s: unit symlink target \"%s\" instance name doesn't match, rejecting.", +- filename, dst); ++ return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV), ++ "%s: unit symlink target \"%s\" instance name doesn't match, rejecting.", ++ filename, dst); + } + + dst_unit_type = unit_name_to_type(dst); + if (dst_unit_type != src_unit_type) +- return log_notice_errno(SYNTHETIC_ERRNO(EXDEV), +- "%s: symlink target \"%s\" has incompatible suffix, rejecting.", +- filename, dst); ++ return log_full_errno(log_level, SYNTHETIC_ERRNO(EXDEV), ++ "%s: symlink target \"%s\" has incompatible suffix, rejecting.", ++ filename, dst); + + return 0; + } +@@ -355,7 +355,7 @@ int unit_file_resolve_symlink( + "Suspicious symlink %s/%s→%s, treating as alias.", + dir, filename, simplified); + +- r = unit_validate_alias_symlink_and_warn(filename, simplified); ++ r = unit_validate_alias_symlink_or_warn(LOG_NOTICE, filename, simplified); + if (r < 0) + return r; + +diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h +index e29e878cfd..b7c03e9c2c 100644 +--- a/src/basic/unit-file.h ++++ b/src/basic/unit-file.h +@@ -41,7 +41,7 @@ bool unit_type_may_alias(UnitType type) _const_; + bool unit_type_may_template(UnitType type) _const_; + + int unit_symlink_name_compatible(const char *symlink, const char *target, bool instance_propagation); +-int unit_validate_alias_symlink_and_warn(const char *filename, const char *target); ++int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, const char *target); + + bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_hash, uint64_t *ret_new); + +diff --git a/src/shared/install.c b/src/shared/install.c +index 80863b448b..6da9ba6b0c 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -394,6 +394,14 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, refusing to operate on linked unit file %s.", + verb, changes[i].path); + break; ++ case -EXDEV: ++ if (changes[i].source) ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, cannot alias %s as %s.", ++ verb, changes[i].source, changes[i].path); ++ else ++ err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, invalid unit reference \"%s\".", ++ verb, changes[i].path); ++ break; + case -ENOENT: + err = log_error_errno(changes[i].type_or_errno, "Failed to %s unit, unit %s does not exist.", + verb, changes[i].path); +@@ -1678,7 +1686,13 @@ static int install_info_discover_and_check( + return install_info_may_process(ret ? *ret : NULL, lp, changes, n_changes); + } + +-int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, char **ret_dst) { ++int unit_file_verify_alias( ++ const UnitFileInstallInfo *info, ++ const char *dst, ++ char **ret_dst, ++ UnitFileChange **changes, ++ size_t *n_changes) { ++ + _cleanup_free_ char *dst_updated = NULL; + int r; + +@@ -1705,15 +1719,19 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha + p = endswith(dir, ".wants"); + if (!p) + p = endswith(dir, ".requires"); +- if (!p) +- return log_warning_errno(SYNTHETIC_ERRNO(EXDEV), +- "Invalid path \"%s\" in alias.", dir); ++ if (!p) { ++ unit_file_changes_add(changes, n_changes, -EXDEV, dst, NULL); ++ return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), "Invalid path \"%s\" in alias.", dir); ++ } ++ + *p = '\0'; /* dir should now be a unit name */ + + UnitNameFlags type = unit_name_classify(dir); +- if (type < 0) +- return log_warning_errno(SYNTHETIC_ERRNO(EXDEV), +- "Invalid unit name component \"%s\" in alias.", dir); ++ if (type < 0) { ++ unit_file_changes_add(changes, n_changes, -EXDEV, dst, NULL); ++ return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), ++ "Invalid unit name component \"%s\" in alias.", dir); ++ } + + const bool instance_propagation = type == UNIT_NAME_TEMPLATE; + +@@ -1721,10 +1739,12 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha + r = unit_symlink_name_compatible(path_alias, info->name, instance_propagation); + if (r < 0) + return log_error_errno(r, "Failed to verify alias validity: %m"); +- if (r == 0) +- return log_warning_errno(SYNTHETIC_ERRNO(EXDEV), +- "Invalid unit \"%s\" symlink \"%s\".", +- info->name, dst); ++ if (r == 0) { ++ unit_file_changes_add(changes, n_changes, -EXDEV, dst, info->name); ++ return log_debug_errno(SYNTHETIC_ERRNO(EXDEV), ++ "Invalid unit \"%s\" symlink \"%s\".", ++ info->name, dst); ++ } + + } else { + /* If the symlink target has an instance set and the symlink source doesn't, we "propagate +@@ -1733,8 +1753,10 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha + _cleanup_free_ char *inst = NULL; + + UnitNameFlags type = unit_name_to_instance(info->name, &inst); +- if (type < 0) +- return log_error_errno(type, "Failed to extract instance name from \"%s\": %m", info->name); ++ if (type < 0) { ++ unit_file_changes_add(changes, n_changes, -EUCLEAN, info->name, NULL); ++ return log_debug_errno(type, "Failed to extract instance name from \"%s\": %m", info->name); ++ } + + if (type == UNIT_NAME_INSTANCE) { + r = unit_name_replace_instance(dst, inst, &dst_updated); +@@ -1744,9 +1766,14 @@ int unit_file_verify_alias(const UnitFileInstallInfo *info, const char *dst, cha + } + } + +- r = unit_validate_alias_symlink_and_warn(dst_updated ?: dst, info->name); +- if (r < 0) ++ r = unit_validate_alias_symlink_or_warn(LOG_DEBUG, dst_updated ?: dst, info->name); ++ if (r < 0) { ++ unit_file_changes_add(changes, n_changes, ++ r == -EINVAL ? -EXDEV : r, ++ dst_updated ?: dst, ++ info->name); + return r; ++ } + } + + *ret_dst = TAKE_PTR(dst_updated); +@@ -1778,7 +1805,7 @@ static int install_info_symlink_alias( + return q; + } + +- q = unit_file_verify_alias(info, dst, &dst_updated); ++ q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes); + if (q < 0) + continue; + +@@ -3332,7 +3359,7 @@ int unit_file_preset_all( + + r = preset_prepare_one(scope, &plus, &minus, &lp, de->d_name, &presets, changes, n_changes); + if (r < 0 && +- !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH)) ++ !IN_SET(r, -EEXIST, -ERFKILL, -EADDRNOTAVAIL, -EBADSLT, -EIDRM, -EUCLEAN, -ELOOP, -ENOENT, -EUNATCH, -EXDEV)) + /* Ignore generated/transient/missing/invalid units when applying preset, propagate other errors. + * Coordinate with unit_file_dump_changes() above. */ + return r; +diff --git a/src/shared/install.h b/src/shared/install.h +index cdc5435035..d21e2aaa45 100644 +--- a/src/shared/install.h ++++ b/src/shared/install.h +@@ -193,7 +193,12 @@ int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, int type, + void unit_file_changes_free(UnitFileChange *changes, size_t n_changes); + void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *changes, size_t n_changes, bool quiet); + +-int unit_file_verify_alias(const UnitFileInstallInfo *i, const char *dst, char **ret_dst); ++int unit_file_verify_alias( ++ const UnitFileInstallInfo *info, ++ const char *dst, ++ char **ret_dst, ++ UnitFileChange **changes, ++ size_t *n_changes); + + typedef struct UnitFilePresetRule UnitFilePresetRule; + +diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c +index f718689c3a..4f66c12655 100644 +--- a/src/test/test-install-root.c ++++ b/src/test/test-install-root.c +@@ -1091,7 +1091,7 @@ static void verify_one( + if (i != last_info) + log_info("-- %s --", (last_info = i)->name); + +- r = unit_file_verify_alias(i, alias, &alias2); ++ r = unit_file_verify_alias(i, alias, &alias2, NULL, NULL); + log_info_errno(r, "alias %s ← %s: %d/%m (expected %d)%s%s%s", + i->name, alias, r, expected, + alias2 ? " [" : "", strempty(alias2), +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index cc08a4ae4b..8ed56ad3b8 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -8,20 +8,20 @@ + #include "unit-file.h" + + TEST(unit_validate_alias_symlink_and_warn) { +- assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.service") == 0); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.socket") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b.foobar") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.service") == 0); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@.socket") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b@YYY.service") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@XXX.service") == 0); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@XXX.service", "/other/b@.service") == 0); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@.service", "/other/b.service") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a.service", "/other/b@.service") == -EXDEV); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a@.slice", "/other/b.slice") == -EINVAL); +- assert_se(unit_validate_alias_symlink_and_warn("/path/a.slice", "/other/b.slice") == -EINVAL); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.service") == 0); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.socket") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b.foobar") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.service") == 0); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@.socket") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.service") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@YYY.socket") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b@YYY.service") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@XXX.service") == 0); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@XXX.service", "/other/b@.service") == 0); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.service", "/other/b.service") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.service", "/other/b@.service") == -EXDEV); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a@.slice", "/other/b.slice") == -EINVAL); ++ assert_se(unit_validate_alias_symlink_or_warn(LOG_INFO, "/path/a.slice", "/other/b.slice") == -EINVAL); + } + + TEST(unit_file_build_name_map) { diff --git a/SOURCES/0176-shared-install-return-failure-when-enablement-fails-.patch b/SOURCES/0176-shared-install-return-failure-when-enablement-fails-.patch new file mode 100644 index 0000000..614089b --- /dev/null +++ b/SOURCES/0176-shared-install-return-failure-when-enablement-fails-.patch @@ -0,0 +1,165 @@ +From db20c5cec8adf865dd47672bc091092b8cea5e0e Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Mar 2022 15:47:12 +0100 +Subject: [PATCH] shared/install: return failure when enablement fails, but + process as much as possible + +So far we'd issue a warning (before this series, just in the logs on the server +side, and before this commit, on stderr on the caller's side), but return +success. It seems that successfull return was introduced by mistake in +aa0f357fd833feecbea6c3e9be80b643e433bced (my fault :( ), which was supposed to +be a refactoring without a functional change. I think it's better to fail, +because if enablement fails, the user will most likely want to diagnose the +issue. + +Note that we still do partial enablement, as far as that is possible. So if +e.g. we have [Install] Alias=foo.service foobar, we'll create the symlink +'foo.service', but not 'foobar', since that's not a valid unit name. We'll +print info about the action taken, and about 'foobar' being invalid, and return +failure. + +(cherry picked from commit 0d11db59825a9deee0b56fdede0602ef1c37c5c5) + +Related: #2082131 +--- + src/shared/install.c | 10 +++++---- + test/test-systemctl-enable.sh | 39 ++++++++++++++++++----------------- + 2 files changed, 26 insertions(+), 23 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 6da9ba6b0c..a541d32fb7 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1802,20 +1802,22 @@ static int install_info_symlink_alias( + q = install_name_printf(scope, info, *s, info->root, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); +- return q; ++ r = r < 0 ? r : q; ++ continue; + } + + q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes); +- if (q < 0) ++ if (q < 0) { ++ r = r < 0 ? r : q; + continue; ++ } + + alias_path = path_make_absolute(dst_updated ?: dst, config_path); + if (!alias_path) + return -ENOMEM; + + q = create_symlink(lp, info->path, alias_path, force, changes, n_changes); +- if (r == 0) +- r = q; ++ r = r < 0 ? r : q; + } + + return r; +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 8ac1342b91..32bc6e5ef7 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -56,19 +56,27 @@ test ! -e "$root/etc/systemd/system/default.target.wants/test1.service" + test ! -e "$root/etc/systemd/system/special.target.requires/test1.service" + + : -------aliases---------------------------------------------- +-"$systemctl" --root="$root" enable test1 +-test -h "$root/etc/systemd/system/default.target.wants/test1.service" +-test -h "$root/etc/systemd/system/special.target.requires/test1.service" +- + cat >>"$root/etc/systemd/system/test1.service" <&2; exit 1; } ++test -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test -h "$root/etc/systemd/system/special.target.requires/test1.service" ++test ! -e "$root/etc/systemd/system/test1-goodalias.service" ++test -h "$root/etc/systemd/system/test1-goodalias.service" ++test ! -e "$root/etc/systemd/system/test1@badalias.service" ++test ! -e "$root/etc/systemd/system/test1-badalias.target" ++test ! -e "$root/etc/systemd/system/test1-badalias.socket" ++test -h "$root/etc/systemd/system/test1-goodalias2.service" ++ + : -------aliases in reeanble---------------------------------- +-"$systemctl" --root="$root" reenable test1 ++"$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; } + test -h "$root/etc/systemd/system/default.target.wants/test1.service" + test ! -e "$root/etc/systemd/system/test1-goodalias.service" + test -h "$root/etc/systemd/system/test1-goodalias.service" +@@ -328,7 +336,7 @@ Alias=link4alias.service + Alias=link4alias2.service + EOF + +-"$systemctl" --root="$root" enable 'link4.service' ++"$systemctl" --root="$root" enable 'link4.service' && { echo "Expected failure" >&2; exit 1; } + test ! -h "$root/etc/systemd/system/link4.service" # this is our file + test ! -h "$root/etc/systemd/system/link4@.service" + test ! -h "$root/etc/systemd/system/link4@inst.service" +@@ -343,18 +351,20 @@ test ! -h "$root/etc/systemd/system/link4alias.service" + test ! -h "$root/etc/systemd/system/link4alias2.service" + + : -------systemctl enable on path to unit file---------------- ++cat >"$root/etc/systemd/system/link4.service" <"$root/etc/systemd/system/link5.service" <&2; exit 1; } + +-# FIXME: if there's an invalid Alias=, we shouldn't preach about empty [Install] +- + # TODO: repeat the tests above for presets + + : -------SYSTEMD_OS_RELEASE relative to root------------------ diff --git a/SOURCES/0177-systemctl-fix-silent-failure-when-root-is-not-found.patch b/SOURCES/0177-systemctl-fix-silent-failure-when-root-is-not-found.patch new file mode 100644 index 0000000..a9ce03e --- /dev/null +++ b/SOURCES/0177-systemctl-fix-silent-failure-when-root-is-not-found.patch @@ -0,0 +1,545 @@ +From 8fa3444f3ca7add9af40ab565e045c2754e5a855 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Mar 2022 16:47:51 +0100 +Subject: [PATCH] systemctl: fix silent failure when --root is not found + +Some calls to lookup_path_init() were not followed by any log emission. +E.g.: +$ SYSTEMD_LOG_LEVEL=debug systemctl --root=/missing enable unit; echo $? +1 + +Let's add a helper function and use it in various places. + +$ SYSTEMD_LOG_LEVEL=debug build/systemctl --root=/missing enable unit; echo $? +Failed to initialize unit search paths for root directory /missing: No such file or directory +1 +$ SYSTEMCTL_SKIP_SYSV=1 build/systemctl --root=/missing enable unit; echo $? +Failed to initialize unit search paths for root directory /missing: No such file or directory +Failed to enable: No such file or directory. +1 + +The repeated error in the second case is not very nice, but this is a niche +case and I don't think it's worth the trouble to trying to avoid it. + +(cherry picked from commit 99aad9a2b9e2c06023a2043976fd9395332ff097) + +Related: #2082131 +--- + src/basic/env-file.c | 83 +++++++++------------------ + src/basic/path-lookup.c | 56 ++++++++++-------- + src/basic/path-lookup.h | 3 +- + src/core/manager.c | 12 ++-- + src/shared/condition.c | 3 +- + src/shared/install.c | 2 +- + src/systemctl/systemctl-edit.c | 8 +-- + src/systemctl/systemctl-enable.c | 2 +- + src/systemctl/systemctl-sysv-compat.c | 2 +- + src/sysv-generator/sysv-generator.c | 4 +- + src/test/test-fileio.c | 3 +- + src/test/test-os-util.c | 7 +-- + 12 files changed, 84 insertions(+), 101 deletions(-) + +diff --git a/src/basic/env-file.c b/src/basic/env-file.c +index 0353f3f2a0..0e272da083 100644 +--- a/src/basic/env-file.c ++++ b/src/basic/env-file.c +@@ -16,9 +16,8 @@ static int parse_env_file_internal( + FILE *f, + const char *fname, + int (*push) (const char *filename, unsigned line, +- const char *key, char *value, void *userdata, int *n_pushed), +- void *userdata, +- int *n_pushed) { ++ const char *key, char *value, void *userdata), ++ void *userdata) { + + size_t n_key = 0, n_value = 0, last_value_whitespace = SIZE_MAX, last_key_whitespace = SIZE_MAX; + _cleanup_free_ char *contents = NULL, *key = NULL, *value = NULL; +@@ -100,7 +99,7 @@ static int parse_env_file_internal( + if (last_key_whitespace != SIZE_MAX) + key[last_key_whitespace] = 0; + +- r = push(fname, line, key, value, userdata, n_pushed); ++ r = push(fname, line, key, value, userdata); + if (r < 0) + return r; + +@@ -143,7 +142,7 @@ static int parse_env_file_internal( + if (last_key_whitespace != SIZE_MAX) + key[last_key_whitespace] = 0; + +- r = push(fname, line, key, value, userdata, n_pushed); ++ r = push(fname, line, key, value, userdata); + if (r < 0) + return r; + +@@ -262,7 +261,7 @@ static int parse_env_file_internal( + if (last_key_whitespace != SIZE_MAX) + key[last_key_whitespace] = 0; + +- r = push(fname, line, key, value, userdata, n_pushed); ++ r = push(fname, line, key, value, userdata); + if (r < 0) + return r; + +@@ -300,8 +299,7 @@ static int check_utf8ness_and_warn( + static int parse_env_file_push( + const char *filename, unsigned line, + const char *key, char *value, +- void *userdata, +- int *n_pushed) { ++ void *userdata) { + + const char *k; + va_list aq, *ap = userdata; +@@ -323,9 +321,6 @@ static int parse_env_file_push( + free(*v); + *v = value; + +- if (n_pushed) +- (*n_pushed)++; +- + return 1; + } + } +@@ -341,16 +336,13 @@ int parse_env_filev( + const char *fname, + va_list ap) { + +- int r, n_pushed = 0; ++ int r; + va_list aq; + + va_copy(aq, ap); +- r = parse_env_file_internal(f, fname, parse_env_file_push, &aq, &n_pushed); ++ r = parse_env_file_internal(f, fname, parse_env_file_push, &aq); + va_end(aq); +- if (r < 0) +- return r; +- +- return n_pushed; ++ return r; + } + + int parse_env_file_sentinel( +@@ -371,8 +363,7 @@ int parse_env_file_sentinel( + static int load_env_file_push( + const char *filename, unsigned line, + const char *key, char *value, +- void *userdata, +- int *n_pushed) { ++ void *userdata) { + char ***m = userdata; + char *p; + int r; +@@ -389,34 +380,28 @@ static int load_env_file_push( + if (r < 0) + return r; + +- if (n_pushed) +- (*n_pushed)++; +- + free(value); + return 0; + } + + int load_env_file(FILE *f, const char *fname, char ***rl) { +- char **m = NULL; ++ _cleanup_strv_free_ char **m = NULL; + int r; + +- r = parse_env_file_internal(f, fname, load_env_file_push, &m, NULL); +- if (r < 0) { +- strv_free(m); ++ r = parse_env_file_internal(f, fname, load_env_file_push, &m); ++ if (r < 0) + return r; +- } + +- *rl = m; ++ *rl = TAKE_PTR(m); + return 0; + } + + static int load_env_file_push_pairs( + const char *filename, unsigned line, + const char *key, char *value, +- void *userdata, +- int *n_pushed) { ++ void *userdata) { ++ + char ***m = ASSERT_PTR(userdata); +- bool added = false; + int r; + + r = check_utf8ness_and_warn(filename, line, key, value); +@@ -427,49 +412,37 @@ static int load_env_file_push_pairs( + for (char **t = *m; t && *t; t += 2) + if (streq(t[0], key)) { + if (value) +- r = free_and_replace(t[1], value); ++ return free_and_replace(t[1], value); + else +- r = free_and_strdup(t+1, ""); +- goto finish; ++ return free_and_strdup(t+1, ""); + } + + r = strv_extend(m, key); + if (r < 0) +- return -ENOMEM; ++ return r; + + if (value) +- r = strv_push(m, value); ++ return strv_push(m, value); + else +- r = strv_extend(m, ""); +- added = true; +- finish: +- if (r < 0) +- return r; +- +- if (n_pushed && added) +- (*n_pushed)++; +- return 0; ++ return strv_extend(m, ""); + } + + int load_env_file_pairs(FILE *f, const char *fname, char ***rl) { +- char **m = NULL; ++ _cleanup_strv_free_ char **m = NULL; + int r; + +- r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m, NULL); +- if (r < 0) { +- strv_free(m); ++ r = parse_env_file_internal(f, fname, load_env_file_push_pairs, &m); ++ if (r < 0) + return r; +- } + +- *rl = m; ++ *rl = TAKE_PTR(m); + return 0; + } + + static int merge_env_file_push( + const char *filename, unsigned line, + const char *key, char *value, +- void *userdata, +- int *n_pushed) { ++ void *userdata) { + + char ***env = userdata; + char *expanded_value; +@@ -498,7 +471,7 @@ static int merge_env_file_push( + + log_debug("%s:%u: setting %s=%s", filename, line, key, value); + +- return load_env_file_push(filename, line, key, value, env, n_pushed); ++ return load_env_file_push(filename, line, key, value, env); + } + + int merge_env_file( +@@ -510,7 +483,7 @@ int merge_env_file( + * plus "extended" substitutions, unlike other exported parsing functions. + */ + +- return parse_env_file_internal(f, fname, merge_env_file_push, env, NULL); ++ return parse_env_file_internal(f, fname, merge_env_file_push, env); + } + + static void write_env_var(FILE *f, const char *v) { +diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c +index 921a30cef7..ab51955e34 100644 +--- a/src/basic/path-lookup.c ++++ b/src/basic/path-lookup.c +@@ -509,7 +509,7 @@ static int get_paths_from_environ(const char *var, char ***paths, bool *append) + } + + int lookup_paths_init( +- LookupPaths *p, ++ LookupPaths *lp, + UnitFileScope scope, + LookupPathsFlags flags, + const char *root_dir) { +@@ -527,7 +527,7 @@ int lookup_paths_init( + _cleanup_strv_free_ char **paths = NULL; + int r; + +- assert(p); ++ assert(lp); + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +@@ -717,7 +717,7 @@ int lookup_paths_init( + if (r < 0) + return -ENOMEM; + +- *p = (LookupPaths) { ++ *lp = (LookupPaths) { + .search_path = strv_uniq(TAKE_PTR(paths)), + + .persistent_config = TAKE_PTR(persistent_config), +@@ -742,41 +742,51 @@ int lookup_paths_init( + return 0; + } + +-void lookup_paths_free(LookupPaths *p) { +- if (!p) ++int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir) { ++ int r; ++ ++ r = lookup_paths_init(lp, scope, flags, root_dir); ++ if (r < 0) ++ return log_error_errno(r, "Failed to initialize unit search paths%s%s: %m", ++ isempty(root_dir) ? "" : " for root directory ", strempty(root_dir)); ++ return r; ++} ++ ++void lookup_paths_free(LookupPaths *lp) { ++ if (!lp) + return; + +- p->search_path = strv_free(p->search_path); ++ lp->search_path = strv_free(lp->search_path); + +- p->persistent_config = mfree(p->persistent_config); +- p->runtime_config = mfree(p->runtime_config); ++ lp->persistent_config = mfree(lp->persistent_config); ++ lp->runtime_config = mfree(lp->runtime_config); + +- p->persistent_attached = mfree(p->persistent_attached); +- p->runtime_attached = mfree(p->runtime_attached); ++ lp->persistent_attached = mfree(lp->persistent_attached); ++ lp->runtime_attached = mfree(lp->runtime_attached); + +- p->generator = mfree(p->generator); +- p->generator_early = mfree(p->generator_early); +- p->generator_late = mfree(p->generator_late); ++ lp->generator = mfree(lp->generator); ++ lp->generator_early = mfree(lp->generator_early); ++ lp->generator_late = mfree(lp->generator_late); + +- p->transient = mfree(p->transient); ++ lp->transient = mfree(lp->transient); + +- p->persistent_control = mfree(p->persistent_control); +- p->runtime_control = mfree(p->runtime_control); ++ lp->persistent_control = mfree(lp->persistent_control); ++ lp->runtime_control = mfree(lp->runtime_control); + +- p->root_dir = mfree(p->root_dir); +- p->temporary_dir = mfree(p->temporary_dir); ++ lp->root_dir = mfree(lp->root_dir); ++ lp->temporary_dir = mfree(lp->temporary_dir); + } + +-void lookup_paths_log(LookupPaths *p) { +- assert(p); ++void lookup_paths_log(LookupPaths *lp) { ++ assert(lp); + +- if (strv_isempty(p->search_path)) { ++ if (strv_isempty(lp->search_path)) { + log_debug("Ignoring unit files."); +- p->search_path = strv_free(p->search_path); ++ lp->search_path = strv_free(lp->search_path); + } else { + _cleanup_free_ char *t = NULL; + +- t = strv_join(p->search_path, "\n\t"); ++ t = strv_join(lp->search_path, "\n\t"); + log_debug("Looking for unit files in (higher priority first):\n\t%s", strna(t)); + } + } +diff --git a/src/basic/path-lookup.h b/src/basic/path-lookup.h +index af85dc7b4f..1f0e5ea271 100644 +--- a/src/basic/path-lookup.h ++++ b/src/basic/path-lookup.h +@@ -54,7 +54,8 @@ struct LookupPaths { + char *temporary_dir; + }; + +-int lookup_paths_init(LookupPaths *p, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); ++int lookup_paths_init(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); ++int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); + + int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs); + int xdg_user_runtime_dir(char **ret, const char *suffix); +diff --git a/src/core/manager.c b/src/core/manager.c +index 12c49e7fca..22bd0866c5 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -1756,11 +1756,11 @@ int manager_startup(Manager *m, FILE *serialization, FDSet *fds, const char *roo + + /* If we are running in test mode, we still want to run the generators, + * but we should not touch the real generator directories. */ +- r = lookup_paths_init(&m->lookup_paths, m->unit_file_scope, +- MANAGER_IS_TEST_RUN(m) ? LOOKUP_PATHS_TEMPORARY_GENERATED : 0, +- root); ++ r = lookup_paths_init_or_warn(&m->lookup_paths, m->unit_file_scope, ++ MANAGER_IS_TEST_RUN(m) ? LOOKUP_PATHS_TEMPORARY_GENERATED : 0, ++ root); + if (r < 0) +- return log_error_errno(r, "Failed to initialize path lookup table: %m"); ++ return r; + + dual_timestamp_get(m->timestamps + manager_timestamp_initrd_mangle(MANAGER_TIMESTAMP_GENERATORS_START)); + r = manager_run_environment_generators(m); +@@ -3302,9 +3302,9 @@ int manager_reload(Manager *m) { + m->uid_refs = hashmap_free(m->uid_refs); + m->gid_refs = hashmap_free(m->gid_refs); + +- r = lookup_paths_init(&m->lookup_paths, m->unit_file_scope, 0, NULL); ++ r = lookup_paths_init_or_warn(&m->lookup_paths, m->unit_file_scope, 0, NULL); + if (r < 0) +- log_warning_errno(r, "Failed to initialize path lookup table, ignoring: %m"); ++ return r; + + (void) manager_run_environment_generators(m); + (void) manager_run_generators(m); +diff --git a/src/shared/condition.c b/src/shared/condition.c +index 68fbbf643a..21f3714eba 100644 +--- a/src/shared/condition.c ++++ b/src/shared/condition.c +@@ -787,7 +787,8 @@ static int condition_test_needs_update(Condition *c, char **env) { + if (r < 0) { + log_debug_errno(r, "Failed to parse timestamp file '%s', using mtime: %m", p); + return true; +- } else if (r == 0) { ++ } ++ if (isempty(timestamp_str)) { + log_debug("No data in timestamp file '%s', using mtime.", p); + return true; + } +diff --git a/src/shared/install.c b/src/shared/install.c +index a541d32fb7..f1a8b7eb9b 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2615,7 +2615,7 @@ int unit_file_enable( + assert(scope >= 0); + assert(scope < _UNIT_FILE_SCOPE_MAX); + +- r = lookup_paths_init(&lp, scope, 0, root_dir); ++ r = lookup_paths_init_or_warn(&lp, scope, 0, root_dir); + if (r < 0) + return r; + +diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c +index a97aa7be4c..92abd15636 100644 +--- a/src/systemctl/systemctl-edit.c ++++ b/src/systemctl/systemctl-edit.c +@@ -38,9 +38,9 @@ int cat(int argc, char *argv[], void *userdata) { + if (arg_transport != BUS_TRANSPORT_LOCAL) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot remotely cat units."); + +- r = lookup_paths_init(&lp, arg_scope, 0, arg_root); ++ r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root); + if (r < 0) +- return log_error_errno(r, "Failed to determine unit paths: %m"); ++ return r; + + r = acquire_bus(BUS_MANAGER, &bus); + if (r < 0) +@@ -511,9 +511,9 @@ int edit(int argc, char *argv[], void *userdata) { + if (arg_transport != BUS_TRANSPORT_LOCAL) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Cannot edit units remotely."); + +- r = lookup_paths_init(&lp, arg_scope, 0, arg_root); ++ r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root); + if (r < 0) +- return log_error_errno(r, "Failed to determine unit paths: %m"); ++ return r; + + r = mac_selinux_init(); + if (r < 0) +diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c +index dcbe2c7302..7860f3dc6c 100644 +--- a/src/systemctl/systemctl-enable.c ++++ b/src/systemctl/systemctl-enable.c +@@ -142,7 +142,7 @@ int enable_unit(int argc, char *argv[], void *userdata) { + char **name; + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + +- r = lookup_paths_init(&lp, arg_scope, 0, arg_root); ++ r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root); + if (r < 0) + return r; + +diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c +index 017dba2034..c6e8defd1b 100644 +--- a/src/systemctl/systemctl-sysv-compat.c ++++ b/src/systemctl/systemctl-sysv-compat.c +@@ -128,7 +128,7 @@ int enable_sysv_units(const char *verb, char **args) { + "is-enabled")) + return 0; + +- r = lookup_paths_init(&paths, arg_scope, LOOKUP_PATHS_EXCLUDE_GENERATED, arg_root); ++ r = lookup_paths_init_or_warn(&paths, arg_scope, LOOKUP_PATHS_EXCLUDE_GENERATED, arg_root); + if (r < 0) + return r; + +diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c +index e9976540b5..bb74b486be 100644 +--- a/src/sysv-generator/sysv-generator.c ++++ b/src/sysv-generator/sysv-generator.c +@@ -894,9 +894,9 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) + + assert_se(arg_dest = dest_late); + +- r = lookup_paths_init(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL); ++ r = lookup_paths_init_or_warn(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL); + if (r < 0) +- return log_error_errno(r, "Failed to find lookup paths: %m"); ++ return r; + + all_services = hashmap_new(&string_hash_ops); + if (!all_services) +diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c +index 4f91d94709..238ae8f586 100644 +--- a/src/test/test-fileio.c ++++ b/src/test/test-fileio.c +@@ -110,8 +110,7 @@ TEST(parse_env_file) { + "eleven", &eleven, + "twelve", &twelve, + "thirteen", &thirteen); +- +- assert_se(r >= 0); ++ assert_se(r == 0); + + log_info("one=[%s]", strna(one)); + log_info("two=[%s]", strna(two)); +diff --git a/src/test/test-os-util.c b/src/test/test-os-util.c +index d6336c53e9..2cee6470c4 100644 +--- a/src/test/test-os-util.c ++++ b/src/test/test-os-util.c +@@ -18,7 +18,7 @@ TEST(path_is_os_tree) { + TEST(parse_os_release) { + /* Let's assume that we're running in a valid system, so os-release is available */ + _cleanup_free_ char *id = NULL, *id2 = NULL, *name = NULL, *foobar = NULL; +- assert_se(parse_os_release(NULL, "ID", &id) == 1); ++ assert_se(parse_os_release(NULL, "ID", &id) == 0); + log_info("ID: %s", id); + + assert_se(setenv("SYSTEMD_OS_RELEASE", "/dev/null", 1) == 0); +@@ -31,7 +31,7 @@ TEST(parse_os_release) { + "NAME=the-name") == 0); + + assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile, 1) == 0); +- assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 2); ++ assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0); + log_info("ID: %s NAME: %s", id, name); + assert_se(streq(id, "the-id")); + assert_se(streq(name, "the-name")); +@@ -43,8 +43,7 @@ TEST(parse_os_release) { + "NAME='the-name'") == 0); + + assert_se(setenv("SYSTEMD_OS_RELEASE", tmpfile2, 1) == 0); +- // FIXME: we return 3, which means that the return value is useless in face of repeats +- assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 3); ++ assert_se(parse_os_release(NULL, "ID", &id, "NAME", &name) == 0); + log_info("ID: %s NAME: %s", id, name); + assert_se(streq(id, "the-id")); + assert_se(streq(name, "the-name")); diff --git a/SOURCES/0178-shared-install-also-check-for-self-aliases-during-in.patch b/SOURCES/0178-shared-install-also-check-for-self-aliases-during-in.patch new file mode 100644 index 0000000..f97f386 --- /dev/null +++ b/SOURCES/0178-shared-install-also-check-for-self-aliases-during-in.patch @@ -0,0 +1,134 @@ +From c892aaa100fa04f877c7bf66e3cce846a7aa834c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Mar 2022 20:26:59 +0100 +Subject: [PATCH] shared/install: also check for self-aliases during + installation and ignore them + +We had a check that was done in unit_file_resolve_symlink(). Let's move +the check to unit_validate_alias_symlink_or_warn(), which makes it available +to the code in install.c. + +With this, unit_file_resolve_symlink() behaves almost the same. The warning +about "suspicious symlink" is done a bit later. I think this should be OK. + +(cherry picked from commit f663e6468ff6f667a67fa1a0f9ca5c4962d4c605) + +Related: #2082131 +--- + src/basic/unit-file.c | 26 ++++++++++---------------- + src/shared/install.c | 9 +++++++++ + test/test-systemctl-enable.sh | 6 ++---- + 3 files changed, 21 insertions(+), 20 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 105dacc1b2..142ba006f8 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -82,7 +82,8 @@ int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, con + * + * -EINVAL is returned if the something is wrong with the source filename or the source unit type is + * not allowed to symlink, +- * -EXDEV if the target filename is not a valid unit name or doesn't match the source. ++ * -EXDEV if the target filename is not a valid unit name or doesn't match the source, ++ * -ELOOP for an alias to self. + */ + + src = basename(filename); +@@ -111,6 +112,11 @@ int unit_validate_alias_symlink_or_warn(int log_level, const char *filename, con + + /* dst checks */ + ++ if (streq(src, dst)) ++ return log_debug_errno(SYNTHETIC_ERRNO(ELOOP), ++ "%s: unit self-alias: %s → %s, ignoring.", ++ filename, src, dst); ++ + dst_name_type = unit_name_to_instance(dst, &dst_instance); + if (dst_name_type < 0) + return log_full_errno(log_level, dst_name_type == -EINVAL ? SYNTHETIC_ERRNO(EXDEV) : dst_name_type, +@@ -348,24 +354,12 @@ int unit_file_resolve_symlink( + if (r < 0) + return r; + +- bool self_alias = streq(target_name, filename); +- +- if (is_path(tail)) +- log_full(self_alias ? LOG_DEBUG : LOG_WARNING, +- "Suspicious symlink %s/%s→%s, treating as alias.", +- dir, filename, simplified); +- + r = unit_validate_alias_symlink_or_warn(LOG_NOTICE, filename, simplified); + if (r < 0) + return r; +- +- if (self_alias && !resolve_destination_target) +- /* A self-alias that has no effect when loading, let's just ignore it. */ +- return log_debug_errno(SYNTHETIC_ERRNO(ELOOP), +- "Unit file self-alias: %s/%s → %s, ignoring.", +- dir, filename, target_name); +- +- log_debug("Unit file alias: %s/%s → %s", dir, filename, target_name); ++ if (is_path(tail)) ++ log_warning("Suspicious symlink %s/%s→%s, treating as alias.", ++ dir, filename, simplified); + + dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name); + } +diff --git a/src/shared/install.c b/src/shared/install.c +index f1a8b7eb9b..459e8a6951 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1702,6 +1702,11 @@ int unit_file_verify_alias( + * ret_dst is set in cases where "instance propagation" happens, i.e. when the instance part is + * inserted into dst. It is not normally set, even on success, so that the caller can easily + * distinguish the case where instance propagation occurred. ++ * ++ * Returns: ++ * -EXDEV when the alias doesn't match the unit, ++ * -EUCLEAN when the name is invalid, ++ * -ELOOP when the alias it to the unit itself. + */ + + const char *path_alias = strrchr(dst, '/'); +@@ -1767,6 +1772,8 @@ int unit_file_verify_alias( + } + + r = unit_validate_alias_symlink_or_warn(LOG_DEBUG, dst_updated ?: dst, info->name); ++ if (r == -ELOOP) /* -ELOOP means self-alias, which we (quietly) ignore */ ++ return r; + if (r < 0) { + unit_file_changes_add(changes, n_changes, + r == -EINVAL ? -EXDEV : r, +@@ -1807,6 +1814,8 @@ static int install_info_symlink_alias( + } + + q = unit_file_verify_alias(info, dst, &dst_updated, changes, n_changes); ++ if (q == -ELOOP) ++ continue; + if (q < 0) { + r = r < 0 ? r : q; + continue; +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 32bc6e5ef7..4117436462 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -328,8 +328,7 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" + test ! -e "$root/etc/systemd/system/link4.service" + cat >"$root/etc/systemd/system/link4.service" <"$root/etc/systemd/system/link5.service" < +Date: Sun, 13 Feb 2022 15:16:05 +0100 +Subject: [PATCH] docs: Correct WantedBy= regarding template units + +(cherry picked from commit f55fe53ffce351bb55b6190cf36511c37f99d766) + +Related: #2082131 +--- + man/systemd.unit.xml | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 4ba602b5ad..2e6261c1ed 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -1922,9 +1922,9 @@ + WantedBy=foo.service in a service + bar.service is mostly equivalent to + Alias=foo.service.wants/bar.service in the +- same file. In case of template units, systemctl +- enable must be called with an instance name, and +- this instance will be added to the ++ same file. In case of template units listing non template units, ++ systemctl enable must be called with an ++ instance name, and this instance will be added to the + .wants/ or + .requires/ list of the listed unit. E.g. + WantedBy=getty.target in a service diff --git a/SOURCES/0180-man-fix-invalid-description-of-template-handling-in-.patch b/SOURCES/0180-man-fix-invalid-description-of-template-handling-in-.patch new file mode 100644 index 0000000..2fc62e6 --- /dev/null +++ b/SOURCES/0180-man-fix-invalid-description-of-template-handling-in-.patch @@ -0,0 +1,152 @@ +From 842c3bade0b593e5c4eabbe1c18dfab503683cc6 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 10 Mar 2022 21:33:25 +0100 +Subject: [PATCH] man: fix invalid description of template handling in + WantedBy= + +We don't need to talk about Alias=. The approach of using Alias= to enable +units is still supported, but hasn't been advertised as the way to do thing +for many years. Using it as an explanation is just confusing. + +Also, the description of templated units did not take DefaultInstance= +into account. It is updated and extended. + +(cherry picked from commit 17a2679e9925c9ec3c5764d01def92c5627973e4) + +Related: #2082131 +--- + man/systemd.unit.xml | 53 +++++++++++++++++------------------ + test/test-systemctl-enable.sh | 49 ++++++++++++++++++++++++++++++++ + 2 files changed, 74 insertions(+), 28 deletions(-) + +diff --git a/man/systemd.unit.xml b/man/systemd.unit.xml +index 2e6261c1ed..caebaecfdc 100644 +--- a/man/systemd.unit.xml ++++ b/man/systemd.unit.xml +@@ -1906,34 +1906,31 @@ + WantedBy= + RequiredBy= + +- This option may be used more than once, or a +- space-separated list of unit names may be given. A symbolic +- link is created in the .wants/ or +- .requires/ directory of each of the +- listed units when this unit is installed by systemctl +- enable. This has the effect that a dependency of +- type Wants= or Requires= +- is added from the listed unit to the current unit. The primary +- result is that the current unit will be started when the +- listed unit is started. See the description of +- Wants= and Requires= in +- the [Unit] section for details. +- +- WantedBy=foo.service in a service +- bar.service is mostly equivalent to +- Alias=foo.service.wants/bar.service in the +- same file. In case of template units listing non template units, +- systemctl enable must be called with an +- instance name, and this instance will be added to the +- .wants/ or +- .requires/ list of the listed unit. E.g. +- WantedBy=getty.target in a service +- getty@.service will result in +- systemctl enable getty@tty2.service +- creating a +- getty.target.wants/getty@tty2.service +- link to getty@.service. +- ++ This option may be used more than once, or a space-separated list of unit names may ++ be given. A symbolic link is created in the .wants/ or ++ .requires/ directory of each of the listed units when this unit is installed by ++ systemctl enable. This has the effect of a dependency of type ++ Wants= or Requires= being added from the listed unit to the ++ current unit. The primary result is that the current unit will be started when the listed unit is ++ started, see the description of Wants= and Requires= in the ++ [Unit] section for details. ++ ++ In case of template units listing non template units, the listing unit must have ++ DefaultInstance= set, or systemctl enable must be called with ++ an instance name. The instance (default or specified) will be added to the ++ .wants/ or .requires/ list of the listed unit. For example, ++ WantedBy=getty.target in a service getty@.service will result ++ in systemctl enable getty@tty2.service creating a ++ getty.target.wants/getty@tty2.service link to ++ getty@.service. This also applies to listing specific instances of templated ++ units: this specific instance will gain the dependency. A template unit may also list a template ++ unit, in which case a generic dependency will be added where each instance of the listing unit will ++ have a dependency on an instance of the listed template with the same instance value. For example, ++ WantedBy=container@.target in a service monitor@.service will ++ result in systemctl enable monitor@.service creating a ++ container@.target.wants/monitor@.service link to ++ monitor@.service, which applies to all instances of ++ container@.target. + + + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 4117436462..3aa61222a8 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -324,6 +324,31 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@333.service" + test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" + test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" + ++: -------template enablement for another template------------- ++cat >"$root/etc/systemd/system/templ2@.service" <"$root/etc/systemd/system/link4.service" <&2; exit 1; } + ++: -------specifiers in WantedBy------------------------------- ++# We don't need to repeat all the tests. Let's do a basic check that specifier ++# expansion is performed. ++ ++cat >"$root/etc/systemd/system/some-some-link7.socket" < +Date: Wed, 2 Mar 2022 17:19:56 +0100 +Subject: [PATCH] shared/install: drop unnecessary casts + +The compiler coerces to bool for us, no need to do it explicitly. + +(cherry picked from commit d3e85c9c81b1dd55eed2a33e8c25cef38db665f9) + +Related: #2082131 +--- + src/shared/install.c | 9 ++++----- + 1 file changed, 4 insertions(+), 5 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 459e8a6951..f1ee3c2716 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2178,7 +2178,7 @@ int unit_file_mask( + if (!path) + return -ENOMEM; + +- q = create_symlink(&lp, "/dev/null", path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); ++ q = create_symlink(&lp, "/dev/null", path, flags & UNIT_FILE_FORCE, changes, n_changes); + if (q < 0 && r >= 0) + r = q; + } +@@ -2199,7 +2199,6 @@ int unit_file_unmask( + _cleanup_strv_free_ char **todo = NULL; + const char *config_path; + size_t n_todo = 0; +- bool dry_run; + char **i; + int r, q; + +@@ -2214,7 +2213,7 @@ int unit_file_unmask( + if (!config_path) + return -ENXIO; + +- dry_run = !!(flags & UNIT_FILE_DRY_RUN); ++ bool dry_run = flags & UNIT_FILE_DRY_RUN; + + STRV_FOREACH(i, files) { + _cleanup_free_ char *path = NULL; +@@ -2354,7 +2353,7 @@ int unit_file_link( + if (!new_path) + return -ENOMEM; + +- q = create_symlink(&lp, *i, new_path, !!(flags & UNIT_FILE_FORCE), changes, n_changes); ++ q = create_symlink(&lp, *i, new_path, flags & UNIT_FILE_FORCE, changes, n_changes); + if (q < 0 && r >= 0) + r = q; + } +@@ -2689,7 +2688,7 @@ int unit_file_disable( + if (r < 0) + return r; + +- return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, !!(flags & UNIT_FILE_DRY_RUN), changes, n_changes); ++ return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes); + } + + int unit_file_reenable( diff --git a/SOURCES/0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch b/SOURCES/0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch new file mode 100644 index 0000000..7679d6c --- /dev/null +++ b/SOURCES/0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch @@ -0,0 +1,5179 @@ +From 86eae9a1dade5ba15990196b1459e1394bf0a632 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Wed, 16 Mar 2022 22:32:23 +0900 +Subject: [PATCH] strv: make iterator in STRV_FOREACH() declaread in the loop + +This also avoids multiple evaluations in STRV_FOREACH_BACKWARDS() + +(cherry picked from commit de010b0b2e50cf0b3837ce350b116bc92605f67a) + +Related: #2082131 +--- + src/activate/activate.c | 3 -- + src/analyze/analyze-condition.c | 2 -- + src/analyze/analyze-elf.c | 1 - + src/analyze/analyze-security.c | 7 +--- + src/analyze/analyze-verify.c | 3 -- + src/analyze/analyze.c | 27 ++------------ + src/ask-password/ask-password.c | 1 - + src/basic/conf-files.c | 9 ++--- + src/basic/env-file.c | 1 - + src/basic/env-util.c | 19 +++------- + src/basic/escape.c | 1 - + src/basic/fileio.c | 2 -- + src/basic/hashmap.c | 1 - + src/basic/ordered-set.c | 1 - + src/basic/os-util.c | 1 - + src/basic/path-lookup.c | 1 - + src/basic/path-util.c | 20 ++++------- + src/basic/process-util.c | 1 - + src/basic/strv.c | 28 ++------------- + src/basic/strv.h | 35 ++++++++++++------- + src/basic/unit-file.c | 8 ++--- + src/binfmt/binfmt.c | 1 - + src/boot/bless-boot.c | 2 -- + src/boot/bootctl.c | 2 -- + src/busctl/busctl.c | 5 +-- + src/cgls/cgls.c | 1 - + src/core/bpf-firewall.c | 2 -- + src/core/cgroup.c | 1 - + src/core/dbus-cgroup.c | 2 -- + src/core/dbus-execute.c | 26 +++----------- + src/core/dbus-manager.c | 1 - + src/core/dbus-socket.c | 4 +-- + src/core/dbus-unit.c | 5 +-- + src/core/device.c | 16 +++------ + src/core/execute.c | 16 +++------ + src/core/load-dropin.c | 2 -- + src/core/load-fragment.c | 1 - + src/core/main.c | 1 - + src/core/manager.c | 1 - + src/core/namespace.c | 6 ---- + src/core/service.c | 2 -- + src/core/socket.c | 4 --- + src/core/transaction.c | 3 +- + src/core/unit-serialize.c | 2 +- + src/core/unit.c | 6 ---- + src/coredump/coredumpctl.c | 1 - + src/creds/creds.c | 1 - + src/cryptenroll/cryptenroll.c | 1 - + src/cryptsetup/cryptsetup-keyfile.c | 1 - + src/cryptsetup/cryptsetup.c | 4 +-- + src/debug-generator/debug-generator.c | 2 -- + src/delta/delta.c | 2 -- + src/dissect/dissect.c | 3 -- + .../environment-d-generator.c | 1 - + src/escape/escape.c | 1 - + src/fstab-generator/fstab-generator.c | 3 -- + src/home/homectl.c | 11 ++---- + src/home/homed-manager-bus.c | 1 - + src/home/homed-manager.c | 1 - + src/home/homed-varlink.c | 6 +--- + src/home/homework-cifs.c | 1 - + src/home/homework-fscrypt.c | 3 -- + src/home/homework-luks.c | 3 -- + src/home/homework-pkcs11.c | 1 - + src/home/homework.c | 13 ++----- + src/home/user-record-pwquality.c | 3 +- + src/home/user-record-util.c | 3 -- + src/id128/id128.c | 1 - + src/journal-remote/journal-remote-main.c | 1 - + src/journal-remote/microhttpd-util.c | 5 ++- + src/journal/journalctl.c | 5 +-- + src/libsystemd-network/dhcp-option.c | 1 - + src/libsystemd-network/dhcp6-option.c | 2 -- + src/libsystemd-network/sd-dhcp-client.c | 1 - + src/libsystemd-network/sd-dhcp6-client.c | 2 -- + src/libsystemd-network/sd-radv.c | 1 - + src/libsystemd/sd-bus/bus-dump.c | 4 --- + src/libsystemd/sd-bus/bus-match.c | 6 ---- + src/libsystemd/sd-bus/bus-message.c | 1 - + src/libsystemd/sd-bus/bus-objects.c | 4 +-- + src/libsystemd/sd-bus/test-bus-address.c | 1 - + src/libsystemd/sd-device/device-private.c | 1 - + src/libsystemd/sd-journal/catalog.c | 2 -- + src/libsystemd/sd-journal/sd-journal.c | 1 - + src/libsystemd/sd-netlink/netlink-message.c | 1 - + src/libsystemd/sd-path/sd-path.c | 2 +- + src/locale/localectl.c | 2 -- + src/locale/localed.c | 1 - + src/login/loginctl.c | 2 -- + src/login/logind-dbus.c | 1 - + src/login/pam_systemd.c | 1 - + src/modules-load/modules-load.c | 1 - + src/network/generator/network-generator.c | 1 - + src/network/netdev/netdev.c | 1 - + src/network/networkctl.c | 1 - + src/network/networkd-dhcp-server.c | 2 -- + src/network/networkd-json.c | 3 +- + src/network/networkd-link-bus.c | 2 -- + src/network/networkd-link.c | 3 -- + src/network/networkd-ndisc.c | 1 - + src/network/networkd-network.c | 1 - + src/nspawn/nspawn-bind-user.c | 1 - + src/nspawn/nspawn-mount.c | 4 --- + src/nspawn/nspawn-network.c | 5 --- + src/nspawn/nspawn-oci.c | 1 - + src/nspawn/nspawn-seccomp.c | 1 - + src/nspawn/nspawn.c | 1 - + src/nss-systemd/userdb-glue.c | 2 +- + src/partition/repart.c | 3 -- + src/portable/portable.c | 7 ---- + src/portable/portablectl.c | 2 -- + src/resolve/resolvectl.c | 9 +---- + src/resolve/resolved-dns-trust-anchor.c | 1 - + src/resolve/resolved-dnssd.c | 1 - + src/resolve/resolved-etc-hosts.c | 3 -- + src/resolve/resolved-link-bus.c | 1 - + src/resolve/resolved-link.c | 2 -- + src/run-generator/run-generator.c | 1 - + src/shared/acl-util.c | 1 - + src/shared/bootspec.c | 4 --- + src/shared/bus-polkit.c | 1 - + src/shared/bus-unit-util.c | 3 -- + src/shared/bus-util.c | 2 -- + src/shared/cgroup-setup.c | 1 - + src/shared/condition.c | 1 - + src/shared/conf-parser.c | 1 - + src/shared/discover-image.c | 6 +--- + src/shared/dissect-image.c | 1 - + src/shared/dropin.c | 1 - + src/shared/exec-util.c | 4 +-- + src/shared/format-table.c | 1 - + src/shared/hwdb-util.c | 3 +- + src/shared/install.c | 28 +++------------ + src/shared/libcrypt-util.c | 1 - + src/shared/libfido2-util.c | 3 -- + src/shared/mount-setup.c | 3 -- + src/shared/mount-util.c | 1 - + src/shared/net-condition.c | 4 --- + src/shared/nscd-flush.c | 1 - + src/shared/pkcs11-util.c | 2 +- + src/shared/pretty-print.c | 4 +-- + src/shared/seccomp-util.c | 1 - + src/shared/serialize.c | 1 - + src/shared/tests.c | 1 - + src/shared/user-record-show.c | 13 ++----- + src/sleep/sleep.c | 2 -- + src/sysctl/sysctl.c | 4 --- + src/sysext/sysext.c | 6 ---- + src/systemctl/systemctl-cancel-job.c | 1 - + src/systemctl/systemctl-clean-or-freeze.c | 1 - + src/systemctl/systemctl-edit.c | 6 +--- + src/systemctl/systemctl-enable.c | 3 -- + src/systemctl/systemctl-is-active.c | 1 - + src/systemctl/systemctl-is-enabled.c | 1 - + src/systemctl/systemctl-kill.c | 2 +- + src/systemctl/systemctl-list-dependencies.c | 3 +- + src/systemctl/systemctl-list-machines.c | 1 - + src/systemctl/systemctl-list-units.c | 1 - + src/systemctl/systemctl-logind.c | 2 -- + src/systemctl/systemctl-reset-failed.c | 1 - + src/systemctl/systemctl-set-environment.c | 3 -- + src/systemctl/systemctl-set-property.c | 1 - + src/systemctl/systemctl-show.c | 7 ---- + src/systemctl/systemctl-start-unit.c | 6 +--- + src/systemctl/systemctl-util.c | 7 +--- + src/sysusers/sysusers.c | 6 ---- + src/sysv-generator/sysv-generator.c | 3 -- + src/test/test-bpf-foreign-programs.c | 2 -- + src/test/test-bpf-lsm.c | 1 - + src/test/test-copy.c | 1 - + src/test/test-env-util.c | 1 - + src/test/test-exec-util.c | 4 +-- + src/test/test-execute.c | 2 -- + src/test/test-fileio.c | 5 --- + src/test/test-fs-util.c | 1 - + src/test/test-kbd-util.c | 1 - + src/test/test-locale-util.c | 2 -- + src/test/test-nss-hosts.c | 5 --- + src/test/test-nss-users.c | 2 -- + src/test/test-path-lookup.c | 3 +- + src/test/test-path-util.c | 1 - + src/test/test-path.c | 1 - + src/test/test-sd-path.c | 1 - + src/test/test-socket-bind.c | 3 +- + src/test/test-string-util.c | 1 - + src/test/test-strv.c | 5 --- + src/test/test-sysctl-util.c | 1 - + src/test/test-time-util.c | 1 - + src/test/test-unit-file.c | 1 - + src/timedate/timedated.c | 1 - + src/timesync/timesyncd-manager.c | 1 - + src/tmpfiles/tmpfiles.c | 14 ++------ + .../tty-ask-password-agent.c | 5 +-- + src/udev/net/link-config.c | 2 -- + src/udev/udev-event.c | 1 - + src/udev/udev-rules.c | 4 +-- + src/udev/udevadm-info.c | 1 - + src/userdb/userdbctl.c | 24 ++++--------- + .../xdg-autostart-condition.c | 1 - + .../xdg-autostart-generator.c | 1 - + 200 files changed, 110 insertions(+), 611 deletions(-) + +diff --git a/src/activate/activate.c b/src/activate/activate.c +index b625d97f2e..8ee7a3ec60 100644 +--- a/src/activate/activate.c ++++ b/src/activate/activate.c +@@ -49,7 +49,6 @@ static int add_epoll(int epoll_fd, int fd) { + } + + static int open_sockets(int *epoll_fd, bool accept) { +- char **address; + int n, fd, r, count = 0; + + n = sd_listen_fds(true); +@@ -124,7 +123,6 @@ static int open_sockets(int *epoll_fd, bool accept) { + + static int exec_process(const char *name, char **argv, int start_fd, size_t n_fds) { + _cleanup_strv_free_ char **envp = NULL; +- char **s; + int r; + + if (arg_inetd && n_fds != 1) +@@ -389,7 +387,6 @@ static int parse_argv(int argc, char *argv[]) { + + case ARG_FDNAME: { + _cleanup_strv_free_ char **names = NULL; +- char **s; + + names = strv_split(optarg, ":"); + if (!names) +diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c +index f57bb27b9a..a7ad085f46 100644 +--- a/src/analyze/analyze-condition.c ++++ b/src/analyze/analyze-condition.c +@@ -113,8 +113,6 @@ int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const + if (r < 0) + return r; + } else { +- char **line; +- + r = unit_new_for_name(m, sizeof(Service), "test.service", &u); + if (r < 0) + return log_error_errno(r, "Failed to create test.service: %m"); +diff --git a/src/analyze/analyze-elf.c b/src/analyze/analyze-elf.c +index 741cd20f99..a0aa97da69 100644 +--- a/src/analyze/analyze-elf.c ++++ b/src/analyze/analyze-elf.c +@@ -11,7 +11,6 @@ + #include "strv.h" + + int analyze_elf(char **filenames, JsonFormatFlags json_flags) { +- char **filename; + int r; + + STRV_FOREACH(filename, filenames) { +diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c +index 2691dc2c86..d8ccbf8c54 100644 +--- a/src/analyze/analyze-security.c ++++ b/src/analyze/analyze-security.c +@@ -2663,7 +2663,6 @@ static int offline_security_checks(char **filenames, + _cleanup_free_ char *var = NULL; + int r, k; + size_t count = 0; +- char **filename; + + if (strv_isempty(filenames)) + return 0; +@@ -2786,7 +2785,6 @@ int analyze_security(sd_bus *bus, + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; + _cleanup_strv_free_ char **list = NULL; + size_t n = 0; +- char **i; + + r = sd_bus_call_method( + bus, +@@ -2838,9 +2836,7 @@ int analyze_security(sd_bus *bus, + ret = r; + } + +- } else { +- char **i; +- ++ } else + STRV_FOREACH(i, units) { + _cleanup_free_ char *mangled = NULL, *instance = NULL; + const char *name; +@@ -2872,7 +2868,6 @@ int analyze_security(sd_bus *bus, + if (r < 0 && ret >= 0) + ret = r; + } +- } + + if (overview_table) { + if (!FLAGS_SET(flags, ANALYZE_SECURITY_SHORT)) { +diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c +index 943a1f27de..39eb5cf93b 100644 +--- a/src/analyze/analyze-verify.c ++++ b/src/analyze/analyze-verify.c +@@ -75,7 +75,6 @@ int verify_prepare_filename(const char *filename, char **ret) { + + int verify_generate_path(char **var, char **filenames) { + const char *old; +- char **filename; + + _cleanup_strv_free_ char **ans = NULL; + int r; +@@ -184,7 +183,6 @@ static int verify_executables(Unit *u, const char *root) { + } + + static int verify_documentation(Unit *u, bool check_man) { +- char **p; + int r = 0, k; + + STRV_FOREACH(p, u->documentation) { +@@ -258,7 +256,6 @@ int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run + Unit *units[strv_length(filenames)]; + _cleanup_free_ char *var = NULL; + int r, k, i, count = 0; +- char **filename; + + if (strv_isempty(filenames)) + return 0; +diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c +index a1908ff442..846acf31d3 100644 +--- a/src/analyze/analyze.c ++++ b/src/analyze/analyze.c +@@ -239,7 +239,6 @@ static int compare_unit_start(const UnitTimes *a, const UnitTimes *b) { + + static int process_aliases(char *argv[], char *tempdir, char ***ret) { + _cleanup_strv_free_ char **filenames = NULL; +- char **filename; + int r; + + assert(argv); +@@ -961,7 +960,6 @@ static bool times_in_range(const UnitTimes *times, const BootTimes *boot) { + + static int list_dependencies_one(sd_bus *bus, const char *name, unsigned level, char ***units, unsigned branches) { + _cleanup_strv_free_ char **deps = NULL; +- char **c; + int r; + usec_t service_longest = 0; + int to_print = 0; +@@ -1111,7 +1109,6 @@ static int analyze_critical_chain(int argc, char *argv[], void *userdata) { + "The time the unit took to start is printed after the \"+\" character.\n"); + + if (argc > 1) { +- char **name; + STRV_FOREACH(name, strv_skip(argv, 1)) + list_dependencies(bus, *name); + } else +@@ -1207,7 +1204,6 @@ static int graph_one_property( + char *to_patterns[]) { + + _cleanup_strv_free_ char **units = NULL; +- char **unit; + int r; + bool match_patterns; + +@@ -1273,7 +1269,6 @@ static int graph_one(sd_bus *bus, const UnitInfo *u, char *patterns[], char *fro + + static int expand_patterns(sd_bus *bus, char **patterns, char ***ret) { + _cleanup_strv_free_ char **expanded_patterns = NULL; +- char **pattern; + int r; + + STRV_FOREACH(pattern, patterns) { +@@ -1427,7 +1422,7 @@ static int dump(int argc, char *argv[], void *userdata) { + } + + static int cat_config(int argc, char *argv[], void *userdata) { +- char **arg, **list; ++ char **list; + int r; + + pager_open(arg_pager_flags); +@@ -1476,7 +1471,6 @@ static int verb_log_control(int argc, char *argv[], void *userdata) { + } + + static bool strv_fnmatch_strv_or_empty(char* const* patterns, char **strv, int flags) { +- char **s; + STRV_FOREACH(s, strv) + if (strv_fnmatch_or_empty(patterns, *s, flags)) + return true; +@@ -1524,7 +1518,6 @@ static int do_unit_files(int argc, char *argv[], void *userdata) { + static int dump_unit_paths(int argc, char *argv[], void *userdata) { + _cleanup_(lookup_paths_free) LookupPaths paths = {}; + int r; +- char **p; + + r = lookup_paths_init(&paths, arg_scope, 0, NULL); + if (r < 0) +@@ -1737,7 +1730,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) { + + if (!set_isempty(known)) { + _cleanup_free_ char **l = NULL; +- char **syscall; + + printf("\n" + "# %sUngrouped System Calls%s (known but not included in any of the groups except @known):\n", +@@ -1760,7 +1752,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) { + log_notice_errno(k, "# Not showing unlisted system calls, couldn't retrieve kernel system call list: %m"); + } else if (!set_isempty(kernel)) { + _cleanup_free_ char **l = NULL; +- char **syscall; + + printf("\n" + "# %sUnlisted System Calls%s (supported by the local kernel, but not included in any of the groups listed above):\n", +@@ -1775,9 +1766,7 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) { + STRV_FOREACH(syscall, l) + printf("# %s\n", *syscall); + } +- } else { +- char **name; +- ++ } else + STRV_FOREACH(name, strv_skip(argv, 1)) { + const SyscallFilterSet *set; + +@@ -1796,7 +1785,6 @@ static int dump_syscall_filters(int argc, char *argv[], void *userdata) { + dump_syscall_filter(set); + first = false; + } +- } + + return 0; + } +@@ -1944,7 +1932,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) { + + if (!set_isempty(known)) { + _cleanup_free_ char **l = NULL; +- char **filesystem; + + printf("\n" + "# %sUngrouped filesystems%s (known but not included in any of the groups except @known):\n", +@@ -1987,7 +1974,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) { + log_notice_errno(k, "# Not showing unlisted filesystems, couldn't retrieve kernel filesystem list: %m"); + } else if (!set_isempty(kernel)) { + _cleanup_free_ char **l = NULL; +- char **filesystem; + + printf("\n" + "# %sUnlisted filesystems%s (available to the local kernel, but not included in any of the groups listed above):\n", +@@ -2002,9 +1988,7 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) { + STRV_FOREACH(filesystem, l) + printf("# %s\n", *filesystem); + } +- } else { +- char **name; +- ++ } else + STRV_FOREACH(name, strv_skip(argv, 1)) { + const FilesystemSet *set; + +@@ -2023,7 +2007,6 @@ static int dump_filesystems(int argc, char *argv[], void *userdata) { + dump_filesystem_set(set); + first = false; + } +- } + + return 0; + } +@@ -2041,8 +2024,6 @@ static void parsing_hint(const char *p, bool calendar, bool timestamp, bool time + } + + static int dump_timespan(int argc, char *argv[], void *userdata) { +- char **input_timespan; +- + STRV_FOREACH(input_timespan, strv_skip(argv, 1)) { + _cleanup_(table_unrefp) Table *table = NULL; + usec_t output_usecs; +@@ -2180,7 +2161,6 @@ static int test_timestamp_one(const char *p) { + + static int test_timestamp(int argc, char *argv[], void *userdata) { + int ret = 0, r; +- char **p; + + STRV_FOREACH(p, strv_skip(argv, 1)) { + r = test_timestamp_one(*p); +@@ -2312,7 +2292,6 @@ static int test_calendar_one(usec_t n, const char *p) { + + static int test_calendar(int argc, char *argv[], void *userdata) { + int ret = 0, r; +- char **p; + usec_t n; + + if (arg_base_time != USEC_INFINITY) +diff --git a/src/ask-password/ask-password.c b/src/ask-password/ask-password.c +index a100679af2..093533182f 100644 +--- a/src/ask-password/ask-password.c ++++ b/src/ask-password/ask-password.c +@@ -223,7 +223,6 @@ static int parse_argv(int argc, char *argv[]) { + static int run(int argc, char *argv[]) { + _cleanup_strv_free_erase_ char **l = NULL; + usec_t timeout; +- char **p; + int r; + + log_show_color(true); +diff --git a/src/basic/conf-files.c b/src/basic/conf-files.c +index 287428b561..82c6dc5677 100644 +--- a/src/basic/conf-files.c ++++ b/src/basic/conf-files.c +@@ -145,7 +145,7 @@ static int conf_files_list_strv_internal( + + _cleanup_hashmap_free_ Hashmap *fh = NULL; + _cleanup_set_free_free_ Set *masked = NULL; +- char **files, **p; ++ char **files; + int r; + + assert(ret); +@@ -202,11 +202,8 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p + int c; + + c = base_cmp((char* const*) *strv + i, (char* const*) &path); +- if (c == 0) { +- char **dir; +- ++ if (c == 0) + /* Oh, there already is an entry with a matching name (the last component). */ +- + STRV_FOREACH(dir, dirs) { + _cleanup_free_ char *rdir = NULL; + char *p1, *p2; +@@ -233,7 +230,7 @@ int conf_files_insert(char ***strv, const char *root, char **dirs, const char *p + } + } + +- } else if (c > 0) ++ else if (c > 0) + /* Following files have lower priority, let's go insert our + * new entry. */ + break; +diff --git a/src/basic/env-file.c b/src/basic/env-file.c +index 0e272da083..b46a679e06 100644 +--- a/src/basic/env-file.c ++++ b/src/basic/env-file.c +@@ -520,7 +520,6 @@ static void write_env_var(FILE *f, const char *v) { + int write_env_file(const char *fname, char **l) { + _cleanup_fclose_ FILE *f = NULL; + _cleanup_free_ char *p = NULL; +- char **i; + int r; + + assert(fname); +diff --git a/src/basic/env-util.c b/src/basic/env-util.c +index 885967e7f3..455f5d76f5 100644 +--- a/src/basic/env-util.c ++++ b/src/basic/env-util.c +@@ -96,8 +96,6 @@ bool env_assignment_is_valid(const char *e) { + } + + bool strv_env_is_valid(char **e) { +- char **p, **q; +- + STRV_FOREACH(p, e) { + size_t k; + +@@ -115,8 +113,6 @@ bool strv_env_is_valid(char **e) { + } + + bool strv_env_name_is_valid(char **l) { +- char **p; +- + STRV_FOREACH(p, l) { + if (!env_name_is_valid(*p)) + return false; +@@ -129,8 +125,6 @@ bool strv_env_name_is_valid(char **l) { + } + + bool strv_env_name_or_assignment_is_valid(char **l) { +- char **p; +- + STRV_FOREACH(p, l) { + if (!env_assignment_is_valid(*p) && !env_name_is_valid(*p)) + return false; +@@ -272,7 +266,7 @@ static bool env_entry_has_name(const char *entry, const char *name) { + + char **strv_env_delete(char **x, size_t n_lists, ...) { + size_t n, i = 0; +- char **k, **r; ++ char **r; + va_list ap; + + /* Deletes every entry from x that is mentioned in the other +@@ -287,7 +281,7 @@ char **strv_env_delete(char **x, size_t n_lists, ...) { + STRV_FOREACH(k, x) { + va_start(ap, n_lists); + for (size_t v = 0; v < n_lists; v++) { +- char **l, **j; ++ char **l; + + l = va_arg(ap, char**); + STRV_FOREACH(j, l) +@@ -379,7 +373,6 @@ char **strv_env_unset_many(char **l, ...) { + + int strv_env_replace_consume(char ***l, char *p) { + const char *t, *name; +- char **f; + int r; + + assert(p); +@@ -467,8 +460,6 @@ int strv_env_assign(char ***l, const char *key, const char *value) { + } + + char *strv_env_get_n(char **l, const char *name, size_t k, unsigned flags) { +- char **i; +- + assert(name); + + if (k <= 0) +@@ -496,7 +487,7 @@ char *strv_env_get(char **l, const char *name) { + } + + char *strv_env_pairs_get(char **l, const char *name) { +- char **key, **value, *result = NULL; ++ char *result = NULL; + + assert(name); + +@@ -508,7 +499,6 @@ char *strv_env_pairs_get(char **l, const char *name) { + } + + char **strv_env_clean_with_callback(char **e, void (*invalid_callback)(const char *p, void *userdata), void *userdata) { +- char **p, **q; + int k = 0; + + STRV_FOREACH(p, e) { +@@ -702,7 +692,7 @@ char *replace_env_n(const char *format, size_t n, char **env, unsigned flags) { + } + + char **replace_env_argv(char **argv, char **env) { +- char **ret, **i; ++ char **ret; + size_t k = 0, l = 0; + + l = strv_length(argv); +@@ -832,7 +822,6 @@ int setenv_systemd_exec_pid(bool update_only) { + int getenv_path_list(const char *name, char ***ret_paths) { + _cleanup_strv_free_ char **l = NULL; + const char *e; +- char **p; + int r; + + assert(name); +diff --git a/src/basic/escape.c b/src/basic/escape.c +index ce57fcc762..1cb7ced545 100644 +--- a/src/basic/escape.c ++++ b/src/basic/escape.c +@@ -549,7 +549,6 @@ char* quote_command_line(char **argv, ShellEscapeFlags flags) { + + assert(argv); + +- char **a; + STRV_FOREACH(a, argv) { + _cleanup_free_ char *t = NULL; + +diff --git a/src/basic/fileio.c b/src/basic/fileio.c +index 8d92da327e..d9b988d117 100644 +--- a/src/basic/fileio.c ++++ b/src/basic/fileio.c +@@ -1042,8 +1042,6 @@ static int search_and_fopen_internal( + FILE **ret, + char **ret_path) { + +- char **i; +- + assert(path); + assert(mode); + assert(ret); +diff --git a/src/basic/hashmap.c b/src/basic/hashmap.c +index b51d70bc87..bd7a6b0d6e 100644 +--- a/src/basic/hashmap.c ++++ b/src/basic/hashmap.c +@@ -1864,7 +1864,6 @@ int _set_put_strdup_full(Set **s, const struct hash_ops *hash_ops, const char *p + + int _set_put_strdupv_full(Set **s, const struct hash_ops *hash_ops, char **l HASHMAP_DEBUG_PARAMS) { + int n = 0, r; +- char **i; + + assert(s); + +diff --git a/src/basic/ordered-set.c b/src/basic/ordered-set.c +index 0a76f04561..b4c2588395 100644 +--- a/src/basic/ordered-set.c ++++ b/src/basic/ordered-set.c +@@ -58,7 +58,6 @@ int _ordered_set_put_strdup(OrderedSet **s, const char *p HASHMAP_DEBUG_PARAMS) + + int _ordered_set_put_strdupv(OrderedSet **s, char **l HASHMAP_DEBUG_PARAMS) { + int n = 0, r; +- char **i; + + STRV_FOREACH(i, l) { + r = _ordered_set_put_strdup(s, *i HASHMAP_DEBUG_PASS_ARGS); +diff --git a/src/basic/os-util.c b/src/basic/os-util.c +index 38b2179e48..acfff24319 100644 +--- a/src/basic/os-util.c ++++ b/src/basic/os-util.c +@@ -277,7 +277,6 @@ int load_os_release_pairs(const char *root, char ***ret) { + + int load_os_release_pairs_with_prefix(const char *root, const char *prefix, char ***ret) { + _cleanup_strv_free_ char **os_release_pairs = NULL, **os_release_pairs_prefixed = NULL; +- char **p, **q; + int r; + + r = load_os_release_pairs(root, &os_release_pairs); +diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c +index ab51955e34..b699756658 100644 +--- a/src/basic/path-lookup.c ++++ b/src/basic/path-lookup.c +@@ -463,7 +463,6 @@ static int patch_root_prefix(char **p, const char *root_dir) { + } + + static int patch_root_prefix_strv(char **l, const char *root_dir) { +- char **i; + int r; + + if (!root_dir) +diff --git a/src/basic/path-util.c b/src/basic/path-util.c +index 4c952d863c..76af40aaf2 100644 +--- a/src/basic/path-util.c ++++ b/src/basic/path-util.c +@@ -202,9 +202,9 @@ int path_make_relative(const char *from, const char *to, char **ret) { + } + + char* path_startswith_strv(const char *p, char **set) { +- char **s, *t; +- + STRV_FOREACH(s, set) { ++ char *t; ++ + t = path_startswith(p, *s); + if (t) + return t; +@@ -214,7 +214,6 @@ char* path_startswith_strv(const char *p, char **set) { + } + + int path_strv_make_absolute_cwd(char **l) { +- char **s; + int r; + + /* Goes through every item in the string list and makes it +@@ -236,7 +235,6 @@ int path_strv_make_absolute_cwd(char **l) { + } + + char **path_strv_resolve(char **l, const char *root) { +- char **s; + unsigned k = 0; + bool enomem = false; + int r; +@@ -700,12 +698,12 @@ int find_executable_full(const char *name, const char *root, char **exec_search_ + p = DEFAULT_PATH; + + if (exec_search_path) { +- char **element; +- + STRV_FOREACH(element, exec_search_path) { + _cleanup_free_ char *full_path = NULL; ++ + if (!path_is_absolute(*element)) + continue; ++ + full_path = path_join(*element, name); + if (!full_path) + return -ENOMEM; +@@ -754,7 +752,6 @@ int find_executable_full(const char *name, const char *root, char **exec_search_ + + bool paths_check_timestamp(const char* const* paths, usec_t *timestamp, bool update) { + bool changed = false, originally_unset; +- const char* const* i; + + assert(timestamp); + +@@ -1339,7 +1336,7 @@ int systemd_installation_has_version(const char *root, unsigned minimal_version) + + _cleanup_strv_free_ char **names = NULL; + _cleanup_free_ char *path = NULL; +- char *c, **name; ++ char *c; + + path = path_join(root, pattern); + if (!path) +@@ -1411,8 +1408,6 @@ bool empty_or_root(const char *path) { + } + + bool path_strv_contains(char **l, const char *path) { +- char **i; +- + STRV_FOREACH(i, l) + if (path_equal(*i, path)) + return true; +@@ -1421,10 +1416,9 @@ bool path_strv_contains(char **l, const char *path) { + } + + bool prefixed_path_strv_contains(char **l, const char *path) { +- char **i, *j; +- + STRV_FOREACH(i, l) { +- j = *i; ++ const char *j = *i; ++ + if (*j == '-') + j++; + if (*j == '+') +diff --git a/src/basic/process-util.c b/src/basic/process-util.c +index c971852158..c09d7d0321 100644 +--- a/src/basic/process-util.c ++++ b/src/basic/process-util.c +@@ -214,7 +214,6 @@ int get_process_cmdline(pid_t pid, size_t max_columns, ProcessCmdlineFlags flags + assert(!(flags & PROCESS_CMDLINE_USE_LOCALE)); + + _cleanup_strv_free_ char **args = NULL; +- char **p; + + args = strv_parse_nulstr(t, k); + if (!args) +diff --git a/src/basic/strv.c b/src/basic/strv.c +index 2ba5a94839..d195606fff 100644 +--- a/src/basic/strv.c ++++ b/src/basic/strv.c +@@ -17,8 +17,6 @@ + #include "strv.h" + + char* strv_find(char * const *l, const char *name) { +- char * const *i; +- + assert(name); + + STRV_FOREACH(i, l) +@@ -29,8 +27,6 @@ char* strv_find(char * const *l, const char *name) { + } + + char* strv_find_case(char * const *l, const char *name) { +- char * const *i; +- + assert(name); + + STRV_FOREACH(i, l) +@@ -41,8 +37,6 @@ char* strv_find_case(char * const *l, const char *name) { + } + + char* strv_find_prefix(char * const *l, const char *name) { +- char * const *i; +- + assert(name); + + STRV_FOREACH(i, l) +@@ -53,14 +47,14 @@ char* strv_find_prefix(char * const *l, const char *name) { + } + + char* strv_find_startswith(char * const *l, const char *name) { +- char * const *i, *e; +- + assert(name); + + /* Like strv_find_prefix, but actually returns only the + * suffix, not the whole item */ + + STRV_FOREACH(i, l) { ++ char *e; ++ + e = startswith(*i, name); + if (e) + return e; +@@ -80,8 +74,6 @@ char** strv_free(char **l) { + } + + char** strv_free_erase(char **l) { +- char **i; +- + STRV_FOREACH(i, l) + erase_and_freep(i); + +@@ -171,8 +163,8 @@ char** strv_new_internal(const char *x, ...) { + } + + int strv_extend_strv(char ***a, char * const *b, bool filter_duplicates) { +- char * const *s, **t; + size_t p, q, i = 0; ++ char **t; + + assert(a); + +@@ -217,7 +209,6 @@ rollback: + } + + int strv_extend_strv_concat(char ***a, char * const *b, const char *suffix) { +- char * const *s; + int r; + + STRV_FOREACH(s, b) { +@@ -367,7 +358,6 @@ int strv_split_colon_pairs(char ***t, const char *s) { + } + + char* strv_join_full(char * const *l, const char *separator, const char *prefix, bool unescape_separators) { +- char * const *s; + char *r, *e; + size_t n, k, m; + +@@ -595,8 +585,6 @@ int strv_extend_front(char ***l, const char *value) { + } + + char** strv_uniq(char **l) { +- char **i; +- + /* Drops duplicate entries. The first identical string will be + * kept, the others dropped */ + +@@ -607,8 +595,6 @@ char** strv_uniq(char **l) { + } + + bool strv_is_uniq(char * const *l) { +- char * const *i; +- + STRV_FOREACH(i, l) + if (strv_find(i+1, *i)) + return false; +@@ -717,7 +703,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) { + */ + + _cleanup_free_ char *m = NULL; +- char * const *i; + size_t n = 0; + + assert(ret); +@@ -754,8 +739,6 @@ int strv_make_nulstr(char * const *l, char **ret, size_t *ret_size) { + } + + bool strv_overlap(char * const *a, char * const *b) { +- char * const *i; +- + STRV_FOREACH(i, a) + if (strv_contains(b, *i)) + return true; +@@ -795,8 +778,6 @@ int strv_compare(char * const *a, char * const *b) { + } + + void strv_print(char * const *l) { +- char * const *s; +- + STRV_FOREACH(s, l) + puts(*s); + } +@@ -830,8 +811,6 @@ char** strv_reverse(char **l) { + } + + char** strv_shell_escape(char **l, const char *bad) { +- char **s; +- + /* Escapes every character in every string in l that is in bad, + * edits in-place, does not roll-back on error. */ + +@@ -914,7 +893,6 @@ rollback: + + int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) { + bool b = false; +- char * const *s; + int r; + + /* Like fputs(), but for strv, and with a less stupid argument order */ +diff --git a/src/basic/strv.h b/src/basic/strv.h +index 27d4450468..3acf0a48f3 100644 +--- a/src/basic/strv.h ++++ b/src/basic/strv.h +@@ -122,19 +122,30 @@ static inline int strv_from_nulstr(char ***a, const char *nulstr) { + + bool strv_overlap(char * const *a, char * const *b) _pure_; + ++#define _STRV_FOREACH(s, l, i) \ ++ for (typeof(*(l)) *s, *i = (l); (s = i) && *i; i++) ++ + #define STRV_FOREACH(s, l) \ +- for ((s) = (l); (s) && *(s); (s)++) ++ _STRV_FOREACH(s, l, UNIQ_T(i, UNIQ)) ++ ++#define _STRV_FOREACH_BACKWARDS(s, l, h, i) \ ++ for (typeof(*(l)) *s, *h = (l), *i = ({ \ ++ size_t _len = strv_length(h); \ ++ _len > 0 ? h + _len - 1 : NULL; \ ++ }); \ ++ i && (s = i) >= h; \ ++ i--) ++ ++#define STRV_FOREACH_BACKWARDS(s, l) \ ++ _STRV_FOREACH_BACKWARDS(s, l, UNIQ_T(h, UNIQ), UNIQ_T(i, UNIQ)) + +-#define STRV_FOREACH_BACKWARDS(s, l) \ +- for (s = ({ \ +- typeof(l) _l = l; \ +- _l ? _l + strv_length(_l) - 1U : NULL; \ +- }); \ +- (l) && ((s) >= (l)); \ +- (s)--) ++#define _STRV_FOREACH_PAIR(x, y, l, i) \ ++ for (typeof(*l) *x, *y, *i = (l); \ ++ i && *(x = i) && *(y = i + 1); \ ++ i += 2) + +-#define STRV_FOREACH_PAIR(x, y, l) \ +- for ((x) = (l), (y) = (x) ? (x+1) : NULL; (x) && *(x) && *(y); (x) += 2, (y) = (x + 1)) ++#define STRV_FOREACH_PAIR(x, y, l) \ ++ _STRV_FOREACH_PAIR(x, y, l, UNIQ_T(i, UNIQ)) + + char** strv_sort(char **l); + void strv_print(char * const *l); +@@ -185,7 +196,7 @@ void strv_print(char * const *l); + #define STARTSWITH_SET(p, ...) \ + ({ \ + const char *_p = (p); \ +- char *_found = NULL, **_i; \ ++ char *_found = NULL; \ + STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ + _found = startswith(_p, *_i); \ + if (_found) \ +@@ -197,7 +208,7 @@ void strv_print(char * const *l); + #define ENDSWITH_SET(p, ...) \ + ({ \ + const char *_p = (p); \ +- char *_found = NULL, **_i; \ ++ char *_found = NULL; \ + STRV_FOREACH(_i, STRV_MAKE(__VA_ARGS__)) { \ + _found = endswith(_p, *_i); \ + if (_found) \ +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 142ba006f8..6cf66b45cf 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -215,8 +215,7 @@ bool lookup_paths_timestamp_hash_same(const LookupPaths *lp, uint64_t timestamp_ + + siphash24_init(&state, HASH_KEY.bytes); + +- char **dir; +- STRV_FOREACH(dir, (char**) lp->search_path) { ++ STRV_FOREACH(dir, lp->search_path) { + struct stat st; + + if (lookup_paths_mtime_exclude(lp, *dir)) +@@ -388,7 +387,6 @@ int unit_file_build_name_map( + _cleanup_hashmap_free_ Hashmap *ids = NULL, *names = NULL; + _cleanup_set_free_free_ Set *paths = NULL; + uint64_t timestamp_hash; +- char **dir; + int r; + + /* Before doing anything, check if the timestamp hash that was passed is still valid. +@@ -406,7 +404,7 @@ int unit_file_build_name_map( + return log_oom(); + } + +- STRV_FOREACH(dir, (char**) lp->search_path) { ++ STRV_FOREACH(dir, lp->search_path) { + _cleanup_closedir_ DIR *d = NULL; + + d = opendir(*dir); +@@ -614,7 +612,7 @@ static int add_names( + Set **names, + const char *name) { + +- char **aliases, **alias; ++ char **aliases; + int r; + + assert(name_type == UNIT_NAME_PLAIN || instance); +diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c +index 18231c2618..817ee387ff 100644 +--- a/src/binfmt/binfmt.c ++++ b/src/binfmt/binfmt.c +@@ -213,7 +213,6 @@ static int run(int argc, char *argv[]) { + } + else { + _cleanup_strv_free_ char **files = NULL; +- char **f; + + r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("binfmt.d")); + if (r < 0) +diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c +index 9e4b0d1f72..49009cb1eb 100644 +--- a/src/boot/bless-boot.c ++++ b/src/boot/bless-boot.c +@@ -320,7 +320,6 @@ static const char *skip_slash(const char *path) { + static int verb_status(int argc, char *argv[], void *userdata) { + _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL; + uint64_t left, done; +- char **p; + int r; + + r = acquire_boot_count_path(&path, &prefix, &left, &done, &suffix); +@@ -397,7 +396,6 @@ static int verb_set(int argc, char *argv[], void *userdata) { + _cleanup_free_ char *path = NULL, *prefix = NULL, *suffix = NULL, *good = NULL, *bad = NULL, *parent = NULL; + const char *target, *source1, *source2; + uint64_t done; +- char **p; + int r; + + r = acquire_boot_count_path(&path, &prefix, NULL, &done, &suffix); +diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c +index 9427a0e4ce..c1adae4962 100644 +--- a/src/boot/bootctl.c ++++ b/src/boot/bootctl.c +@@ -440,7 +440,6 @@ static int boot_entry_show(const BootEntry *e, bool show_as_default) { + if (e->kernel) + boot_entry_file_list("linux", e->root, e->kernel, &status); + +- char **s; + STRV_FOREACH(s, e->initrd) + boot_entry_file_list(s == e->initrd ? "initrd" : NULL, + e->root, +@@ -669,7 +668,6 @@ static const char *const dollar_boot_subdirs[] = { + }; + + static int create_subdirs(const char *root, const char * const *subdirs) { +- const char *const *i; + int r; + + STRV_FOREACH(i, subdirs) { +diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c +index c0c9b23ae9..fd646784b9 100644 +--- a/src/busctl/busctl.c ++++ b/src/busctl/busctl.c +@@ -141,7 +141,7 @@ static int list_bus_names(int argc, char **argv, void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_hashmap_free_ Hashmap *names = NULL; + _cleanup_(table_unrefp) Table *table = NULL; +- char **i, *k; ++ char *k; + void *v; + int r; + +@@ -502,7 +502,6 @@ static int tree_one(sd_bus *bus, const char *service) { + + static int tree(int argc, char **argv, void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; +- char **i; + int r; + + /* Do superficial verification of arguments before even opening the bus */ +@@ -1206,7 +1205,6 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_(sd_bus_message_unrefp) sd_bus_message *message = NULL; + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- char **i; + uint32_t flags = 0; + const char *unique_name; + bool is_monitor = false; +@@ -2115,7 +2113,6 @@ static int emit_signal(int argc, char **argv, void *userdata) { + static int get_property(int argc, char **argv, void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- char **i; + int r; + + r = acquire_bus(false, &bus); +diff --git a/src/cgls/cgls.c b/src/cgls/cgls.c +index 775bd84ad2..8e8f97b3ce 100644 +--- a/src/cgls/cgls.c ++++ b/src/cgls/cgls.c +@@ -201,7 +201,6 @@ static int run(int argc, char *argv[]) { + if (arg_names) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_free_ char *root = NULL; +- char **name; + + STRV_FOREACH(name, arg_names) { + int q; +diff --git a/src/core/bpf-firewall.c b/src/core/bpf-firewall.c +index 3c1c02e444..c149c0afff 100644 +--- a/src/core/bpf-firewall.c ++++ b/src/core/bpf-firewall.c +@@ -596,8 +596,6 @@ int bpf_firewall_compile(Unit *u) { + } + + static int load_bpf_progs_from_fs_to_set(Unit *u, char **filter_paths, Set **set) { +- char **bpf_fs_path; +- + set_clear(*set); + + STRV_FOREACH(bpf_fs_path, filter_paths) { +diff --git a/src/core/cgroup.c b/src/core/cgroup.c +index f58de95a49..17ec70567c 100644 +--- a/src/core/cgroup.c ++++ b/src/core/cgroup.c +@@ -430,7 +430,6 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) { + CGroupContext *c; + CGroupSocketBindItem *bi; + struct in_addr_prefix *iaai; +- char **path; + + char cda[FORMAT_CGROUP_DIFF_MAX]; + char cdb[FORMAT_CGROUP_DIFF_MAX]; +diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c +index f0d8759e85..bd76ce7117 100644 +--- a/src/core/dbus-cgroup.c ++++ b/src/core/dbus-cgroup.c +@@ -640,7 +640,6 @@ static int bus_cgroup_set_transient_property( + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + _cleanup_free_ char *buf = NULL; + _cleanup_fclose_ FILE *f = NULL; +- char **entry; + size_t size = 0; + + if (n == 0) +@@ -2050,7 +2049,6 @@ int bus_cgroup_set_property( + + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + _cleanup_free_ char *joined = NULL; +- char **s; + + if (strv_isempty(l)) { + c->restrict_network_interfaces_is_allow_list = false; +diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c +index 5c499e5d06..2d49f86366 100644 +--- a/src/core/dbus-execute.c ++++ b/src/core/dbus-execute.c +@@ -74,7 +74,6 @@ static int property_get_environment_files( + sd_bus_error *error) { + + ExecContext *c = userdata; +- char **j; + int r; + + assert(bus); +@@ -1143,15 +1142,12 @@ static int bus_property_get_exec_dir_symlink( + if (r < 0) + return r; + +- for (size_t i = 0; i < d->n_items; i++) { +- char **dst; +- ++ for (size_t i = 0; i < d->n_items; i++) + STRV_FOREACH(dst, d->items[i].symlinks) { + r = sd_bus_message_append(reply, "(sst)", d->items[i].path, *dst, 0 /* flags, unused for now */); + if (r < 0) + return r; + } +- } + + return sd_bus_message_close_container(reply); + } +@@ -2021,7 +2017,6 @@ int bus_exec_context_set_transient_property( + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + _cleanup_free_ char *joined = NULL; + FilesystemParseFlags invert_flag = allow_list ? 0 : FILESYSTEM_PARSE_INVERT; +- char **s; + + if (strv_isempty(l)) { + c->restrict_filesystems_allow_list = false; +@@ -2067,7 +2062,6 @@ int bus_exec_context_set_transient_property( + + if (streq(name, "SupplementaryGroups")) { + _cleanup_strv_free_ char **l = NULL; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) +@@ -2432,7 +2426,6 @@ int bus_exec_context_set_transient_property( + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + _cleanup_free_ char *joined = NULL; + SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT; +- char **s; + + if (strv_isempty(l)) { + c->syscall_allow_list = false; +@@ -2517,7 +2510,6 @@ int bus_exec_context_set_transient_property( + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + _cleanup_free_ char *joined = NULL; + SeccompParseFlags invert_flag = allow_list ? 0 : SECCOMP_PARSE_INVERT; +- char **s; + + if (strv_isempty(l)) { + c->syscall_log_allow_list = false; +@@ -2569,9 +2561,7 @@ int bus_exec_context_set_transient_property( + + if (strv_isempty(l)) + c->syscall_archs = set_free(c->syscall_archs); +- else { +- char **s; +- ++ else + STRV_FOREACH(s, l) { + uint32_t a; + +@@ -2584,8 +2574,6 @@ int bus_exec_context_set_transient_property( + return r; + } + +- } +- + joined = strv_join(l, " "); + if (!joined) + return -ENOMEM; +@@ -2617,7 +2605,6 @@ int bus_exec_context_set_transient_property( + + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + _cleanup_free_ char *joined = NULL; +- char **s; + + if (strv_isempty(l)) { + c->address_families_allow_list = allow_list; +@@ -3146,7 +3133,6 @@ int bus_exec_context_set_transient_property( + _cleanup_fclose_ FILE *f = NULL; + _cleanup_strv_free_ char **l = NULL; + size_t size = 0; +- char **i; + + r = sd_bus_message_enter_container(message, 'a', "(sb)"); + if (r < 0) +@@ -3264,7 +3250,6 @@ int bus_exec_context_set_transient_property( + "ReadWritePaths", "ReadOnlyPaths", "InaccessiblePaths", "ExecPaths", "NoExecPaths")) { + _cleanup_strv_free_ char **l = NULL; + char ***dirs; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) +@@ -3316,16 +3301,15 @@ int bus_exec_context_set_transient_property( + + } else if (streq(name, "ExecSearchPath")) { + _cleanup_strv_free_ char **l = NULL; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) + return r; + +- STRV_FOREACH(p, l) { ++ STRV_FOREACH(p, l) + if (!path_is_absolute(*p) || !path_is_normalized(*p) || strchr(*p, ':')) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid %s", name); +- } ++ + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + if (strv_isempty(l)) { + c->exec_search_path = strv_free(c->exec_search_path); +@@ -3346,7 +3330,6 @@ int bus_exec_context_set_transient_property( + + } else if (STR_IN_SET(name, "RuntimeDirectory", "StateDirectory", "CacheDirectory", "LogsDirectory", "ConfigurationDirectory")) { + _cleanup_strv_free_ char **l = NULL; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) +@@ -3375,7 +3358,6 @@ int bus_exec_context_set_transient_property( + unit_write_settingf(u, flags, name, "%s=", name); + } else { + _cleanup_free_ char *joined = NULL; +- char **source; + + STRV_FOREACH(source, l) { + r = exec_directory_add(&d->items, &d->n_items, *source, NULL); +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 1a3098ceb1..0e3590d1c9 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -817,7 +817,6 @@ static int method_list_units_by_names(sd_bus_message *message, void *userdata, s + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; + Manager *m = userdata; + int r; +- char **unit; + _cleanup_strv_free_ char **units = NULL; + + assert(message); +diff --git a/src/core/dbus-socket.c b/src/core/dbus-socket.c +index a3b1e0442f..989c3f74db 100644 +--- a/src/core/dbus-socket.c ++++ b/src/core/dbus-socket.c +@@ -326,16 +326,14 @@ static int bus_socket_set_transient_property( + + if (streq(name, "Symlinks")) { + _cleanup_strv_free_ char **l = NULL; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) + return r; + +- STRV_FOREACH(p, l) { ++ STRV_FOREACH(p, l) + if (!path_is_absolute(*p)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Symlink path is not absolute: %s", *p); +- } + + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + if (strv_isempty(l)) { +diff --git a/src/core/dbus-unit.c b/src/core/dbus-unit.c +index 1128c42ad9..c1cf6dfb6f 100644 +--- a/src/core/dbus-unit.c ++++ b/src/core/dbus-unit.c +@@ -2245,16 +2245,14 @@ static int bus_unit_set_transient_property( + + if (streq(name, "Documentation")) { + _cleanup_strv_free_ char **l = NULL; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) + return r; + +- STRV_FOREACH(p, l) { ++ STRV_FOREACH(p, l) + if (!documentation_url_is_valid(*p)) + return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid URL in %s: %s", name, *p); +- } + + if (!UNIT_WRITE_FLAGS_NOOP(flags)) { + if (strv_isempty(l)) { +@@ -2310,7 +2308,6 @@ static int bus_unit_set_transient_property( + + } else if (streq(name, "RequiresMountsFor")) { + _cleanup_strv_free_ char **l = NULL; +- char **p; + + r = sd_bus_message_read_strv(message, &l); + if (r < 0) +diff --git a/src/core/device.c b/src/core/device.c +index 43f49573b9..d2c5febd3f 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -307,13 +307,9 @@ static void device_dump(Unit *u, FILE *f, const char *prefix) { + prefix, strna(d->sysfs), + prefix, strna(s)); + +- if (!strv_isempty(d->wants_property)) { +- char **i; +- +- STRV_FOREACH(i, d->wants_property) +- fprintf(f, "%sudev SYSTEMD_WANTS: %s\n", +- prefix, *i); +- } ++ STRV_FOREACH(i, d->wants_property) ++ fprintf(f, "%sudev SYSTEMD_WANTS: %s\n", ++ prefix, *i); + } + + _pure_ static UnitActiveState device_active_state(Unit *u) { +@@ -419,9 +415,7 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) { + k = NULL; + } + +- if (d->state != DEVICE_DEAD) { +- char **i; +- ++ if (d->state != DEVICE_DEAD) + /* So here's a special hack, to compensate for the fact that the udev database's reload cycles are not + * synchronized with our own reload cycles: when we detect that the SYSTEMD_WANTS property of a device + * changes while the device unit is already up, let's manually trigger any new units listed in it not +@@ -431,7 +425,6 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) { + * + * We do this only if the device has been up already when we parse this, as otherwise the usual + * dependency logic that is run from the dead → plugged transition will trigger these deps. */ +- + STRV_FOREACH(i, added) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + +@@ -442,7 +435,6 @@ static int device_add_udev_wants(Unit *u, sd_device *dev) { + if (r < 0) + log_unit_warning_errno(u, r, "Failed to enqueue SYSTEMD_WANTS= job, ignoring: %s", bus_error_message(&error, r)); + } +- } + + return strv_free_and_replace(d->wants_property, added); + } +diff --git a/src/core/execute.c b/src/core/execute.c +index 3cafd0f17d..306e563e4f 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -994,7 +994,6 @@ static int get_fixed_group(const ExecContext *c, const char **group, gid_t *gid) + static int get_supplementary_groups(const ExecContext *c, const char *user, + const char *group, gid_t gid, + gid_t **supplementary_gids, int *ngids) { +- char **i; + int r, k = 0; + int ngroups_max; + bool keep_groups = false; +@@ -1185,7 +1184,7 @@ static int setup_pam( + pam_handle_t *handle = NULL; + sigset_t old_ss; + int pam_code = PAM_SUCCESS, r; +- char **nv, **e = NULL; ++ char **e = NULL; + bool close_session = false; + pid_t pam_pid = 0, parent_pid; + int flags = 0; +@@ -2010,7 +2009,6 @@ static int build_environment( + static int build_pass_environment(const ExecContext *c, char ***ret) { + _cleanup_strv_free_ char **pass_env = NULL; + size_t n_env = 0; +- char **i; + + STRV_FOREACH(i, c->pass_environment) { + _cleanup_free_ char *x = NULL; +@@ -2283,7 +2281,6 @@ static bool exec_directory_is_private(const ExecContext *context, ExecDirectoryT + + static int create_many_symlinks(const char *root, const char *source, char **symlinks) { + _cleanup_free_ char *src_abs = NULL; +- char **dst; + int r; + + assert(source); +@@ -3221,7 +3218,6 @@ static int compile_symlinks( + for (ExecDirectoryType dt = 0; dt < _EXEC_DIRECTORY_TYPE_MAX; dt++) { + for (size_t i = 0; i < context->directories[dt].n_items; i++) { + _cleanup_free_ char *private_path = NULL, *path = NULL; +- char **symlink; + + STRV_FOREACH(symlink, context->directories[dt].items[i].symlinks) { + _cleanup_free_ char *src_abs = NULL, *dst_abs = NULL; +@@ -5190,7 +5186,6 @@ int exec_context_destroy_runtime_directory(const ExecContext *c, const char *run + * service next. */ + (void) rm_rf(p, REMOVE_ROOT); + +- char **symlink; + STRV_FOREACH(symlink, c->directories[EXEC_DIRECTORY_RUNTIME].items[i].symlinks) { + _cleanup_free_ char *symlink_abs = NULL; + +@@ -5364,7 +5359,6 @@ static int exec_context_named_iofds( + + static int exec_context_load_environment(const Unit *unit, const ExecContext *c, char ***ret) { + _cleanup_strv_free_ char **v = NULL; +- char **i; + int r; + + assert(c); +@@ -5471,8 +5465,6 @@ bool exec_context_may_touch_console(const ExecContext *ec) { + } + + static void strv_fprintf(FILE *f, char **l) { +- char **g; +- + assert(f); + + STRV_FOREACH(g, l) +@@ -5492,7 +5484,6 @@ static void strv_dump(FILE* f, const char *prefix, const char *name, char **strv + } + + void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { +- char **e, **d; + int r; + + assert(c); +@@ -5924,9 +5915,11 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { + } + + #if HAVE_LIBBPF +- if (exec_context_restrict_filesystems_set(c)) ++ if (exec_context_restrict_filesystems_set(c)) { ++ char **e; + SET_FOREACH(e, c->restrict_filesystems) + fprintf(f, "%sRestrictFileSystems: %s\n", prefix, *e); ++ } + #endif + + if (c->network_namespace_path) +@@ -6117,7 +6110,6 @@ int exec_context_get_clean_directories( + return r; + } + +- char **symlink; + STRV_FOREACH(symlink, c->directories[t].items[i].symlinks) { + j = path_join(prefix[t], *symlink); + if (!j) +diff --git a/src/core/load-dropin.c b/src/core/load-dropin.c +index 080a63bc7e..53d2a3daa1 100644 +--- a/src/core/load-dropin.c ++++ b/src/core/load-dropin.c +@@ -13,7 +13,6 @@ + + static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suffix) { + _cleanup_strv_free_ char **paths = NULL; +- char **p; + int r; + + r = unit_file_find_dropin_paths(NULL, +@@ -85,7 +84,6 @@ static int process_deps(Unit *u, UnitDependency dependency, const char *dir_suff + + int unit_load_dropin(Unit *u) { + _cleanup_strv_free_ char **l = NULL; +- char **f; + int r; + + assert(u); +diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c +index 461e073269..0acc350389 100644 +--- a/src/core/load-fragment.c ++++ b/src/core/load-fragment.c +@@ -1634,7 +1634,6 @@ int config_parse_root_image_options( + + _cleanup_(mount_options_free_allp) MountOptions *options = NULL; + _cleanup_strv_free_ char **l = NULL; +- char **first = NULL, **second = NULL; + ExecContext *c = data; + const Unit *u = userdata; + int r; +diff --git a/src/core/main.c b/src/core/main.c +index cb3131c12a..4bad2e84a0 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -2409,7 +2409,6 @@ static void fallback_rlimit_memlock(const struct rlimit *saved_rlimit_memlock) { + } + + static void setenv_manager_environment(void) { +- char **p; + int r; + + STRV_FOREACH(p, arg_manager_environment) { +diff --git a/src/core/manager.c b/src/core/manager.c +index 22bd0866c5..60846a66e6 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -3582,7 +3582,6 @@ void manager_check_finished(Manager *m) { + } + + static bool generator_path_any(const char* const* paths) { +- char **path; + bool found = false; + + /* Optimize by skipping the whole process by not creating output directories +diff --git a/src/core/namespace.c b/src/core/namespace.c +index c549dcc96b..4bd63f6227 100644 +--- a/src/core/namespace.c ++++ b/src/core/namespace.c +@@ -313,8 +313,6 @@ static void mount_entry_done(MountEntry *p) { + } + + static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, bool forcibly_require_prefix) { +- char **i; +- + assert(p); + + /* Adds a list of user-supplied READWRITE/READWRITE_IMPLICIT/READONLY/INACCESSIBLE entries */ +@@ -349,8 +347,6 @@ static int append_access_mounts(MountEntry **p, char **strv, MountMode mode, boo + } + + static int append_empty_dir_mounts(MountEntry **p, char **strv) { +- char **i; +- + assert(p); + + /* Adds tmpfs mounts to provide readable but empty directories. This is primarily used to implement the +@@ -417,7 +413,6 @@ static int append_extension_images( + size_t n) { + + _cleanup_strv_free_ char **overlays = NULL; +- char **hierarchy; + int r; + + assert(p); +@@ -1590,7 +1585,6 @@ static void normalize_mounts(const char *root_directory, MountEntry *mounts, siz + } + + static int create_symlinks_from_tuples(const char *root, char **strv_symlinks) { +- char **src, **dst; + int r; + + STRV_FOREACH_PAIR(src, dst, strv_symlinks) { +diff --git a/src/core/service.c b/src/core/service.c +index 49579f7998..5d9464d588 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2592,7 +2592,6 @@ static int service_serialize_exec_command(Unit *u, FILE *f, ExecCommand *command + ServiceExecCommand id; + size_t length = 0; + unsigned idx; +- char **arg; + + assert(s); + assert(f); +@@ -4028,7 +4027,6 @@ static void service_notify_message( + Service *s = SERVICE(u); + bool notify_dbus = false; + const char *e; +- char * const *i; + int r; + + assert(u); +diff --git a/src/core/socket.c b/src/core/socket.c +index 8a5c7fdd0a..8da9f14db6 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -781,8 +781,6 @@ static void socket_dump(Unit *u, FILE *f, const char *prefix) { + fprintf(f, "%sSocketProtocol: %s\n", prefix, str); + + if (!strv_isempty(s->symlinks)) { +- char **q; +- + fprintf(f, "%sSymlinks:", prefix); + STRV_FOREACH(q, s->symlinks) + fprintf(f, " %s", *q); +@@ -924,7 +922,6 @@ static int instance_from_socket(int fd, unsigned nr, char **instance) { + + static void socket_close_fds(Socket *s) { + SocketPort *p; +- char **i; + + assert(s); + +@@ -1271,7 +1268,6 @@ static int mq_address_create( + + static int socket_symlink(Socket *s) { + const char *p; +- char **i; + int r; + + assert(s); +diff --git a/src/core/transaction.c b/src/core/transaction.c +index ebe5f1910d..32badaaef1 100644 +--- a/src/core/transaction.c ++++ b/src/core/transaction.c +@@ -329,7 +329,7 @@ _pure_ static bool unit_matters_to_anchor(Unit *u, Job *j) { + } + + static char* merge_unit_ids(const char* unit_log_field, char **pairs) { +- char **unit_id, **job_type, *ans = NULL; ++ char *ans = NULL; + size_t size = 0, next; + + STRV_FOREACH_PAIR(unit_id, job_type, pairs) { +@@ -366,7 +366,6 @@ static int transaction_verify_order_one(Transaction *tr, Job *j, Job *from, unsi + if (j->generation == generation) { + Job *k, *delete = NULL; + _cleanup_free_ char **array = NULL, *unit_ids = NULL; +- char **unit_id, **job_type; + + /* If the marker is NULL we have been here already and decided the job was loop-free from + * here. Hence shortcut things and return right-away. */ +diff --git a/src/core/unit-serialize.c b/src/core/unit-serialize.c +index 7d2e6bc130..65ed110ce6 100644 +--- a/src/core/unit-serialize.c ++++ b/src/core/unit-serialize.c +@@ -623,7 +623,7 @@ static void print_unit_dependency_mask(FILE *f, const char *kind, UnitDependency + } + + void unit_dump(Unit *u, FILE *f, const char *prefix) { +- char *t, **j; ++ char *t; + const char *prefix2; + Unit *following; + _cleanup_set_free_ Set *following_set = NULL; +diff --git a/src/core/unit.c b/src/core/unit.c +index 3d30f3807c..6eaa553255 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -568,8 +568,6 @@ static void unit_clear_dependencies(Unit *u) { + } + + static void unit_remove_transient(Unit *u) { +- char **i; +- + assert(u); + + if (!u->transient) +@@ -3594,7 +3592,6 @@ int unit_add_blockdev_dependency(Unit *u, const char *what, UnitDependencyMask m + + int unit_coldplug(Unit *u) { + int r = 0, q; +- char **i; + + assert(u); + +@@ -3667,7 +3664,6 @@ static bool fragment_mtime_newer(const char *path, usec_t mtime, bool path_maske + + bool unit_need_daemon_reload(Unit *u) { + _cleanup_strv_free_ char **t = NULL; +- char **path; + + assert(u); + +@@ -4251,7 +4247,6 @@ char* unit_escape_setting(const char *s, UnitWriteFlags flags, char **buf) { + char* unit_concat_strv(char **l, UnitWriteFlags flags) { + _cleanup_free_ char *result = NULL; + size_t n = 0; +- char **i; + + /* Takes a list of strings, escapes them, and concatenates them. This may be used to format command lines in a + * way suitable for ExecStart= stanzas */ +@@ -5052,7 +5047,6 @@ int unit_fork_and_watch_rm_rf(Unit *u, char **paths, pid_t *ret_pid) { + return r; + if (r == 0) { + int ret = EXIT_SUCCESS; +- char **i; + + STRV_FOREACH(i, paths) { + r = rm_rf(*i, REMOVE_ROOT|REMOVE_PHYSICAL|REMOVE_MISSING_OK); +diff --git a/src/coredump/coredumpctl.c b/src/coredump/coredumpctl.c +index 2904de3728..7235544285 100644 +--- a/src/coredump/coredumpctl.c ++++ b/src/coredump/coredumpctl.c +@@ -91,7 +91,6 @@ static int add_match(sd_journal *j, const char *match) { + } + + static int add_matches(sd_journal *j, char **matches) { +- char **match; + int r; + + r = sd_journal_add_match(j, "MESSAGE_ID=" SD_MESSAGE_COREDUMP_STR, 0); +diff --git a/src/creds/creds.c b/src/creds/creds.c +index 3d2841c07d..2fd314ff37 100644 +--- a/src/creds/creds.c ++++ b/src/creds/creds.c +@@ -311,7 +311,6 @@ static int write_blob(FILE *f, const void *data, size_t size) { + static int verb_cat(int argc, char **argv, void *userdata) { + _cleanup_(closedirp) DIR *d = NULL; + int r, ret = 0; +- char **cn; + + r = open_credential_directory(&d); + if (r == -ENXIO) +diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c +index c9bc9a2489..7f397f197f 100644 +--- a/src/cryptenroll/cryptenroll.c ++++ b/src/cryptenroll/cryptenroll.c +@@ -482,7 +482,6 @@ static int prepare_luks( + + for (;;) { + _cleanup_strv_free_erase_ char **passwords = NULL; +- char **p; + + if (--i == 0) + return log_error_errno(SYNTHETIC_ERRNO(ENOKEY), +diff --git a/src/cryptsetup/cryptsetup-keyfile.c b/src/cryptsetup/cryptsetup-keyfile.c +index 924555d262..1867e9012c 100644 +--- a/src/cryptsetup/cryptsetup-keyfile.c ++++ b/src/cryptsetup/cryptsetup-keyfile.c +@@ -12,7 +12,6 @@ int find_key_file( + void **ret_key, + size_t *ret_key_size) { + +- char **i; + int r; + + assert(key_file); +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index 250a8314f6..dddd976dc8 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -562,7 +562,7 @@ static int get_password( + + _cleanup_free_ char *friendly = NULL, *text = NULL, *disk_path = NULL; + _cleanup_strv_free_erase_ char **passwords = NULL; +- char **p, *id; ++ char *id; + int r = 0; + AskPasswordFlags flags = arg_ask_password_flags | ASK_PASSWORD_PUSH_CACHE; + +@@ -851,7 +851,6 @@ static int attach_luks2_by_fido2( + #if HAVE_LIBCRYPTSETUP_PLUGINS + AskPasswordFlags flags = ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED; + _cleanup_strv_free_erase_ char **pins = NULL; +- char **p; + int r; + + r = crypt_activate_by_token_pin(cd, name, "systemd-fido2", CRYPT_ANY_TOKEN, NULL, 0, usrptr, activation_flags); +@@ -1523,7 +1522,6 @@ static int attach_luks_or_plain_or_bitlk_by_passphrase( + uint32_t flags, + bool pass_volume_key) { + +- char **p; + int r; + + assert(cd); +diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c +index a724ae510d..e2e1df5715 100644 +--- a/src/debug-generator/debug-generator.c ++++ b/src/debug-generator/debug-generator.c +@@ -89,7 +89,6 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat + } + + static int generate_mask_symlinks(void) { +- char **u; + int r = 0; + + if (strv_isempty(arg_mask)) +@@ -112,7 +111,6 @@ static int generate_mask_symlinks(void) { + } + + static int generate_wants_symlinks(void) { +- char **u; + int r = 0; + + if (strv_isempty(arg_wants)) +diff --git a/src/delta/delta.c b/src/delta/delta.c +index 3f1b206e6c..eafe1c05c4 100644 +--- a/src/delta/delta.c ++++ b/src/delta/delta.c +@@ -195,7 +195,6 @@ static int enumerate_dir_d( + _cleanup_free_ char *unit = NULL; + _cleanup_free_ char *path = NULL; + _cleanup_strv_free_ char **list = NULL; +- char **file; + char *c; + int r; + +@@ -292,7 +291,6 @@ static int enumerate_dir( + _cleanup_closedir_ DIR *d = NULL; + _cleanup_strv_free_ char **files = NULL, **dirs = NULL; + size_t n_files = 0, n_dirs = 0; +- char **t; + int r; + + assert(top); +diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c +index a9632a3f16..1d78dc5085 100644 +--- a/src/dissect/dissect.c ++++ b/src/dissect/dissect.c +@@ -354,7 +354,6 @@ static int parse_argv(int argc, char *argv[]) { + + static int strv_pair_to_json(char **l, JsonVariant **ret) { + _cleanup_strv_free_ char **jl = NULL; +- char **a, **b; + + STRV_FOREACH_PAIR(a, b, l) { + char *j; +@@ -371,8 +370,6 @@ static int strv_pair_to_json(char **l, JsonVariant **ret) { + } + + static void strv_pair_print(char **l, const char *prefix) { +- char **p, **q; +- + assert(prefix); + + STRV_FOREACH_PAIR(p, q, l) { +diff --git a/src/environment-d-generator/environment-d-generator.c b/src/environment-d-generator/environment-d-generator.c +index 1171fdc290..39c46c7c2b 100644 +--- a/src/environment-d-generator/environment-d-generator.c ++++ b/src/environment-d-generator/environment-d-generator.c +@@ -41,7 +41,6 @@ static int environment_dirs(char ***ret) { + + static int load_and_print(void) { + _cleanup_strv_free_ char **dirs = NULL, **files = NULL, **env = NULL; +- char **i; + int r; + + r = environment_dirs(&dirs); +diff --git a/src/escape/escape.c b/src/escape/escape.c +index 676b7dce54..0ad77f3f94 100644 +--- a/src/escape/escape.c ++++ b/src/escape/escape.c +@@ -155,7 +155,6 @@ static int parse_argv(int argc, char *argv[]) { + } + + static int run(int argc, char *argv[]) { +- char **i; + int r; + + log_setup(); +diff --git a/src/fstab-generator/fstab-generator.c b/src/fstab-generator/fstab-generator.c +index 9b32383a76..355f2b8668 100644 +--- a/src/fstab-generator/fstab-generator.c ++++ b/src/fstab-generator/fstab-generator.c +@@ -237,7 +237,6 @@ static int write_dependency( + + _cleanup_strv_free_ char **names = NULL, **units = NULL; + _cleanup_free_ char *res = NULL; +- char **s; + int r; + + assert(f); +@@ -518,8 +517,6 @@ static int add_mount( + if (r < 0) + return r; + } else { +- char **s; +- + STRV_FOREACH(s, wanted_by) { + r = generator_add_symlink(dest, *s, "wants", name); + if (r < 0) +diff --git a/src/home/homectl.c b/src/home/homectl.c +index ac7b00889d..4aeaaf6b9a 100644 +--- a/src/home/homectl.c ++++ b/src/home/homectl.c +@@ -554,7 +554,6 @@ static int acquire_passed_secrets(const char *user_name, UserRecord **ret) { + static int activate_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r, ret = 0; +- char **i; + + r = acquire_bus(&bus); + if (r < 0) +@@ -603,7 +602,6 @@ static int activate_home(int argc, char *argv[], void *userdata) { + static int deactivate_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r, ret = 0; +- char **i; + + r = acquire_bus(&bus); + if (r < 0) +@@ -690,7 +688,7 @@ static int inspect_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_(strv_freep) char **mangled_list = NULL; + int r, ret = 0; +- char **items, **i; ++ char **items; + + pager_open(arg_pager_flags); + +@@ -774,7 +772,7 @@ static int authenticate_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_(strv_freep) char **mangled_list = NULL; + int r, ret = 0; +- char **i, **items; ++ char **items; + + items = mangle_user_list(strv_skip(argv, 1), &mangled_list); + if (!items) +@@ -1084,7 +1082,6 @@ static int add_disposition(JsonVariant **v) { + static int acquire_new_home_record(UserRecord **ret) { + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; + _cleanup_(user_record_unrefp) UserRecord *hr = NULL; +- char **i; + int r; + + assert(ret); +@@ -1375,7 +1372,6 @@ static int create_home(int argc, char *argv[], void *userdata) { + static int remove_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r, ret = 0; +- char **i; + + r = acquire_bus(&bus); + if (r < 0) +@@ -1413,7 +1409,6 @@ static int acquire_updated_home_record( + + _cleanup_(json_variant_unrefp) JsonVariant *json = NULL; + _cleanup_(user_record_unrefp) UserRecord *hr = NULL; +- char **i; + int r; + + assert(ret); +@@ -1863,7 +1858,6 @@ static int resize_home(int argc, char *argv[], void *userdata) { + static int lock_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r, ret = 0; +- char **i; + + r = acquire_bus(&bus); + if (r < 0) +@@ -1895,7 +1889,6 @@ static int lock_home(int argc, char *argv[], void *userdata) { + static int unlock_home(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + int r, ret = 0; +- char **i; + + r = acquire_bus(&bus); + if (r < 0) +diff --git a/src/home/homed-manager-bus.c b/src/home/homed-manager-bus.c +index 47eb287aa9..ba5ca42ed3 100644 +--- a/src/home/homed-manager-bus.c ++++ b/src/home/homed-manager-bus.c +@@ -39,7 +39,6 @@ static int property_get_auto_login( + HASHMAP_FOREACH(h, m->homes_by_name) { + _cleanup_(strv_freep) char **seats = NULL; + _cleanup_free_ char *home_path = NULL; +- char **s; + + r = home_auto_login(h, &seats); + if (r < 0) { +diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c +index a02248a6de..f04b87e366 100644 +--- a/src/home/homed-manager.c ++++ b/src/home/homed-manager.c +@@ -1553,7 +1553,6 @@ static int manager_load_public_key_one(Manager *m, const char *path) { + + static int manager_load_public_keys(Manager *m) { + _cleanup_strv_free_ char **files = NULL; +- char **i; + int r; + + assert(m); +diff --git a/src/home/homed-varlink.c b/src/home/homed-varlink.c +index 96a6ea754e..3dd5a14802 100644 +--- a/src/home/homed-varlink.c ++++ b/src/home/homed-varlink.c +@@ -282,7 +282,6 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet + + if (p.user_name) { + const char *last = NULL; +- char **i; + + h = hashmap_get(m->homes_by_name, p.user_name); + if (!h) +@@ -335,9 +334,7 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet + } else { + const char *last_user_name = NULL, *last_group_name = NULL; + +- HASHMAP_FOREACH(h, m->homes_by_name) { +- char **j; +- ++ HASHMAP_FOREACH(h, m->homes_by_name) + STRV_FOREACH(j, h->record->member_of) { + + if (last_user_name) { +@@ -353,7 +350,6 @@ int vl_method_get_memberships(Varlink *link, JsonVariant *parameters, VarlinkMet + last_user_name = h->user_name; + last_group_name = *j; + } +- } + + if (last_user_name) { + assert(last_group_name); +diff --git a/src/home/homework-cifs.c b/src/home/homework-cifs.c +index ed06d1f221..6d499f76b2 100644 +--- a/src/home/homework-cifs.c ++++ b/src/home/homework-cifs.c +@@ -20,7 +20,6 @@ int home_setup_cifs( + HomeSetup *setup) { + + _cleanup_free_ char *chost = NULL, *cservice = NULL, *cdir = NULL, *chost_and_service = NULL, *j = NULL; +- char **pw; + int r; + + assert(h); +diff --git a/src/home/homework-fscrypt.c b/src/home/homework-fscrypt.c +index f9fef73f75..afa706a1bf 100644 +--- a/src/home/homework-fscrypt.c ++++ b/src/home/homework-fscrypt.c +@@ -197,7 +197,6 @@ static int fscrypt_slot_try_many( + const uint8_t match_key_descriptor[static FS_KEY_DESCRIPTOR_SIZE], + void **ret_decrypted, size_t *ret_decrypted_size) { + +- char **i; + int r; + + STRV_FOREACH(i, passwords) { +@@ -499,7 +498,6 @@ int home_create_fscrypt( + _cleanup_free_ char *d = NULL; + uint32_t nr = 0; + const char *ip; +- char **i; + int r; + + assert(h); +@@ -649,7 +647,6 @@ int home_passwd_fscrypt( + size_t volume_key_size = 0; + uint32_t slot = 0; + const char *xa; +- char **p; + int r; + + assert(h); +diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c +index 8063206358..f8f4afb253 100644 +--- a/src/home/homework-luks.c ++++ b/src/home/homework-luks.c +@@ -303,7 +303,6 @@ static int luks_try_passwords( + size_t *volume_key_size, + key_serial_t *ret_key_serial) { + +- char **pp; + int r; + + assert(h); +@@ -1721,7 +1720,6 @@ static int luks_format( + _cleanup_free_ char *text = NULL; + size_t volume_key_size; + int slot = 0, r; +- char **pp; + + assert(node); + assert(dm_name); +@@ -3664,7 +3662,6 @@ static int luks_try_resume( + const char *dm_name, + char **password) { + +- char **pp; + int r; + + assert(cd); +diff --git a/src/home/homework-pkcs11.c b/src/home/homework-pkcs11.c +index 15402b1002..7868fb6064 100644 +--- a/src/home/homework-pkcs11.c ++++ b/src/home/homework-pkcs11.c +@@ -20,7 +20,6 @@ int pkcs11_callback( + CK_TOKEN_INFO updated_token_info; + size_t decrypted_key_size; + CK_OBJECT_HANDLE object; +- char **i; + CK_RV rv; + int r; + +diff --git a/src/home/homework.c b/src/home/homework.c +index 9fdc74b775..0014a7f598 100644 +--- a/src/home/homework.c ++++ b/src/home/homework.c +@@ -97,9 +97,7 @@ int user_record_authenticate( + log_info("None of the supplied plaintext passwords unlock the user record's hashed recovery keys."); + + /* Second, test cached PKCS#11 passwords */ +- for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) { +- char **pp; +- ++ for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) + STRV_FOREACH(pp, cache->pkcs11_passwords) { + r = test_password_one(h->pkcs11_encrypted_key[n].hashed_password, *pp); + if (r < 0) +@@ -109,12 +107,9 @@ int user_record_authenticate( + return 1; + } + } +- } + + /* Third, test cached FIDO2 passwords */ +- for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) { +- char **pp; +- ++ for (size_t n = 0; n < h->n_fido2_hmac_salt; n++) + /* See if any of the previously calculated passwords work */ + STRV_FOREACH(pp, cache->fido2_passwords) { + r = test_password_one(h->fido2_hmac_salt[n].hashed_password, *pp); +@@ -125,7 +120,6 @@ int user_record_authenticate( + return 1; + } + } +- } + + /* Fourth, let's see if any of the PKCS#11 security tokens are plugged in and help us */ + for (size_t n = 0; n < h->n_pkcs11_encrypted_key; n++) { +@@ -1096,7 +1090,6 @@ static int user_record_compile_effective_passwords( + + _cleanup_(strv_free_erasep) char **effective = NULL; + size_t n; +- char **i; + int r; + + assert(h); +@@ -1116,7 +1109,6 @@ static int user_record_compile_effective_passwords( + + STRV_FOREACH(i, h->hashed_password) { + bool found = false; +- char **j; + + log_debug("Looking for plaintext password for: %s", *i); + +@@ -1144,7 +1136,6 @@ static int user_record_compile_effective_passwords( + + for (n = 0; n < h->n_recovery_key; n++) { + bool found = false; +- char **j; + + log_debug("Looking for plaintext recovery key for: %s", h->recovery_key[n].hashed_password); + +diff --git a/src/home/user-record-pwquality.c b/src/home/user-record-pwquality.c +index 23c3357836..609e620511 100644 +--- a/src/home/user-record-pwquality.c ++++ b/src/home/user-record-pwquality.c +@@ -17,7 +17,7 @@ int user_record_quality_check_password( + sd_bus_error *error) { + + _cleanup_(sym_pwquality_free_settingsp) pwquality_settings_t *pwq = NULL; +- char buf[PWQ_MAX_ERROR_MESSAGE_LEN], **pp; ++ char buf[PWQ_MAX_ERROR_MESSAGE_LEN]; + void *auxerror; + int r; + +@@ -37,7 +37,6 @@ int user_record_quality_check_password( + /* Iterate through all new passwords */ + STRV_FOREACH(pp, secret->password) { + bool called = false; +- char **old; + + r = test_password_many(hr->hashed_password, *pp); + if (r < 0) +diff --git a/src/home/user-record-util.c b/src/home/user-record-util.c +index f4578783f3..1ae3e82bce 100644 +--- a/src/home/user-record-util.c ++++ b/src/home/user-record-util.c +@@ -563,7 +563,6 @@ int user_record_test_image_path_and_warn(UserRecord *h) { + } + + int user_record_test_password(UserRecord *h, UserRecord *secret) { +- char **i; + int r; + + assert(h); +@@ -585,7 +584,6 @@ int user_record_test_password(UserRecord *h, UserRecord *secret) { + } + + int user_record_test_recovery_key(UserRecord *h, UserRecord *secret) { +- char **i; + int r; + + assert(h); +@@ -779,7 +777,6 @@ int user_record_update_last_changed(UserRecord *h, bool with_password) { + int user_record_make_hashed_password(UserRecord *h, char **secret, bool extend) { + _cleanup_(json_variant_unrefp) JsonVariant *priv = NULL; + _cleanup_strv_free_ char **np = NULL; +- char **i; + int r; + + assert(h); +diff --git a/src/id128/id128.c b/src/id128/id128.c +index 484a72677d..6f4d65103c 100644 +--- a/src/id128/id128.c ++++ b/src/id128/id128.c +@@ -102,7 +102,6 @@ static int show_one(Table **table, const char *name, sd_id128_t uuid, bool first + + static int verb_show(int argc, char **argv, void *userdata) { + _cleanup_(table_unrefp) Table *table = NULL; +- char **p; + int r; + + argv = strv_skip(argv, 1); +diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c +index 6ab91263b1..13ca22ef26 100644 +--- a/src/journal-remote/journal-remote-main.c ++++ b/src/journal-remote/journal-remote-main.c +@@ -594,7 +594,6 @@ static int create_remoteserver( + const char* trust) { + + int r, n, fd; +- char **file; + + r = journal_remote_server_init(s, arg_output, arg_split_mode, arg_compress, arg_seal); + if (r < 0) +diff --git a/src/journal-remote/microhttpd-util.c b/src/journal-remote/microhttpd-util.c +index e6a8254491..a8119bd687 100644 +--- a/src/journal-remote/microhttpd-util.c ++++ b/src/journal-remote/microhttpd-util.c +@@ -151,18 +151,17 @@ static int log_enable_gnutls_category(const char *cat) { + } + + int setup_gnutls_logger(char **categories) { +- char **cat; + int r; + + gnutls_global_set_log_function(log_func_gnutls); + +- if (categories) { ++ if (categories) + STRV_FOREACH(cat, categories) { + r = log_enable_gnutls_category(*cat); + if (r < 0) + return r; + } +- } else ++ else + log_reset_gnutls_level(); + + return 0; +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index 3c4a7c0a7a..6353c77c91 100644 +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -1139,7 +1139,6 @@ static int parse_argv(int argc, char *argv[]) { + } + + static int add_matches(sd_journal *j, char **args) { +- char **i; + bool have_term = false; + + assert(j); +@@ -1562,7 +1561,7 @@ static int get_possible_units( + return r; + + SD_JOURNAL_FOREACH_UNIQUE(j, data, size) { +- char **pattern, *eq; ++ char *eq; + size_t prefix; + _cleanup_free_ char *u = NULL; + +@@ -1615,7 +1614,6 @@ static int get_possible_units( + static int add_units(sd_journal *j) { + _cleanup_strv_free_ char **patterns = NULL; + int r, count = 0; +- char **i; + + assert(j); + +@@ -1760,7 +1758,6 @@ static int add_facilities(sd_journal *j) { + + static int add_syslog_identifier(sd_journal *j) { + int r; +- char **i; + + assert(j); + +diff --git a/src/libsystemd-network/dhcp-option.c b/src/libsystemd-network/dhcp-option.c +index ebe8eecc9d..efb676e60b 100644 +--- a/src/libsystemd-network/dhcp-option.c ++++ b/src/libsystemd-network/dhcp-option.c +@@ -58,7 +58,6 @@ static int option_append(uint8_t options[], size_t size, size_t *offset, + + case SD_DHCP_OPTION_USER_CLASS: { + size_t total = 0; +- char **s; + + if (strv_isempty((char **) optval)) + return -EINVAL; +diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c +index 28fe036a40..8b2ecfc44b 100644 +--- a/src/libsystemd-network/dhcp6-option.c ++++ b/src/libsystemd-network/dhcp6-option.c +@@ -468,7 +468,6 @@ int dhcp6_option_append_fqdn(uint8_t **buf, size_t *buflen, const char *fqdn) { + int dhcp6_option_append_user_class(uint8_t **buf, size_t *buflen, char * const *user_class) { + _cleanup_free_ uint8_t *p = NULL; + size_t total = 0, offset = 0; +- char * const *s; + + assert(buf); + assert(*buf); +@@ -501,7 +500,6 @@ int dhcp6_option_append_vendor_class(uint8_t **buf, size_t *buflen, char * const + _cleanup_free_ uint8_t *p = NULL; + uint32_t enterprise_identifier; + size_t total, offset; +- char * const *s; + + assert(buf); + assert(*buf); +diff --git a/src/libsystemd-network/sd-dhcp-client.c b/src/libsystemd-network/sd-dhcp-client.c +index c33be947b7..1c34893de6 100644 +--- a/src/libsystemd-network/sd-dhcp-client.c ++++ b/src/libsystemd-network/sd-dhcp-client.c +@@ -612,7 +612,6 @@ int sd_dhcp_client_set_user_class( + sd_dhcp_client *client, + char * const *user_class) { + +- char * const *p; + char **s = NULL; + + assert_return(client, -EINVAL); +diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c +index 706904c720..122c878a66 100644 +--- a/src/libsystemd-network/sd-dhcp6-client.c ++++ b/src/libsystemd-network/sd-dhcp6-client.c +@@ -510,7 +510,6 @@ int sd_dhcp6_client_set_request_mud_url(sd_dhcp6_client *client, const char *mud + } + + int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const *user_class) { +- char * const *p; + char **s; + + assert_return(client, -EINVAL); +@@ -532,7 +531,6 @@ int sd_dhcp6_client_set_request_user_class(sd_dhcp6_client *client, char * const + } + + int sd_dhcp6_client_set_request_vendor_class(sd_dhcp6_client *client, char * const *vendor_class) { +- char * const *p; + char **s; + + assert_return(client, -EINVAL); +diff --git a/src/libsystemd-network/sd-radv.c b/src/libsystemd-network/sd-radv.c +index e332f6a2ab..26f782208e 100644 +--- a/src/libsystemd-network/sd-radv.c ++++ b/src/libsystemd-network/sd-radv.c +@@ -800,7 +800,6 @@ int sd_radv_set_dnssl(sd_radv *ra, uint32_t lifetime, + char **search_list) { + _cleanup_free_ struct sd_radv_opt_dns *opt_dnssl = NULL; + size_t len = 0; +- char **s; + uint8_t *p; + + assert_return(ra, -EINVAL); +diff --git a/src/libsystemd/sd-bus/bus-dump.c b/src/libsystemd/sd-bus/bus-dump.c +index 0a4b3cbf68..42790ee3b4 100644 +--- a/src/libsystemd/sd-bus/bus-dump.c ++++ b/src/libsystemd/sd-bus/bus-dump.c +@@ -412,8 +412,6 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse) { + + r = sd_bus_creds_get_cmdline(c, &cmdline); + if (r >= 0) { +- char **i; +- + fprintf(f, "%sCommandLine=%s", prefix, color); + STRV_FOREACH(i, cmdline) { + if (i != cmdline) +@@ -478,8 +476,6 @@ int bus_creds_dump(sd_bus_creds *c, FILE *f, bool terse) { + fprintf(f, "%sUniqueName=%s%s%s", prefix, color, c->unique_name, suffix); + + if (sd_bus_creds_get_well_known_names(c, &well_known) >= 0) { +- char **i; +- + fprintf(f, "%sWellKnownNames=%s", prefix, color); + STRV_FOREACH(i, well_known) { + if (i != well_known) +diff --git a/src/libsystemd/sd-bus/bus-match.c b/src/libsystemd/sd-bus/bus-match.c +index 12a50845db..d4da60717e 100644 +--- a/src/libsystemd/sd-bus/bus-match.c ++++ b/src/libsystemd/sd-bus/bus-match.c +@@ -139,8 +139,6 @@ static bool value_node_test( + return true; + + if (m->creds.mask & SD_BUS_CREDS_WELL_KNOWN_NAMES) { +- char **i; +- + /* on kdbus we have the well known names list + * in the credentials, let's make use of that + * for an accurate match */ +@@ -174,8 +172,6 @@ static bool value_node_test( + return false; + + case BUS_MATCH_ARG_HAS ... BUS_MATCH_ARG_HAS_LAST: { +- char **i; +- + STRV_FOREACH(i, value_strv) + if (streq_ptr(node->value.str, *i)) + return true; +@@ -386,8 +382,6 @@ int bus_match_run( + if (test_str) + found = hashmap_get(node->compare.children, test_str); + else if (test_strv) { +- char **i; +- + STRV_FOREACH(i, test_strv) { + found = hashmap_get(node->compare.children, *i); + if (found) { +diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c +index 96529b422b..b77372c3a0 100644 +--- a/src/libsystemd/sd-bus/bus-message.c ++++ b/src/libsystemd/sd-bus/bus-message.c +@@ -2815,7 +2815,6 @@ _public_ int sd_bus_message_append_string_memfd( + } + + _public_ int sd_bus_message_append_strv(sd_bus_message *m, char **l) { +- char **i; + int r; + + assert_return(m, -EINVAL); +diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c +index 40158a7326..35546afebc 100644 +--- a/src/libsystemd/sd-bus/bus-objects.c ++++ b/src/libsystemd/sd-bus/bus-objects.c +@@ -109,7 +109,7 @@ static int add_enumerated_to_set( + assert(s); + + LIST_FOREACH(enumerators, c, first) { +- char **children = NULL, **k; ++ char **children = NULL; + sd_bus_slot *slot; + + if (bus->nodes_modified) +@@ -2072,7 +2072,6 @@ static int emit_properties_changed_on_interface( + struct vtable_member key = {}; + struct node_vtable *c; + struct node *n; +- char **property; + void *u = NULL; + int r; + +@@ -2854,7 +2853,6 @@ static int interfaces_added_append_one( + _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) { + _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; + struct node *object_manager; +- char **i; + int r; + + assert_return(bus, -EINVAL); +diff --git a/src/libsystemd/sd-bus/test-bus-address.c b/src/libsystemd/sd-bus/test-bus-address.c +index 59421094c5..6de9f7cd57 100644 +--- a/src/libsystemd/sd-bus/test-bus-address.c ++++ b/src/libsystemd/sd-bus/test-bus-address.c +@@ -27,7 +27,6 @@ static void test_bus_set_address_system_remote(char **args) { + + assert_se(sd_bus_new(&b) >= 0); + if (!strv_isempty(args)) { +- char **a; + STRV_FOREACH(a, args) + test_one_address(b, *a, 0, NULL); + return; +diff --git a/src/libsystemd/sd-device/device-private.c b/src/libsystemd/sd-device/device-private.c +index 37eda23a5f..d3898ba959 100644 +--- a/src/libsystemd/sd-device/device-private.c ++++ b/src/libsystemd/sd-device/device-private.c +@@ -429,7 +429,6 @@ static int device_verify(sd_device *device) { + + int device_new_from_strv(sd_device **ret, char **strv) { + _cleanup_(sd_device_unrefp) sd_device *device = NULL; +- char **key; + const char *major = NULL, *minor = NULL; + int r; + +diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c +index 4a2ba02ad0..d9ba9d11d3 100644 +--- a/src/libsystemd/sd-journal/catalog.c ++++ b/src/libsystemd/sd-journal/catalog.c +@@ -442,7 +442,6 @@ error: + + int catalog_update(const char* database, const char* root, const char* const* dirs) { + _cleanup_strv_free_ char **files = NULL; +- char **f; + _cleanup_(strbuf_freep) struct strbuf *sb = NULL; + _cleanup_ordered_hashmap_free_free_free_ OrderedHashmap *h = NULL; + _cleanup_free_ CatalogItem *items = NULL; +@@ -709,7 +708,6 @@ int catalog_list(FILE *f, const char *database, bool oneline) { + } + + int catalog_list_items(FILE *f, const char *database, bool oneline, char **items) { +- char **item; + int r = 0; + + STRV_FOREACH(item, items) { +diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c +index 7a6cc4aca3..ecd755c705 100644 +--- a/src/libsystemd/sd-journal/sd-journal.c ++++ b/src/libsystemd/sd-journal/sd-journal.c +@@ -2029,7 +2029,6 @@ _public_ int sd_journal_open_directory(sd_journal **ret, const char *path, int f + + _public_ int sd_journal_open_files(sd_journal **ret, const char **paths, int flags) { + _cleanup_(sd_journal_closep) sd_journal *j = NULL; +- const char **path; + int r; + + assert_return(ret, -EINVAL); +diff --git a/src/libsystemd/sd-netlink/netlink-message.c b/src/libsystemd/sd-netlink/netlink-message.c +index 182c74ed3d..469076ae23 100644 +--- a/src/libsystemd/sd-netlink/netlink-message.c ++++ b/src/libsystemd/sd-netlink/netlink-message.c +@@ -258,7 +258,6 @@ int sd_netlink_message_append_string(sd_netlink_message *m, unsigned short type, + + int sd_netlink_message_append_strv(sd_netlink_message *m, unsigned short type, char * const *data) { + size_t length, size; +- char * const *p; + int r; + + assert_return(m, -EINVAL); +diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c +index ff1e0d5f8e..8d9cfbc0af 100644 +--- a/src/libsystemd/sd-path/sd-path.c ++++ b/src/libsystemd/sd-path/sd-path.c +@@ -669,7 +669,7 @@ _public_ int sd_path_lookup_strv(uint64_t type, const char *suffix, char ***path + if (!n) + return -ENOMEM; + +- char **i, **j = n; ++ char **j = n; + STRV_FOREACH(i, l) { + *j = path_join(*i, suffix); + if (!*j) +diff --git a/src/locale/localectl.c b/src/locale/localectl.c +index b5624209dc..661d54c27d 100644 +--- a/src/locale/localectl.c ++++ b/src/locale/localectl.c +@@ -98,8 +98,6 @@ static void print_status_info(StatusInfo *i) { + if (strv_isempty(i->locale)) + puts(" System Locale: n/a"); + else { +- char **j; +- + printf(" System Locale: %s\n", i->locale[0]); + STRV_FOREACH(j, i->locale + 1) + printf(" %s\n", *j); +diff --git a/src/locale/localed.c b/src/locale/localed.c +index f3e6ef2db1..89bf9c6fba 100644 +--- a/src/locale/localed.c ++++ b/src/locale/localed.c +@@ -346,7 +346,6 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er + Context *c = userdata; + bool modified = false; + int interactive, r; +- char **i; + bool use_localegen; + + assert(m); +diff --git a/src/login/loginctl.c b/src/login/loginctl.c +index 3e1916725d..4198f13f00 100644 +--- a/src/login/loginctl.c ++++ b/src/login/loginctl.c +@@ -601,7 +601,6 @@ static int print_user_status_info(sd_bus *bus, const char *path, bool *new_line) + printf("\t State: %s\n", i.state); + + if (!strv_isempty(i.sessions)) { +- char **l; + printf("\tSessions:"); + + STRV_FOREACH(l, i.sessions) +@@ -662,7 +661,6 @@ static int print_seat_status_info(sd_bus *bus, const char *path, bool *new_line) + printf("%s\n", strna(i.id)); + + if (!strv_isempty(i.sessions)) { +- char **l; + printf("\tSessions:"); + + STRV_FOREACH(l, i.sessions) { +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index c05c0d02cc..31a41bd271 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -3947,7 +3947,6 @@ int manager_start_scope( + char **job) { + + _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL; +- char **i; + int r; + + assert(manager); +diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c +index 5bd7efc3e8..2047dc1817 100644 +--- a/src/login/pam_systemd.c ++++ b/src/login/pam_systemd.c +@@ -533,7 +533,6 @@ static int pam_putenv_and_log(pam_handle_t *handle, const char *e, bool debug) { + } + + static int apply_user_record_settings(pam_handle_t *handle, UserRecord *ur, bool debug) { +- char **i; + int r; + + assert(handle); +diff --git a/src/modules-load/modules-load.c b/src/modules-load/modules-load.c +index eda847cb4a..9e20d59389 100644 +--- a/src/modules-load/modules-load.c ++++ b/src/modules-load/modules-load.c +@@ -194,7 +194,6 @@ static int run(int argc, char *argv[]) { + + } else { + _cleanup_strv_free_ char **files = NULL; +- char **fn, **i; + + STRV_FOREACH(i, arg_proc_cmdline_modules) { + k = module_load_and_warn(ctx, *i, true); +diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c +index c081ec673c..7d7f35253b 100644 +--- a/src/network/generator/network-generator.c ++++ b/src/network/generator/network-generator.c +@@ -1132,7 +1132,6 @@ void network_dump(Network *network, FILE *f) { + Address *address; + Route *route; + const char *dhcp; +- char **dns; + + assert(network); + assert(f); +diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c +index 8e7fe11c18..7b15c281e3 100644 +--- a/src/network/netdev/netdev.c ++++ b/src/network/netdev/netdev.c +@@ -866,7 +866,6 @@ int netdev_load_one(Manager *manager, const char *filename) { + + int netdev_load(Manager *manager, bool reload) { + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + assert(manager); +diff --git a/src/network/networkctl.c b/src/network/networkctl.c +index c35f851bdb..3eb63efa9c 100644 +--- a/src/network/networkctl.c ++++ b/src/network/networkctl.c +@@ -525,7 +525,6 @@ static int decode_link(sd_netlink_message *m, LinkInfo *info, char **patterns, b + if (!strv_fnmatch_full(patterns, str, 0, &pos) && + !strv_fnmatch_full(patterns, name, 0, &pos)) { + bool match = false; +- char **p; + + STRV_FOREACH(p, altnames) + if (strv_fnmatch_full(patterns, *p, 0, &pos)) { +diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c +index 9acfd17d49..41c8122b5a 100644 +--- a/src/network/networkd-dhcp-server.c ++++ b/src/network/networkd-dhcp-server.c +@@ -206,8 +206,6 @@ static int link_push_uplink_to_dhcp_server( + break; + + case SD_DHCP_LEASE_NTP: { +- char **i; +- + /* For NTP things are similar, but for NTP hostnames can be configured too, which we cannot + * propagate via DHCP. Hence let's only propagate those which are IP addresses. */ + +diff --git a/src/network/networkd-json.c b/src/network/networkd-json.c +index fb1f50063e..dc9823c375 100644 +--- a/src/network/networkd-json.c ++++ b/src/network/networkd-json.c +@@ -699,7 +699,6 @@ static int server_build_json_one_string(const char *str, NetworkConfigSource s, + static int ntp_build_json(Link *link, JsonVariant **ret) { + JsonVariant **elements = NULL; + size_t n = 0; +- char **p; + int r; + + assert(link); +@@ -878,7 +877,7 @@ static int domains_build_json(Link *link, bool is_route, JsonVariant **ret) { + JsonVariant **elements = NULL; + DHCPUseDomains use_domains; + union in_addr_union s; +- char **p, **domains; ++ char **domains; + const char *domain; + size_t n = 0; + int r; +diff --git a/src/network/networkd-link-bus.c b/src/network/networkd-link-bus.c +index 765733b38c..4173eaa15f 100644 +--- a/src/network/networkd-link-bus.c ++++ b/src/network/networkd-link-bus.c +@@ -81,7 +81,6 @@ int bus_link_method_set_ntp_servers(sd_bus_message *message, void *userdata, sd_ + _cleanup_strv_free_ char **ntp = NULL; + Link *l = userdata; + int r; +- char **i; + + assert(message); + assert(l); +@@ -484,7 +483,6 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v + _cleanup_strv_free_ char **ntas = NULL; + Link *l = userdata; + int r; +- char **i; + + assert(message); + assert(l); +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 7bc391d68d..f409d1f33a 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -998,8 +998,6 @@ static void link_drop_requests(Link *link) { + } + + static Link *link_drop(Link *link) { +- char **n; +- + if (!link) + return NULL; + +@@ -2280,7 +2278,6 @@ static int link_update_mtu(Link *link, sd_netlink_message *message) { + + static int link_update_alternative_names(Link *link, sd_netlink_message *message) { + _cleanup_strv_free_ char **altnames = NULL; +- char **n; + int r; + + assert(link); +diff --git a/src/network/networkd-ndisc.c b/src/network/networkd-ndisc.c +index f616f2c9bc..3be078b179 100644 +--- a/src/network/networkd-ndisc.c ++++ b/src/network/networkd-ndisc.c +@@ -786,7 +786,6 @@ static int ndisc_router_process_dnssl(Link *link, sd_ndisc_router *rt) { + struct in6_addr router; + uint32_t lifetime_sec; + bool updated = false; +- char **j; + int r; + + assert(link); +diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c +index 873ad2e703..03f09d730f 100644 +--- a/src/network/networkd-network.c ++++ b/src/network/networkd-network.c +@@ -573,7 +573,6 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi + + int network_load(Manager *manager, OrderedHashmap **networks) { + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + assert(manager); +diff --git a/src/nspawn/nspawn-bind-user.c b/src/nspawn/nspawn-bind-user.c +index d3113c303e..c9386e91f7 100644 +--- a/src/nspawn/nspawn-bind-user.c ++++ b/src/nspawn/nspawn-bind-user.c +@@ -203,7 +203,6 @@ int bind_user_prepare( + + _cleanup_(bind_user_context_freep) BindUserContext *c = NULL; + uid_t current_uid = MAP_UID_START; +- char **n; + int r; + + assert(custom_mounts); +diff --git a/src/nspawn/nspawn-mount.c b/src/nspawn/nspawn-mount.c +index 678fde3669..4379bd9b37 100644 +--- a/src/nspawn/nspawn-mount.c ++++ b/src/nspawn/nspawn-mount.c +@@ -166,8 +166,6 @@ int custom_mount_prepare_all(const char *dest, CustomMount *l, size_t n) { + } + + if (m->type == CUSTOM_MOUNT_OVERLAY) { +- char **j; +- + STRV_FOREACH(j, m->lower) { + char *s; + +@@ -319,8 +317,6 @@ int overlay_mount_parse(CustomMount **l, size_t *n, const char *s, bool read_onl + if (!destination) + return -ENOMEM; + } else { +- char **i; +- + /* If more than two parameters are specified, the last one is the destination, the second to last one + * the "upper", and all before that the "lower" directories. */ + +diff --git a/src/nspawn/nspawn-network.c b/src/nspawn/nspawn-network.c +index 023b1e7e1a..fab4eb9609 100644 +--- a/src/nspawn/nspawn-network.c ++++ b/src/nspawn/nspawn-network.c +@@ -288,7 +288,6 @@ int setup_veth_extra( + + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + uint64_t idx = 0; +- char **a, **b; + int r; + + assert(machine_name); +@@ -495,7 +494,6 @@ int test_network_interface_initialized(const char *name) { + + int move_network_interfaces(int netns_fd, char **ifaces) { + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; +- char **i; + int r; + + if (strv_isempty(ifaces)) +@@ -532,7 +530,6 @@ int move_network_interfaces(int netns_fd, char **ifaces) { + int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) { + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; + unsigned idx = 0; +- char **i; + int r; + + if (strv_isempty(ifaces)) +@@ -619,7 +616,6 @@ int setup_macvlan(const char *machine_name, pid_t pid, char **ifaces) { + + int setup_ipvlan(const char *machine_name, pid_t pid, char **ifaces) { + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; +- char **i; + int r; + + if (strv_isempty(ifaces)) +@@ -728,7 +724,6 @@ int veth_extra_parse(char ***l, const char *p) { + + int remove_veth_links(const char *primary, char **pairs) { + _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL; +- char **a, **b; + int r; + + /* In some cases the kernel might pin the veth links between host and container even after the namespace +diff --git a/src/nspawn/nspawn-oci.c b/src/nspawn/nspawn-oci.c +index 9e59d6a814..afdac67427 100644 +--- a/src/nspawn/nspawn-oci.c ++++ b/src/nspawn/nspawn-oci.c +@@ -1892,7 +1892,6 @@ static int oci_seccomp_syscalls(const char *name, JsonVariant *v, JsonDispatchFl + struct syscall_rule rule = { + .action = UINT32_MAX, + }; +- char **i; + + r = json_dispatch(e, table, oci_unexpected, flags, &rule); + if (r < 0) +diff --git a/src/nspawn/nspawn-seccomp.c b/src/nspawn/nspawn-seccomp.c +index c94512ef30..77f4c2ac88 100644 +--- a/src/nspawn/nspawn-seccomp.c ++++ b/src/nspawn/nspawn-seccomp.c +@@ -140,7 +140,6 @@ static int add_syscall_filters( + }; + + _cleanup_strv_free_ char **added = NULL; +- char **p; + int r; + + for (size_t i = 0; i < ELEMENTSOF(allow_list); i++) { +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 1333a8702a..dd1cdb74b7 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -3149,7 +3149,6 @@ static int patch_sysctl(void) { + }; + + unsigned long flags; +- char **k, **v; + int r; + + flags = effective_clone_ns_flags(); +diff --git a/src/nss-systemd/userdb-glue.c b/src/nss-systemd/userdb-glue.c +index 002e6925f9..c69667d660 100644 +--- a/src/nss-systemd/userdb-glue.c ++++ b/src/nss-systemd/userdb-glue.c +@@ -217,7 +217,7 @@ int nss_pack_group_record( + char *buffer, + size_t buflen) { + +- char **array = NULL, *p, **m; ++ char **array = NULL, *p; + size_t required, n = 0, i = 0; + + assert(g); +diff --git a/src/partition/repart.c b/src/partition/repart.c +index 509cf69b5d..2f70796e58 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -1404,7 +1404,6 @@ static int context_read_definitions( + + _cleanup_strv_free_ char **files = NULL; + Partition *last = NULL; +- char **f; + int r; + + assert(context); +@@ -2832,7 +2831,6 @@ static int context_copy_blocks(Context *context) { + } + + static int do_copy_files(Partition *p, const char *fs) { +- char **source, **target; + int r; + + assert(p); +@@ -2929,7 +2927,6 @@ static int do_copy_files(Partition *p, const char *fs) { + } + + static int do_make_directories(Partition *p, const char *fs) { +- char **d; + int r; + + assert(p); +diff --git a/src/portable/portable.c b/src/portable/portable.c +index bdc10da36f..5be7ea854d 100644 +--- a/src/portable/portable.c ++++ b/src/portable/portable.c +@@ -58,7 +58,6 @@ static bool prefix_match(const char *unit, const char *prefix) { + + static bool unit_match(const char *unit, char **matches) { + const char *dot; +- char **i; + + dot = strrchr(unit, '.'); + if (!dot) +@@ -182,7 +181,6 @@ static int extract_now( + _cleanup_close_ int os_release_fd = -1; + _cleanup_free_ char *os_release_path = NULL; + const char *os_release_id; +- char **i; + int r; + + /* Extracts the metadata from a directory tree 'where'. Extracts two kinds of information: the /etc/os-release +@@ -527,8 +525,6 @@ static int extract_image_and_extensions( + return r; + + if (!strv_isempty(extension_image_paths)) { +- char **p; +- + extension_images = ordered_hashmap_new(&image_hash_ops); + if (!extension_images) + return -ENOMEM; +@@ -1224,8 +1220,6 @@ static int install_image_and_extensions_symlinks( + } + + static bool prefix_matches_compatible(char **matches, char **valid_prefixes) { +- char **m; +- + /* Checks if all 'matches' are included in the list of 'valid_prefixes' */ + + STRV_FOREACH(m, matches) +@@ -1342,7 +1336,6 @@ int portable_attach( + + static bool marker_matches_images(const char *marker, const char *name_or_path, char **extension_image_paths) { + _cleanup_strv_free_ char **root_and_extensions = NULL; +- char **image_name_or_path; + const char *a; + int r; + +diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c +index 60feac6f5d..f4c57e14ae 100644 +--- a/src/portable/portablectl.c ++++ b/src/portable/portablectl.c +@@ -90,7 +90,6 @@ static int determine_image(const char *image, bool permit_non_existing, char **r + } + + static int attach_extensions_to_message(sd_bus_message *m, char **extensions) { +- char **p; + int r; + + assert(m); +@@ -1067,7 +1066,6 @@ static int dump_profiles(void) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_strv_free_ char **l = NULL; +- char **i; + int r; + + r = acquire_bus(&bus); +diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c +index 5b3ceeff36..96a505f5e1 100644 +--- a/src/resolve/resolvectl.c ++++ b/src/resolve/resolvectl.c +@@ -705,7 +705,6 @@ invalid: + + static int verb_query(int argc, char **argv, void *userdata) { + sd_bus *bus = userdata; +- char **p; + int q, r = 0; + + if (arg_type != 0) +@@ -975,7 +974,6 @@ static int resolve_openpgp(sd_bus *bus, const char *address) { + + static int verb_openpgp(int argc, char **argv, void *userdata) { + sd_bus *bus = userdata; +- char **p; + int q, r = 0; + + STRV_FOREACH(p, argv + 1) { +@@ -1025,7 +1023,7 @@ static bool service_family_is_valid(const char *s) { + + static int verb_tlsa(int argc, char **argv, void *userdata) { + sd_bus *bus = userdata; +- char **p, **args = argv + 1; ++ char **args = argv + 1; + const char *family = "tcp"; + int q, r = 0; + +@@ -1389,7 +1387,6 @@ static int status_print_strv_ifindex(int ifindex, const char *ifname, char **p) + printf("%s%nGlobal%n%s:", ansi_highlight(), &pos1, &pos2, ansi_normal()); + + size_t cols = columns(), position = pos2 - pos1 + 2; +- char **i; + + STRV_FOREACH(i, p) { + size_t our_len = utf8_console_width(*i); /* This returns -1 on invalid utf-8 (which shouldn't happen). +@@ -2025,7 +2022,6 @@ static int verb_status(int argc, char **argv, void *userdata) { + int r = 0; + + if (argc > 1) { +- char **ifname; + bool empty_line = false; + + STRV_FOREACH(ifname, argv + 1) { +@@ -2049,7 +2045,6 @@ static int verb_status(int argc, char **argv, void *userdata) { + + static int call_dns(sd_bus *bus, char **dns, const BusLocator *locator, sd_bus_error *error, bool extended) { + _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL; +- char **p; + int r; + + r = bus_message_new_method_call(bus, &req, locator, extended ? "SetLinkDNSEx" : "SetLinkDNS"); +@@ -2157,7 +2152,6 @@ static int verb_dns(int argc, char **argv, void *userdata) { + + static int call_domain(sd_bus *bus, char **domain, const BusLocator *locator, sd_bus_error *error) { + _cleanup_(sd_bus_message_unrefp) sd_bus_message *req = NULL; +- char **p; + int r; + + r = bus_message_new_method_call(bus, &req, locator, "SetLinkDomains"); +@@ -2454,7 +2448,6 @@ static int call_nta(sd_bus *bus, char **nta, const BusLocator *locator, sd_bus_ + static int verb_nta(int argc, char **argv, void *userdata) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + sd_bus *bus = userdata; +- char **p; + int r; + bool clear; + +diff --git a/src/resolve/resolved-dns-trust-anchor.c b/src/resolve/resolved-dns-trust-anchor.c +index b036aa402c..4a6c06d13d 100644 +--- a/src/resolve/resolved-dns-trust-anchor.c ++++ b/src/resolve/resolved-dns-trust-anchor.c +@@ -409,7 +409,6 @@ static int dns_trust_anchor_load_files( + int (*loader)(DnsTrustAnchor *d, const char *path, unsigned n, const char *line)) { + + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + assert(d); +diff --git a/src/resolve/resolved-dnssd.c b/src/resolve/resolved-dnssd.c +index ab2773e4e4..a05bd20199 100644 +--- a/src/resolve/resolved-dnssd.c ++++ b/src/resolve/resolved-dnssd.c +@@ -186,7 +186,6 @@ int dnssd_render_instance_name(DnssdService *s, char **ret_name) { + + int dnssd_load(Manager *manager) { + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + assert(manager); +diff --git a/src/resolve/resolved-etc-hosts.c b/src/resolve/resolved-etc-hosts.c +index 9af3a27bb1..c33bbbeb79 100644 +--- a/src/resolve/resolved-etc-hosts.c ++++ b/src/resolve/resolved-etc-hosts.c +@@ -189,7 +189,6 @@ static void strip_localhost(EtcHosts *hosts) { + + for (size_t j = 0; j < ELEMENTSOF(local_in_addrs); j++) { + bool all_localhost, in_order; +- char **i; + + item = hashmap_get(hosts->by_address, local_in_addrs + j); + if (!item) +@@ -389,8 +388,6 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) { + } + + if (found_ptr) { +- char **n; +- + r = dns_answer_reserve(answer, strv_length(item->names)); + if (r < 0) + return r; +diff --git a/src/resolve/resolved-link-bus.c b/src/resolve/resolved-link-bus.c +index 8d533d7ecf..97f6eb70ca 100644 +--- a/src/resolve/resolved-link-bus.c ++++ b/src/resolve/resolved-link-bus.c +@@ -706,7 +706,6 @@ int bus_link_method_set_dnssec_negative_trust_anchors(sd_bus_message *message, v + _cleanup_free_ char *j = NULL; + Link *l = userdata; + int r; +- char **i; + + assert(message); + assert(l); +diff --git a/src/resolve/resolved-link.c b/src/resolve/resolved-link.c +index 6c910498a2..e6b46aed8e 100644 +--- a/src/resolve/resolved-link.c ++++ b/src/resolve/resolved-link.c +@@ -282,7 +282,6 @@ static int link_update_dns_server_one(Link *l, const char *str) { + + static int link_update_dns_servers(Link *l) { + _cleanup_strv_free_ char **nameservers = NULL; +- char **nameserver; + int r; + + assert(l); +@@ -511,7 +510,6 @@ static int link_update_search_domain_one(Link *l, const char *name, bool route_o + + static int link_update_search_domains(Link *l) { + _cleanup_strv_free_ char **sdomains = NULL, **rdomains = NULL; +- char **i; + int r, q; + + assert(l); +diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c +index 1cf14e71fc..fb62209704 100644 +--- a/src/run-generator/run-generator.c ++++ b/src/run-generator/run-generator.c +@@ -55,7 +55,6 @@ static int parse(const char *key, const char *value, void *data) { + static int generate(void) { + _cleanup_fclose_ FILE *f = NULL; + const char *p; +- char **c; + int r; + + if (strv_isempty(arg_commands) && !arg_success_action) +diff --git a/src/shared/acl-util.c b/src/shared/acl-util.c +index 3f286a888b..2bdc529b80 100644 +--- a/src/shared/acl-util.c ++++ b/src/shared/acl-util.c +@@ -212,7 +212,6 @@ int acl_search_groups(const char *path, char ***ret_groups) { + int parse_acl(const char *text, acl_t *acl_access, acl_t *acl_default, bool want_mask) { + _cleanup_free_ char **a = NULL, **d = NULL; /* strings are not freed */ + _cleanup_strv_free_ char **split = NULL; +- char **entry; + int r = -EINVAL; + _cleanup_(acl_freep) acl_t a_acl = NULL, d_acl = NULL; + +diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c +index a17375eb4c..4c39ce2f0e 100644 +--- a/src/shared/bootspec.c ++++ b/src/shared/bootspec.c +@@ -256,7 +256,6 @@ static int boot_entries_find( + size_t *n_entries) { + + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + assert(root); +@@ -771,8 +770,6 @@ int boot_entries_augment_from_loader( + "auto-reboot-to-firmware-setup", "Reboot Into Firmware Interface", + }; + +- char **i; +- + assert(config); + + /* Let's add the entries discovered by the boot loader to the end of our list, unless they are +@@ -780,7 +777,6 @@ int boot_entries_augment_from_loader( + + STRV_FOREACH(i, found_by_loader) { + _cleanup_free_ char *c = NULL, *t = NULL, *p = NULL; +- char **a, **b; + + if (boot_config_has_entry(config, *i)) + continue; +diff --git a/src/shared/bus-polkit.c b/src/shared/bus-polkit.c +index bbe04bea37..4d733a8173 100644 +--- a/src/shared/bus-polkit.c ++++ b/src/shared/bus-polkit.c +@@ -36,7 +36,6 @@ static int bus_message_append_strv_key_value( + sd_bus_message *m, + const char **l) { + +- const char **k, **v; + int r; + + assert(m); +diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c +index ef134bcee4..c211fe34d5 100644 +--- a/src/shared/bus-unit-util.c ++++ b/src/shared/bus-unit-util.c +@@ -1674,7 +1674,6 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con + + if (streq(field, "RootImageOptions")) { + _cleanup_strv_free_ char **l = NULL; +- char **first = NULL, **second = NULL; + const char *p = eq; + + r = sd_bus_message_open_container(m, SD_BUS_TYPE_STRUCT, "sv"); +@@ -2023,7 +2022,6 @@ static int bus_append_execute_property(sd_bus_message *m, const char *field, con + if (r < 0) + return bus_log_create_error(r); + +- char **source, **destination; + STRV_FOREACH_PAIR(source, destination, symlinks) { + r = sd_bus_message_append(m, "(sst)", *source, *destination, 0); + if (r < 0) +@@ -2647,7 +2645,6 @@ int bus_append_unit_property_assignment(sd_bus_message *m, UnitType t, const cha + } + + int bus_append_unit_property_assignment_many(sd_bus_message *m, UnitType t, char **l) { +- char **i; + int r; + + assert(m); +diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c +index 4a2b7684bc..a907b67a70 100644 +--- a/src/shared/bus-util.c ++++ b/src/shared/bus-util.c +@@ -490,7 +490,6 @@ int bus_path_decode_unique(const char *path, const char *prefix, char **ret_send + + int bus_track_add_name_many(sd_bus_track *t, char **l) { + int r = 0; +- char **i; + + assert(t); + +@@ -562,7 +561,6 @@ int bus_open_system_watch_bind_with_description(sd_bus **ret, const char *descri + + int bus_reply_pair_array(sd_bus_message *m, char **l) { + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; +- char **k, **v; + int r; + + assert(m); +diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c +index 8bda66ca36..3532d55286 100644 +--- a/src/shared/cgroup-setup.c ++++ b/src/shared/cgroup-setup.c +@@ -22,7 +22,6 @@ + static int cg_any_controller_used_for_v1(void) { + _cleanup_free_ char *buf = NULL; + _cleanup_strv_free_ char **lines = NULL; +- char **line; + int r; + + r = read_full_virtual_file("/proc/cgroups", &buf, NULL); +diff --git a/src/shared/condition.c b/src/shared/condition.c +index 21f3714eba..d0f2ebfc23 100644 +--- a/src/shared/condition.c ++++ b/src/shared/condition.c +@@ -830,7 +830,6 @@ static int condition_test_first_boot(Condition *c, char **env) { + + static int condition_test_environment(Condition *c, char **env) { + bool equal; +- char **i; + + assert(c); + assert(c->parameter); +diff --git a/src/shared/conf-parser.c b/src/shared/conf-parser.c +index 1e1967d7ea..d19041207c 100644 +--- a/src/shared/conf-parser.c ++++ b/src/shared/conf-parser.c +@@ -474,7 +474,6 @@ static int config_parse_many_files( + + _cleanup_hashmap_free_ Hashmap *stats_by_path = NULL; + struct stat st; +- char **fn; + int r; + + if (ret_stats_by_path) { +diff --git a/src/shared/discover-image.c b/src/shared/discover-image.c +index 1d432328e7..3f1644ea85 100644 +--- a/src/shared/discover-image.c ++++ b/src/shared/discover-image.c +@@ -632,7 +632,6 @@ int image_remove(Image *i) { + _cleanup_(release_lock_file) LockFile global_lock = LOCK_FILE_INIT, local_lock = LOCK_FILE_INIT; + _cleanup_strv_free_ char **settings = NULL; + _cleanup_free_ char *roothash = NULL; +- char **j; + int r; + + assert(i); +@@ -695,10 +694,9 @@ int image_remove(Image *i) { + return -EOPNOTSUPP; + } + +- STRV_FOREACH(j, settings) { ++ STRV_FOREACH(j, settings) + if (unlink(*j) < 0 && errno != ENOENT) + log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", *j); +- } + + if (unlink(roothash) < 0 && errno != ENOENT) + log_debug_errno(errno, "Failed to unlink %s, ignoring: %m", roothash); +@@ -724,7 +722,6 @@ int image_rename(Image *i, const char *new_name) { + _cleanup_free_ char *new_path = NULL, *nn = NULL, *roothash = NULL; + _cleanup_strv_free_ char **settings = NULL; + unsigned file_attr = 0; +- char **j; + int r; + + assert(i); +@@ -845,7 +842,6 @@ int image_clone(Image *i, const char *new_name, bool read_only) { + _cleanup_strv_free_ char **settings = NULL; + _cleanup_free_ char *roothash = NULL; + const char *new_path; +- char **j; + int r; + + assert(i); +diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c +index b38f16c37a..79438c69d2 100644 +--- a/src/shared/dissect-image.c ++++ b/src/shared/dissect-image.c +@@ -2208,7 +2208,6 @@ static int validate_signature_userspace(const VeritySettings *verity) { + _cleanup_(BIO_freep) BIO *bio = NULL; /* 'bio' must be freed first, 's' second, hence keep this order + * of declaration in place, please */ + const unsigned char *d; +- char **i; + int r; + + assert(verity); +diff --git a/src/shared/dropin.c b/src/shared/dropin.c +index eb016eb114..375a3ca600 100644 +--- a/src/shared/dropin.c ++++ b/src/shared/dropin.c +@@ -232,7 +232,6 @@ int unit_file_find_dropin_paths( + + _cleanup_strv_free_ char **dirs = NULL; + const char *n; +- char **p; + int r; + + assert(ret); +diff --git a/src/shared/exec-util.c b/src/shared/exec-util.c +index b93de9c922..918f997e5a 100644 +--- a/src/shared/exec-util.c ++++ b/src/shared/exec-util.c +@@ -91,7 +91,6 @@ static int do_execute( + + _cleanup_hashmap_free_free_ Hashmap *pids = NULL; + _cleanup_strv_free_ char **paths = NULL; +- char **path, **e; + int r; + bool parallel_execution; + +@@ -254,7 +253,7 @@ int execute_directories( + } + + static int gather_environment_generate(int fd, void *arg) { +- char ***env = arg, **x, **y; ++ char ***env = arg; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_strv_free_ char **new = NULL; + int r; +@@ -369,7 +368,6 @@ static int gather_environment_consume(int fd, void *arg) { + + int exec_command_flags_from_strv(char **ex_opts, ExecCommandFlags *flags) { + ExecCommandFlags ex_flag, ret_flags = 0; +- char **opt; + + assert(flags); + +diff --git a/src/shared/format-table.c b/src/shared/format-table.c +index b95680b365..b756c5286b 100644 +--- a/src/shared/format-table.c ++++ b/src/shared/format-table.c +@@ -1364,7 +1364,6 @@ static char* format_strv_width(char **strv, size_t column_width) { + return NULL; + + size_t position = 0; +- char **p; + STRV_FOREACH(p, strv) { + size_t our_len = utf8_console_width(*p); /* This returns -1 on invalid utf-8 (which shouldn't happen). + * If that happens, we'll just print one item per line. */ +diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c +index fe4785f3e5..f98d03f766 100644 +--- a/src/shared/hwdb-util.c ++++ b/src/shared/hwdb-util.c +@@ -434,7 +434,7 @@ static int trie_store(struct trie *trie, const char *filename, bool compat) { + + static int insert_data(struct trie *trie, char **match_list, char *line, const char *filename, + uint16_t file_priority, uint32_t line_number, bool compat) { +- char *value, **entry; ++ char *value; + + assert(line[0] == ' '); + +@@ -583,7 +583,6 @@ int hwdb_update(const char *root, const char *hwdb_bin_dir, bool strict, bool co + _cleanup_free_ char *hwdb_bin = NULL; + _cleanup_(trie_freep) struct trie *trie = NULL; + _cleanup_strv_free_ char **files = NULL; +- char **f; + uint16_t file_priority = 1; + int r = 0, err; + +diff --git a/src/shared/install.c b/src/shared/install.c +index f1ee3c2716..785ef55dbd 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -874,7 +874,6 @@ static int find_symlinks_in_scope( + bool same_name_link_runtime = false, same_name_link_config = false; + bool enabled_in_runtime = false, enabled_at_all = false; + bool ignore_same_name = false; +- char **p; + int r; + + assert(lp); +@@ -1381,7 +1380,6 @@ static int unit_file_search( + _cleanup_free_ char *template = NULL; + bool found_unit = false; + int r, result; +- char **p; + + assert(info); + assert(lp); +@@ -1796,7 +1794,6 @@ static int install_info_symlink_alias( + UnitFileChange **changes, + size_t *n_changes) { + +- char **s; + int r = 0, q; + + assert(info); +@@ -1846,7 +1843,6 @@ static int install_info_symlink_wants( + _cleanup_free_ char *buf = NULL; + UnitNameFlags valid_dst_type = UNIT_NAME_ANY; + const char *n; +- char **s; + int r = 0, q; + + assert(info); +@@ -2150,7 +2146,6 @@ int unit_file_mask( + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + const char *config_path; +- char **i; + int r; + + assert(scope >= 0); +@@ -2199,7 +2194,6 @@ int unit_file_unmask( + _cleanup_strv_free_ char **todo = NULL; + const char *config_path; + size_t n_todo = 0; +- char **i; + int r, q; + + assert(scope >= 0); +@@ -2291,7 +2285,6 @@ int unit_file_link( + _cleanup_strv_free_ char **todo = NULL; + const char *config_path; + size_t n_todo = 0; +- char **i; + int r, q; + + assert(scope >= 0); +@@ -2391,7 +2384,6 @@ int unit_file_revert( + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_strv_free_ char **todo = NULL; + size_t n_todo = 0; +- char **i; + int r, q; + + /* Puts a unit file back into vendor state. This means: +@@ -2411,7 +2403,6 @@ int unit_file_revert( + + STRV_FOREACH(i, files) { + bool has_vendor = false; +- char **p; + + if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) + return -EINVAL; +@@ -2495,7 +2486,6 @@ int unit_file_revert( + STRV_FOREACH(i, todo) { + _cleanup_strv_free_ char **fs = NULL; + const char *rp; +- char **j; + + (void) get_files_in_directory(*i, &fs); + +@@ -2548,7 +2538,6 @@ int unit_file_add_dependency( + _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; + UnitFileInstallInfo *info, *target_info; + const char *config_path; +- char **f; + int r; + + assert(scope >= 0); +@@ -2617,7 +2606,6 @@ int unit_file_enable( + _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; + const char *config_path; + UnitFileInstallInfo *info; +- char **f; + int r; + + assert(scope >= 0); +@@ -2661,7 +2649,6 @@ int unit_file_disable( + _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; + _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; + const char *config_path; +- char **i; + int r; + + assert(scope >= 0); +@@ -2979,7 +2966,6 @@ static int presets_find_config(UnitFileScope scope, const char *root_dir, char * + static int read_presets(UnitFileScope scope, const char *root_dir, UnitFilePresets *presets) { + _cleanup_(unit_file_presets_freep) UnitFilePresets ps = {}; + _cleanup_strv_free_ char **files = NULL; +- char **p; + int r; + + assert(scope >= 0); +@@ -3097,7 +3083,6 @@ static int pattern_match_multiple_instances( + if (unit_name_is_valid(unit_name, UNIT_NAME_TEMPLATE)) { + _cleanup_strv_free_ char **out_strv = NULL; + +- char **iter; + STRV_FOREACH(iter, rule.instances) { + _cleanup_free_ char *name = NULL; + +@@ -3144,11 +3129,10 @@ static int query_presets(const char *name, const UnitFilePresets *presets, char + log_debug("Preset files don't specify rule for %s. Enabling.", name); + return 1; + case PRESET_ENABLE: +- if (instance_name_list && *instance_name_list) { +- char **s; ++ if (instance_name_list && *instance_name_list) + STRV_FOREACH(s, *instance_name_list) + log_debug("Preset files say enable %s.", *s); +- } else ++ else + log_debug("Preset files say enable %s.", name); + return 1; + case PRESET_DISABLE: +@@ -3254,15 +3238,14 @@ static int preset_prepare_one( + return r; + + if (r > 0) { +- if (instance_name_list) { +- char **s; ++ if (instance_name_list) + STRV_FOREACH(s, instance_name_list) { + r = install_info_discover_and_check(plus, lp, *s, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &info, changes, n_changes); + if (r < 0) + return r; + } +- } else { ++ else { + r = install_info_discover_and_check(plus, lp, name, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &info, changes, n_changes); + if (r < 0) +@@ -3289,7 +3272,6 @@ int unit_file_preset( + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {}; + const char *config_path; +- char **i; + int r; + + assert(scope >= 0); +@@ -3329,7 +3311,6 @@ int unit_file_preset_all( + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(unit_file_presets_freep) UnitFilePresets presets = {}; + const char *config_path = NULL; +- char **i; + int r; + + assert(scope >= 0); +@@ -3401,7 +3382,6 @@ int unit_file_get_list( + char **patterns) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- char **dirname; + int r; + + assert(scope >= 0); +diff --git a/src/shared/libcrypt-util.c b/src/shared/libcrypt-util.c +index 5b315413aa..0d72032f53 100644 +--- a/src/shared/libcrypt-util.c ++++ b/src/shared/libcrypt-util.c +@@ -197,7 +197,6 @@ int test_password_one(const char *hashed_password, const char *password) { + } + + int test_password_many(char **hashed_password, const char *password) { +- char **hpw; + int r; + + STRV_FOREACH(hpw, hashed_password) { +diff --git a/src/shared/libfido2-util.c b/src/shared/libfido2-util.c +index 87b88f04d6..8c9fa88e32 100644 +--- a/src/shared/libfido2-util.c ++++ b/src/shared/libfido2-util.c +@@ -313,8 +313,6 @@ static int fido2_use_hmac_hash_specific_token( + bool retry_with_up = false, retry_with_pin = false; + + if (FLAGS_SET(required, FIDO2ENROLL_PIN)) { +- char **i; +- + /* OK, we need a pin, try with all pins in turn */ + if (strv_isempty(pins)) + r = FIDO_ERR_PIN_REQUIRED; +@@ -683,7 +681,6 @@ int fido2_generate_hmac_hash( + + for (;;) { + _cleanup_(strv_free_erasep) char **pin = NULL; +- char **i; + + r = ask_password_auto("Please enter security token PIN:", askpw_icon_name, NULL, "fido2-pin", "fido2-pin", USEC_INFINITY, 0, &pin); + if (r < 0) +diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c +index 7eadff3ace..975c027f47 100644 +--- a/src/shared/mount-setup.c ++++ b/src/shared/mount-setup.c +@@ -244,8 +244,6 @@ static const char *join_with(const char *controller) { + NULL + }; + +- const char *const *x, *const *y; +- + assert(controller); + + /* This will lookup which controller to mount another controller with. Input is a controller name, and output +@@ -433,7 +431,6 @@ static int relabel_cgroup_filesystems(void) { + + static int relabel_extra(void) { + _cleanup_strv_free_ char **files = NULL; +- char **file; + int r, c = 0; + + /* Support for relabelling additional files or directories after loading the policy. For this, code in the +diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c +index c75c02f5be..12c7044f04 100644 +--- a/src/shared/mount-util.c ++++ b/src/shared/mount-util.c +@@ -274,7 +274,6 @@ int bind_remount_recursive_with_mountinfo( + * we shall operate on. */ + if (!path_equal(path, prefix)) { + bool deny_listed = false; +- char **i; + + STRV_FOREACH(i, deny_list) { + if (path_equal(*i, prefix)) +diff --git a/src/shared/net-condition.c b/src/shared/net-condition.c +index 006676d973..2bb4c0b509 100644 +--- a/src/shared/net-condition.c ++++ b/src/shared/net-condition.c +@@ -46,7 +46,6 @@ bool net_match_is_empty(const NetMatch *match) { + } + + static bool net_condition_test_strv(char * const *patterns, const char *string) { +- char * const *p; + bool match = false, has_positive_rule = false; + + if (strv_isempty(patterns)) +@@ -77,7 +76,6 @@ static bool net_condition_test_ifname(char * const *patterns, const char *ifname + if (net_condition_test_strv(patterns, ifname)) + return true; + +- char * const *p; + STRV_FOREACH(p, alternative_names) + if (net_condition_test_strv(patterns, *p)) + return true; +@@ -86,8 +84,6 @@ static bool net_condition_test_ifname(char * const *patterns, const char *ifname + } + + static int net_condition_test_property(char * const *match_property, sd_device *device) { +- char * const *p; +- + if (strv_isempty(match_property)) + return true; + +diff --git a/src/shared/nscd-flush.c b/src/shared/nscd-flush.c +index 0655030633..95dfe24b22 100644 +--- a/src/shared/nscd-flush.c ++++ b/src/shared/nscd-flush.c +@@ -132,7 +132,6 @@ static int nscd_flush_cache_one(const char *database, usec_t end) { + int nscd_flush_cache(char **databases) { + usec_t end; + int r = 0; +- char **i; + + /* Tries to invalidate the specified database in nscd. We do this carefully, with a 5s timeout, so that we + * don't block indefinitely on another service. */ +diff --git a/src/shared/pkcs11-util.c b/src/shared/pkcs11-util.c +index 67ea44515a..4f9ec1fbd6 100644 +--- a/src/shared/pkcs11-util.c ++++ b/src/shared/pkcs11-util.c +@@ -275,7 +275,7 @@ int pkcs11_token_login( + + for (unsigned tries = 0; tries < 3; tries++) { + _cleanup_strv_free_erase_ char **passwords = NULL; +- char **i, *e; ++ char *e; + + e = getenv("PIN"); + if (e) { +diff --git a/src/shared/pretty-print.c b/src/shared/pretty-print.c +index 26daec3450..98619c25d4 100644 +--- a/src/shared/pretty-print.c ++++ b/src/shared/pretty-print.c +@@ -168,7 +168,6 @@ static int cat_file(const char *filename, bool newline) { + } + + int cat_files(const char *file, char **dropins, CatFlags flags) { +- char **path; + int r; + + if (file) { +@@ -284,10 +283,9 @@ static int guess_type(const char **name, char ***prefixes, bool *is_collection, + int conf_files_cat(const char *root, const char *name) { + _cleanup_strv_free_ char **dirs = NULL, **files = NULL; + _cleanup_free_ char *path = NULL; +- char **prefix, **prefixes = NULL; /* explicit initialization to appease gcc */ ++ char **prefixes = NULL; /* explicit initialization to appease gcc */ + bool is_collection; + const char *extension; +- char **t; + int r; + + r = guess_type(&name, &prefixes, &is_collection, &extension); +diff --git a/src/shared/seccomp-util.c b/src/shared/seccomp-util.c +index 32bd8aa73b..e597a156cf 100644 +--- a/src/shared/seccomp-util.c ++++ b/src/shared/seccomp-util.c +@@ -1837,7 +1837,6 @@ int seccomp_restrict_archs(Set *archs) { + + int parse_syscall_archs(char **l, Set **ret_archs) { + _cleanup_set_free_ Set *archs = NULL; +- char **s; + int r; + + assert(l); +diff --git a/src/shared/serialize.c b/src/shared/serialize.c +index 47996b9ead..cd48286355 100644 +--- a/src/shared/serialize.c ++++ b/src/shared/serialize.c +@@ -117,7 +117,6 @@ int serialize_dual_timestamp(FILE *f, const char *name, const dual_timestamp *t) + + int serialize_strv(FILE *f, const char *key, char **l) { + int ret = 0, r; +- char **i; + + /* Returns the first error, or positive if anything was serialized, 0 otherwise. */ + +diff --git a/src/shared/tests.c b/src/shared/tests.c +index 307f796fe2..70fbbb45a5 100644 +--- a/src/shared/tests.c ++++ b/src/shared/tests.c +@@ -51,7 +51,6 @@ static void load_testdata_env(void) { + _cleanup_free_ char *s = NULL; + _cleanup_free_ char *envpath = NULL; + _cleanup_strv_free_ char **pairs = NULL; +- char **k, **v; + + if (called) + return; +diff --git a/src/shared/user-record-show.c b/src/shared/user-record-show.c +index 7c2751f3a7..95895a8e45 100644 +--- a/src/shared/user-record-show.c ++++ b/src/shared/user-record-show.c +@@ -143,7 +143,6 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) { + break; + } + bool has_valid_passwords = false; +- char **p; + STRV_FOREACH(p, hr->hashed_password) + if (!hashed_password_is_locked_or_invalid(*p)) { + has_valid_passwords = true; +@@ -240,15 +239,12 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) { + if (hr->preferred_language) + printf(" Language: %s\n", hr->preferred_language); + +- if (!strv_isempty(hr->environment)) { +- char **i; +- ++ if (!strv_isempty(hr->environment)) + STRV_FOREACH(i, hr->environment) { + printf(i == hr->environment ? + " Environment: %s\n" : + " %s\n", *i); + } +- } + + if (hr->locked >= 0) + printf(" Locked: %s\n", yes_no(hr->locked)); +@@ -478,14 +474,11 @@ void user_record_show(UserRecord *hr, bool show_full_group_info) { + if (!strv_isempty(hr->ssh_authorized_keys)) + printf("SSH Pub. Key: %zu\n", strv_length(hr->ssh_authorized_keys)); + +- if (!strv_isempty(hr->pkcs11_token_uri)) { +- char **i; +- ++ if (!strv_isempty(hr->pkcs11_token_uri)) + STRV_FOREACH(i, hr->pkcs11_token_uri) + printf(i == hr->pkcs11_token_uri ? + "PKCS11 Token: %s\n" : + " %s\n", *i); +- } + + if (hr->n_fido2_hmac_credential > 0) + printf(" FIDO2 Token: %zu\n", hr->n_fido2_hmac_credential); +@@ -558,7 +551,6 @@ void group_record_show(GroupRecord *gr, bool show_full_user_info) { + } + } else { + const char *prefix = " Members:"; +- char **i; + + STRV_FOREACH(i, gr->members) { + printf("%s %s\n", prefix, *i); +@@ -568,7 +560,6 @@ void group_record_show(GroupRecord *gr, bool show_full_user_info) { + + if (!strv_isempty(gr->administrators)) { + const char *prefix = " Admins:"; +- char **i; + + STRV_FOREACH(i, gr->administrators) { + printf("%s %s\n", prefix, *i); +diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c +index 7064f3a905..f108529bbd 100644 +--- a/src/sleep/sleep.c ++++ b/src/sleep/sleep.c +@@ -85,7 +85,6 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca + + static int write_mode(char **modes) { + int r = 0; +- char **mode; + + STRV_FOREACH(mode, modes) { + int k; +@@ -103,7 +102,6 @@ static int write_mode(char **modes) { + } + + static int write_state(FILE **f, char **states) { +- char **state; + int r = 0; + + assert(f); +diff --git a/src/sysctl/sysctl.c b/src/sysctl/sysctl.c +index 408ac3b8be..24c8baab03 100644 +--- a/src/sysctl/sysctl.c ++++ b/src/sysctl/sysctl.c +@@ -51,8 +51,6 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(Option*, option_free); + DEFINE_HASH_OPS_WITH_VALUE_DESTRUCTOR(option_hash_ops, char, string_hash_func, string_compare_func, Option, option_free); + + static bool test_prefix(const char *p) { +- char **i; +- + if (strv_isempty(arg_prefixes)) + return true; + +@@ -131,7 +129,6 @@ static int apply_all(OrderedHashmap *sysctl_options) { + if (string_is_glob(option->key)) { + _cleanup_strv_free_ char **paths = NULL; + _cleanup_free_ char *pattern = NULL; +- char **s; + + pattern = path_join("/proc/sys", option->key); + if (!pattern) +@@ -403,7 +400,6 @@ static int run(int argc, char *argv[]) { + } + } else { + _cleanup_strv_free_ char **files = NULL; +- char **f; + + r = conf_files_list_strv(&files, ".conf", NULL, 0, (const char**) CONF_PATHS_STRV("sysctl.d")); + if (r < 0) +diff --git a/src/sysext/sysext.c b/src/sysext/sysext.c +index 5abf1bb418..6a2dc16ab9 100644 +--- a/src/sysext/sysext.c ++++ b/src/sysext/sysext.c +@@ -123,7 +123,6 @@ static int unmerge_hierarchy(const char *p) { + + static int unmerge(void) { + int r, ret = 0; +- char **p; + + STRV_FOREACH(p, arg_hierarchies) { + _cleanup_free_ char *resolved = NULL; +@@ -160,7 +159,6 @@ static int verb_unmerge(int argc, char **argv, void *userdata) { + static int verb_status(int argc, char **argv, void *userdata) { + _cleanup_(table_unrefp) Table *t = NULL; + int r, ret = 0; +- char **p; + + t = table_new("hierarchy", "extensions", "since"); + if (!t) +@@ -244,7 +242,6 @@ static int mount_overlayfs( + + _cleanup_free_ char *options = NULL; + bool separator = false; +- char **l; + int r; + + assert(where); +@@ -284,7 +281,6 @@ static int merge_hierarchy( + _cleanup_free_ char *resolved_hierarchy = NULL, *f = NULL, *buf = NULL; + _cleanup_strv_free_ char **layers = NULL; + struct stat st; +- char **p; + int r; + + assert(hierarchy); +@@ -452,7 +448,6 @@ static int merge_subprocess(Hashmap *images, const char *workspace) { + size_t n_extensions = 0; + unsigned n_ignored = 0; + Image *img; +- char **h; + int r; + + /* Mark the whole of /run as MS_SLAVE, so that we can mount stuff below it that doesn't show up on +@@ -759,7 +754,6 @@ static int image_discover_and_read_metadata(Hashmap **ret_images) { + + static int verb_merge(int argc, char **argv, void *userdata) { + _cleanup_(hashmap_freep) Hashmap *images = NULL; +- char **p; + int r; + + if (!have_effective_cap(CAP_SYS_ADMIN)) +diff --git a/src/systemctl/systemctl-cancel-job.c b/src/systemctl/systemctl-cancel-job.c +index 4c5203c1f9..647e70767e 100644 +--- a/src/systemctl/systemctl-cancel-job.c ++++ b/src/systemctl/systemctl-cancel-job.c +@@ -10,7 +10,6 @@ + + int cancel_job(int argc, char *argv[], void *userdata) { + sd_bus *bus; +- char **name; + int r; + + if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */ +diff --git a/src/systemctl/systemctl-clean-or-freeze.c b/src/systemctl/systemctl-clean-or-freeze.c +index fb4d643517..dc44110c72 100644 +--- a/src/systemctl/systemctl-clean-or-freeze.c ++++ b/src/systemctl/systemctl-clean-or-freeze.c +@@ -11,7 +11,6 @@ int clean_or_freeze_unit(int argc, char *argv[], void *userdata) { + _cleanup_(bus_wait_for_units_freep) BusWaitForUnits *w = NULL; + _cleanup_strv_free_ char **names = NULL; + int r, ret = EXIT_SUCCESS; +- char **name; + const char *method; + sd_bus *bus; + +diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c +index 92abd15636..328168e4bb 100644 +--- a/src/systemctl/systemctl-edit.c ++++ b/src/systemctl/systemctl-edit.c +@@ -26,7 +26,6 @@ int cat(int argc, char *argv[], void *userdata) { + _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL; + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_strv_free_ char **names = NULL; +- char **name; + sd_bus *bus; + bool first = true; + int r, rc = 0; +@@ -145,7 +144,6 @@ static int create_edit_temp_file(const char *new_path, const char *original_path + } else if (original_unit_paths) { + _cleanup_free_ char *new_contents = NULL; + _cleanup_fclose_ FILE *f = NULL; +- char **path; + + r = mac_selinux_create_file_prepare(new_path, S_IFREG); + if (r < 0) +@@ -318,7 +316,7 @@ static int run_editor(char **paths) { + if (r < 0) + return r; + if (r == 0) { +- char **editor_args = NULL, **tmp_path, **original_path; ++ char **editor_args = NULL; + size_t n_editor_args = 0, i = 1, argc; + const char **args, *editor; + +@@ -379,7 +377,6 @@ static int run_editor(char **paths) { + static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) { + _cleanup_(hashmap_freep) Hashmap *cached_name_map = NULL, *cached_id_map = NULL; + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- char **name; + int r; + + assert(names); +@@ -501,7 +498,6 @@ int edit(int argc, char *argv[], void *userdata) { + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_strv_free_ char **names = NULL; + _cleanup_strv_free_ char **paths = NULL; +- char **original, **tmp; + sd_bus *bus; + int r; + +diff --git a/src/systemctl/systemctl-enable.c b/src/systemctl/systemctl-enable.c +index 7860f3dc6c..6266363f00 100644 +--- a/src/systemctl/systemctl-enable.c ++++ b/src/systemctl/systemctl-enable.c +@@ -12,7 +12,6 @@ + #include "systemctl.h" + + static int normalize_filenames(char **names) { +- char **u; + int r; + + STRV_FOREACH(u, names) +@@ -40,7 +39,6 @@ static int normalize_filenames(char **names) { + } + + static int normalize_names(char **names, bool warn_if_path) { +- char **u; + bool was_path = false; + + STRV_FOREACH(u, names) { +@@ -139,7 +137,6 @@ int enable_unit(int argc, char *argv[], void *userdata) { + sd_bus *bus; + + if (STR_IN_SET(verb, "mask", "unmask")) { +- char **name; + _cleanup_(lookup_paths_free) LookupPaths lp = {}; + + r = lookup_paths_init_or_warn(&lp, arg_scope, 0, arg_root); +diff --git a/src/systemctl/systemctl-is-active.c b/src/systemctl/systemctl-is-active.c +index d83736e94a..e7c8431ac6 100644 +--- a/src/systemctl/systemctl-is-active.c ++++ b/src/systemctl/systemctl-is-active.c +@@ -13,7 +13,6 @@ static int check_unit_generic(int code, const UnitActiveState good_states[], int + _cleanup_strv_free_ char **names = NULL; + UnitActiveState active_state; + sd_bus *bus; +- char **name; + int r; + bool found = false; + +diff --git a/src/systemctl/systemctl-is-enabled.c b/src/systemctl/systemctl-is-enabled.c +index e33dffaf29..eaf25217a8 100644 +--- a/src/systemctl/systemctl-is-enabled.c ++++ b/src/systemctl/systemctl-is-enabled.c +@@ -59,7 +59,6 @@ static int show_installation_targets(sd_bus *bus, const char *name) { + int unit_is_enabled(int argc, char *argv[], void *userdata) { + _cleanup_strv_free_ char **names = NULL; + bool enabled; +- char **name; + int r; + + r = mangle_names("to check", strv_skip(argv, 1), &names); +diff --git a/src/systemctl/systemctl-kill.c b/src/systemctl/systemctl-kill.c +index 489e754752..94489423e8 100644 +--- a/src/systemctl/systemctl-kill.c ++++ b/src/systemctl/systemctl-kill.c +@@ -8,7 +8,7 @@ + + int kill_unit(int argc, char *argv[], void *userdata) { + _cleanup_strv_free_ char **names = NULL; +- char *kill_who = NULL, **name; ++ char *kill_who = NULL; + sd_bus *bus; + int r, q; + +diff --git a/src/systemctl/systemctl-list-dependencies.c b/src/systemctl/systemctl-list-dependencies.c +index a536240a9f..4d58869416 100644 +--- a/src/systemctl/systemctl-list-dependencies.c ++++ b/src/systemctl/systemctl-list-dependencies.c +@@ -63,7 +63,6 @@ static int list_dependencies_one( + unsigned branches) { + + _cleanup_strv_free_ char **deps = NULL; +- char **c; + int r; + + assert(bus); +@@ -138,7 +137,7 @@ static int list_dependencies_one( + + int list_dependencies(int argc, char *argv[], void *userdata) { + _cleanup_strv_free_ char **units = NULL, **done = NULL; +- char **u, **patterns; ++ char **patterns; + sd_bus *bus; + int r; + +diff --git a/src/systemctl/systemctl-list-machines.c b/src/systemctl/systemctl-list-machines.c +index b4eb0bd4b6..6d0acc4d50 100644 +--- a/src/systemctl/systemctl-list-machines.c ++++ b/src/systemctl/systemctl-list-machines.c +@@ -93,7 +93,6 @@ static int get_machine_list( + struct machine_info *machine_infos = NULL; + _cleanup_strv_free_ char **m = NULL; + _cleanup_free_ char *hn = NULL; +- char **i; + int c = 0, r; + + hn = gethostname_malloc(); +diff --git a/src/systemctl/systemctl-list-units.c b/src/systemctl/systemctl-list-units.c +index 0c405fb7e8..35037d29ba 100644 +--- a/src/systemctl/systemctl-list-units.c ++++ b/src/systemctl/systemctl-list-units.c +@@ -49,7 +49,6 @@ static int get_unit_list_recursive( + + if (arg_recursive) { + _cleanup_strv_free_ char **machines = NULL; +- char **i; + + r = sd_get_machine_names(&machines); + if (r < 0) +diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c +index 114641cdc7..843f6141ab 100644 +--- a/src/systemctl/systemctl-logind.c ++++ b/src/systemctl/systemctl-logind.c +@@ -112,7 +112,6 @@ int logind_check_inhibitors(enum action a) { + uint32_t uid, pid; + sd_bus *bus; + unsigned c = 0; +- char **s; + int r; + + if (arg_check_inhibitors == 0 || arg_force > 0) +@@ -412,7 +411,6 @@ int help_boot_loader_entry(void) { + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; + _cleanup_strv_free_ char **l = NULL; + sd_bus *bus; +- char **i; + int r; + + r = acquire_bus(BUS_FULL, &bus); +diff --git a/src/systemctl/systemctl-reset-failed.c b/src/systemctl/systemctl-reset-failed.c +index eee7586465..0b7e01429f 100644 +--- a/src/systemctl/systemctl-reset-failed.c ++++ b/src/systemctl/systemctl-reset-failed.c +@@ -10,7 +10,6 @@ + int reset_failed(int argc, char *argv[], void *userdata) { + _cleanup_strv_free_ char **names = NULL; + sd_bus *bus; +- char **name; + int r, q; + + if (argc <= 1) /* Shortcut to trivial_method() if no argument is given */ +diff --git a/src/systemctl/systemctl-set-environment.c b/src/systemctl/systemctl-set-environment.c +index aab0fe5fd0..8c529181da 100644 +--- a/src/systemctl/systemctl-set-environment.c ++++ b/src/systemctl/systemctl-set-environment.c +@@ -172,7 +172,6 @@ int import_environment(int argc, char *argv[], void *userdata) { + + strv_env_clean_with_callback(copy, invalid_callback, NULL); + +- char **e; + STRV_FOREACH(e, copy) + if (string_has_cc(*e, NULL)) + log_notice("Environment variable $%.*s contains control characters, importing anyway.", +@@ -181,8 +180,6 @@ int import_environment(int argc, char *argv[], void *userdata) { + r = sd_bus_message_append_strv(m, copy); + + } else { +- char **a, **b; +- + r = sd_bus_message_open_container(m, 'a', "s"); + if (r < 0) + return bus_log_create_error(r); +diff --git a/src/systemctl/systemctl-set-property.c b/src/systemctl/systemctl-set-property.c +index 5739bac070..4407c2354d 100644 +--- a/src/systemctl/systemctl-set-property.c ++++ b/src/systemctl/systemctl-set-property.c +@@ -46,7 +46,6 @@ static int set_property_one(sd_bus *bus, const char *name, char **properties) { + int set_property(int argc, char *argv[], void *userdata) { + sd_bus *bus; + _cleanup_strv_free_ char **names = NULL; +- char **name; + int r, k; + + r = acquire_bus(BUS_MANAGER, &bus); +diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c +index 7a6655da74..ee96dac457 100644 +--- a/src/systemctl/systemctl-show.c ++++ b/src/systemctl/systemctl-show.c +@@ -308,7 +308,6 @@ static void print_status_info( + ExecStatusInfo *p; + usec_t timestamp; + const char *path; +- char **t, **t2; + int r; + + assert(i); +@@ -367,7 +366,6 @@ static void print_status_info( + if (!strv_isempty(i->dropin_paths)) { + _cleanup_free_ char *dir = NULL; + bool last = false; +- char ** dropin; + + STRV_FOREACH(dropin, i->dropin_paths) { + _cleanup_free_ char *dropin_formatted = NULL; +@@ -774,8 +772,6 @@ static void print_status_info( + } + + static void show_unit_help(UnitStatusInfo *i) { +- char **p; +- + assert(i); + + if (!i->documentation) { +@@ -1078,7 +1074,6 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m + + if (FLAGS_SET(flags, BUS_PRINT_PROPERTY_SHOW_EMPTY) || allow_list || !strv_isempty(l)) { + bool first = true; +- char **i; + + if (!FLAGS_SET(flags, BUS_PRINT_PROPERTY_ONLY_VALUE)) { + fputs(name, stdout); +@@ -1970,7 +1965,6 @@ static int show_one( + .io_read_bytes = UINT64_MAX, + .io_write_bytes = UINT64_MAX, + }; +- char **pp; + int r; + + assert(path); +@@ -2194,7 +2188,6 @@ int show(int argc, char *argv[], void *userdata) { + ret = show_all(bus, &new_line, &ellipsized); + } else { + _cleanup_free_ char **patterns = NULL; +- char **name; + + STRV_FOREACH(name, strv_skip(argv, 1)) { + _cleanup_free_ char *path = NULL, *unit = NULL; +diff --git a/src/systemctl/systemctl-start-unit.c b/src/systemctl/systemctl-start-unit.c +index 274b278d2d..b45495d51d 100644 +--- a/src/systemctl/systemctl-start-unit.c ++++ b/src/systemctl/systemctl-start-unit.c +@@ -199,16 +199,13 @@ static int enqueue_marked_jobs( + if (r < 0) + return bus_log_parse_error(r); + +- if (w) { +- char **path; +- ++ if (w) + STRV_FOREACH(path, paths) { + log_debug("Adding %s to the set", *path); + r = bus_wait_for_jobs_add(w, *path); + if (r < 0) + return log_error_errno(r, "Failed to watch job %s: %m", *path); + } +- } + + return 0; + } +@@ -269,7 +266,6 @@ int start_unit(int argc, char *argv[], void *userdata) { + _cleanup_strv_free_ char **names = NULL; + int r, ret = EXIT_SUCCESS; + sd_bus *bus; +- char **name; + + if (arg_wait && !STR_IN_SET(argv[0], "start", "restart")) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), +diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c +index ae02af280e..db40154943 100644 +--- a/src/systemctl/systemctl-util.c ++++ b/src/systemctl/systemctl-util.c +@@ -234,7 +234,6 @@ int get_unit_list( + + int expand_unit_names(sd_bus *bus, char **names, const char* suffix, char ***ret, bool *ret_expanded) { + _cleanup_strv_free_ char **mangled = NULL, **globs = NULL; +- char **name; + int r; + + assert(bus); +@@ -294,7 +293,6 @@ int check_triggering_units(sd_bus *bus, const char *unit) { + _cleanup_strv_free_ char **triggered_by = NULL; + bool print_warning_label = true; + UnitActiveState active_state; +- char **i; + int r; + + r = unit_name_mangle(unit, 0, &n); +@@ -386,8 +384,6 @@ void warn_unit_file_changed(const char *unit) { + } + + int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **ret_unit_path) { +- char **p; +- + assert(lp); + assert(unit_name); + +@@ -666,7 +662,6 @@ int unit_exists(LookupPaths *lp, const char *unit) { + + int append_unit_dependencies(sd_bus *bus, char **names, char ***ret) { + _cleanup_strv_free_ char **with_deps = NULL; +- char **name; + + assert(bus); + assert(ret); +@@ -860,7 +855,7 @@ UnitFileFlags unit_file_flags_from_args(void) { + + int mangle_names(const char *operation, char **original_names, char ***ret_mangled_names) { + _cleanup_strv_free_ char **l = NULL; +- char **i, **name; ++ char **i; + int r; + + assert(ret_mangled_names); +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 07a65a2ebc..6a2ca1afbb 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -312,7 +312,6 @@ static int putgrent_with_members(const struct group *gr, FILE *group) { + if (a) { + _cleanup_strv_free_ char **l = NULL; + bool added = false; +- char **i; + + l = strv_copy(gr->gr_mem); + if (!l) +@@ -357,7 +356,6 @@ static int putsgent_with_members(const struct sgrp *sg, FILE *gshadow) { + if (a) { + _cleanup_strv_free_ char **l = NULL; + bool added = false; +- char **i; + + l = strv_copy(sg->sg_mem); + if (!l) +@@ -1406,8 +1404,6 @@ static int add_implicit(void) { + + /* Implicitly create additional users and groups, if they were listed in "m" lines */ + ORDERED_HASHMAP_FOREACH_KEY(l, g, members) { +- char **m; +- + STRV_FOREACH(m, l) + if (!ordered_hashmap_get(users, *m)) { + _cleanup_(item_freep) Item *j = NULL; +@@ -1977,7 +1973,6 @@ static int parse_argv(int argc, char *argv[]) { + } + + static int parse_arguments(char **args) { +- char **arg; + unsigned pos = 1; + int r; + +@@ -1999,7 +1994,6 @@ static int parse_arguments(char **args) { + static int read_config_files(char **args) { + _cleanup_strv_free_ char **files = NULL; + _cleanup_free_ char *p = NULL; +- char **f; + int r; + + r = conf_files_list_with_replacement(arg_root, CONF_PATHS_STRV("sysusers.d"), arg_replace, &files, &p); +diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c +index bb74b486be..428509f4ce 100644 +--- a/src/sysv-generator/sysv-generator.c ++++ b/src/sysv-generator/sysv-generator.c +@@ -103,7 +103,6 @@ static int generate_unit_file(SysvStub *s) { + _cleanup_free_ char *path_escaped = NULL; + _cleanup_fclose_ FILE *f = NULL; + const char *unit; +- char **p; + int r; + + assert(s); +@@ -707,7 +706,6 @@ static int acquire_search_path(const char *def, const char *envvar, char ***ret) + + static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) { + _cleanup_strv_free_ char **sysvinit_path = NULL; +- char **path; + int r; + + assert(lp); +@@ -791,7 +789,6 @@ static int set_dependencies_from_rcnd(const LookupPaths *lp, Hashmap *all_servic + Set *runlevel_services[ELEMENTSOF(rcnd_table)] = {}; + _cleanup_strv_free_ char **sysvrcnd_path = NULL; + SysvStub *service; +- char **p; + int r; + + assert(lp); +diff --git a/src/test/test-bpf-foreign-programs.c b/src/test/test-bpf-foreign-programs.c +index 1765dc7a9b..56933c87bf 100644 +--- a/src/test/test-bpf-foreign-programs.c ++++ b/src/test/test-bpf-foreign-programs.c +@@ -133,8 +133,6 @@ static int bpf_foreign_test_to_string(enum bpf_attach_type attach_type, const ch + } + + static char **unlink_paths_and_free(char **paths) { +- char **i; +- + STRV_FOREACH(i, paths) + (void) unlink(*i); + +diff --git a/src/test/test-bpf-lsm.c b/src/test/test-bpf-lsm.c +index 258c2e575e..4a3b327a3f 100644 +--- a/src/test/test-bpf-lsm.c ++++ b/src/test/test-bpf-lsm.c +@@ -16,7 +16,6 @@ static int test_restrict_filesystems(Manager *m, const char *unit_name, const ch + _cleanup_free_ char *exec_start = NULL; + _cleanup_(unit_freep) Unit *u = NULL; + ExecContext *ec = NULL; +- char **allow_filesystem; + int cld_code, r; + + assert_se(u = unit_new(m, sizeof(Service))); +diff --git a/src/test/test-copy.c b/src/test/test-copy.c +index c7ed054207..01c6638dcf 100644 +--- a/src/test/test-copy.c ++++ b/src/test/test-copy.c +@@ -83,7 +83,6 @@ TEST(copy_tree) { + char **hardlinks = STRV_MAKE("hlink", "file", + "hlink2", "dir1/file"); + const char *unixsockp; +- char **p, **ll; + struct stat st; + int xattr_worked = -1; /* xattr support is optional in temporary directories, hence use it if we can, + * but don't fail if we can't */ +diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c +index 19523aa0d9..4d5f39b5b7 100644 +--- a/src/test/test-env-util.c ++++ b/src/test/test-env-util.c +@@ -412,7 +412,6 @@ TEST(unsetenv_erase) { + r = safe_fork("(sd-unsetenverase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL); + if (r == 0) { + _cleanup_strv_free_ char **l = NULL; +- char **e; + + /* child */ + +diff --git a/src/test/test-exec-util.c b/src/test/test-exec-util.c +index 47a82eb969..d6ee16b1fe 100644 +--- a/src/test/test-exec-util.c ++++ b/src/test/test-exec-util.c +@@ -217,7 +217,7 @@ static int gather_stdout_one(int fd, void *arg) { + return 0; + } + static int gather_stdout_two(int fd, void *arg) { +- char ***s = arg, **t; ++ char ***s = arg; + + STRV_FOREACH(t, *s) + assert_se(write(fd, *t, strlen(*t)) == (ssize_t) strlen(*t)); +@@ -287,7 +287,7 @@ TEST(stdout_gathering) { + } + + TEST(environment_gathering) { +- char template[] = "/tmp/test-exec-util.XXXXXXX", **p; ++ char template[] = "/tmp/test-exec-util.XXXXXXX"; + const char *dirs[] = {template, NULL}; + const char *name, *name2, *name3, *old; + int r; +diff --git a/src/test/test-execute.c b/src/test/test-execute.c +index 0760df6603..3b4b02184c 100644 +--- a/src/test/test-execute.c ++++ b/src/test/test-execute.c +@@ -606,7 +606,6 @@ static int find_libraries(const char *exec, char ***ret) { + _cleanup_strv_free_ char **v = NULL; + assert_se(strv_split_newlines_full(&v, result, 0) >= 0); + +- char **q; + STRV_FOREACH(q, v) { + _cleanup_free_ char *word = NULL; + const char *p = *q; +@@ -674,7 +673,6 @@ static void test_exec_mount_apivfs(Manager *m) { + assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_touch, "\n")); + assert_se(strextend(&data, "BindReadOnlyPaths=", fullpath_test, "\n")); + +- char **p; + STRV_FOREACH(p, libraries) + assert_se(strextend(&data, "BindReadOnlyPaths=", *p, "\n")); + +diff --git a/src/test/test-fileio.c b/src/test/test-fileio.c +index 238ae8f586..3e98d94019 100644 +--- a/src/test/test-fileio.c ++++ b/src/test/test-fileio.c +@@ -35,7 +35,6 @@ TEST(parse_env_file) { + *six = NULL, *seven = NULL, *eight = NULL, *nine = NULL, *ten = NULL, + *eleven = NULL, *twelve = NULL, *thirteen = NULL; + _cleanup_strv_free_ char **a = NULL, **b = NULL; +- char **i; + unsigned k; + int r; + +@@ -171,7 +170,6 @@ TEST(parse_multiline_env_file) { + p[] = "/tmp/test-fileio-out-XXXXXX"; + FILE *f; + _cleanup_strv_free_ char **a = NULL, **b = NULL; +- char **i; + int r; + + assert_se(fmkostemp_safe(t, "w", &f) == 0); +@@ -221,7 +219,6 @@ TEST(merge_env_file) { + _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX"; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_strv_free_ char **a = NULL; +- char **i; + int r; + + assert_se(fmkostemp_safe(t, "w", &f) == 0); +@@ -285,7 +282,6 @@ TEST(merge_env_file_invalid) { + _cleanup_(unlink_tempfilep) char t[] = "/tmp/test-fileio-XXXXXX"; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_strv_free_ char **a = NULL; +- char **i; + int r; + + assert_se(fmkostemp_safe(t, "w", &f) == 0); +@@ -486,7 +482,6 @@ TEST(load_env_file_pairs) { + int fd, r; + _cleanup_fclose_ FILE *f = NULL; + _cleanup_strv_free_ char **l = NULL; +- char **k, **v; + + fd = mkostemp_safe(fn); + assert_se(fd >= 0); +diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c +index f53a3ebf59..67b6996907 100644 +--- a/src/test/test-fs-util.c ++++ b/src/test/test-fs-util.c +@@ -692,7 +692,6 @@ TEST(rename_noreplace) { + + _cleanup_(rm_rf_physical_and_freep) char *z = NULL; + const char *j = NULL; +- char **a, **b; + + if (arg_test_dir) + j = strjoina(arg_test_dir, "/testXXXXXX"); +diff --git a/src/test/test-kbd-util.c b/src/test/test-kbd-util.c +index f15cff4794..0a166c6e1f 100644 +--- a/src/test/test-kbd-util.c ++++ b/src/test/test-kbd-util.c +@@ -7,7 +7,6 @@ + + int main(int argc, char *argv[]) { + _cleanup_strv_free_ char **maps = NULL; +- char **m; + int r; + + log_show_color(true); +diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c +index 55f86f7c2f..3243e3c567 100644 +--- a/src/test/test-locale-util.c ++++ b/src/test/test-locale-util.c +@@ -10,7 +10,6 @@ + + TEST(get_locales) { + _cleanup_strv_free_ char **locales = NULL; +- char **p; + int r; + + r = get_locales(&locales); +@@ -58,7 +57,6 @@ TEST(locale_is_installed) { + + TEST(keymaps) { + _cleanup_strv_free_ char **kmaps = NULL; +- char **p; + int r; + + assert_se(!keymap_is_valid("")); +diff --git a/src/test/test-nss-hosts.c b/src/test/test-nss-hosts.c +index eac2c74f4c..70dbb30ed4 100644 +--- a/src/test/test-nss-hosts.c ++++ b/src/test/test-nss-hosts.c +@@ -67,8 +67,6 @@ static int print_gaih_addrtuples(const struct gaih_addrtuple *tuples) { + } + + static void print_struct_hostent(struct hostent *host, const char *canon) { +- char **s; +- + log_info(" \"%s\"", host->h_name); + STRV_FOREACH(s, host->h_aliases) + log_info(" alias \"%s\"", *s); +@@ -376,7 +374,6 @@ static int test_one_module(const char *dir, + if (!handle) + return -EINVAL; + +- char **name; + STRV_FOREACH(name, names) + test_byname(handle, module, *name); + +@@ -424,7 +421,6 @@ static int parse_argv(int argc, char **argv, + assert_se(modules); + + if (argc > 2) { +- char **name; + int family; + union in_addr_union address; + +@@ -463,7 +459,6 @@ static int run(int argc, char **argv) { + _cleanup_strv_free_ char **modules = NULL, **names = NULL; + _cleanup_free_ struct local_address *addresses = NULL; + int n_addresses = 0; +- char **module; + int r; + + test_setup_logging(LOG_INFO); +diff --git a/src/test/test-nss-users.c b/src/test/test-nss-users.c +index c415c0ca3b..70c5f25e08 100644 +--- a/src/test/test-nss-users.c ++++ b/src/test/test-nss-users.c +@@ -170,7 +170,6 @@ static int test_one_module(const char *dir, + if (!handle) + return -EINVAL; + +- char **name; + STRV_FOREACH(name, names) + test_byname(handle, module, *name); + +@@ -235,7 +234,6 @@ static int parse_argv(int argc, char **argv, + static int run(int argc, char **argv) { + _cleanup_free_ char *dir = NULL; + _cleanup_strv_free_ char **modules = NULL, **names = NULL; +- char **module; + int r; + + test_setup_logging(LOG_INFO); +diff --git a/src/test/test-path-lookup.c b/src/test/test-path-lookup.c +index a19a33c64b..2c30260f7b 100644 +--- a/src/test/test-path-lookup.c ++++ b/src/test/test-path-lookup.c +@@ -43,7 +43,7 @@ TEST(paths) { + + TEST(user_and_global_paths) { + _cleanup_(lookup_paths_free) LookupPaths lp_global = {}, lp_user = {}; +- char **u, **g, **p; ++ char **u, **g; + unsigned k = 0; + + assert_se(unsetenv("SYSTEMD_UNIT_PATH") == 0); +@@ -81,7 +81,6 @@ static void test_generator_binary_paths_one(UnitFileScope scope) { + _cleanup_strv_free_ char **env_gp_with_env = NULL; + char *systemd_generator_path = NULL; + char *systemd_env_generator_path = NULL; +- char **dir; + + assert_se(mkdtemp(template)); + +diff --git a/src/test/test-path-util.c b/src/test/test-path-util.c +index b9c4ef4126..d40febef5f 100644 +--- a/src/test/test-path-util.c ++++ b/src/test/test-path-util.c +@@ -481,7 +481,6 @@ TEST(path_strv_resolve) { + char tmp_dir[] = "/tmp/test-path-util-XXXXXX"; + _cleanup_strv_free_ char **search_dirs = NULL; + _cleanup_strv_free_ char **absolute_dirs = NULL; +- char **d; + + assert_se(mkdtemp(tmp_dir) != NULL); + +diff --git a/src/test/test-path.c b/src/test/test-path.c +index 529487d1ad..2690dc0aa4 100644 +--- a/src/test/test-path.c ++++ b/src/test/test-path.c +@@ -24,7 +24,6 @@ typedef void (*test_function_t)(Manager *m); + static int setup_test(Manager **m) { + char **tests_path = STRV_MAKE("exists", "existsglobFOOBAR", "changed", "modified", "unit", + "directorynotempty", "makedirectory"); +- char **test_path; + Manager *tmp = NULL; + int r; + +diff --git a/src/test/test-sd-path.c b/src/test/test-sd-path.c +index 10a8a4a63f..4f23e3bb69 100644 +--- a/src/test/test-sd-path.c ++++ b/src/test/test-sd-path.c +@@ -32,7 +32,6 @@ TEST(sd_path_lookup) { + TEST(sd_path_lookup_strv) { + for (uint64_t i = 0; i < _SD_PATH_MAX; i++) { + _cleanup_strv_free_ char **t = NULL, **s = NULL; +- char **item; + int r; + + r = sd_path_lookup_strv(i, NULL, &t); +diff --git a/src/test/test-socket-bind.c b/src/test/test-socket-bind.c +index ecad86baeb..c5c5477f69 100644 +--- a/src/test/test-socket-bind.c ++++ b/src/test/test-socket-bind.c +@@ -13,7 +13,7 @@ + #include "virt.h" + + static int find_netcat_executable(char **ret_path) { +- char **candidates = STRV_MAKE("ncat", "nc", "netcat"), **c; ++ char **candidates = STRV_MAKE("ncat", "nc", "netcat"); + int r = 0; + + STRV_FOREACH(c, candidates) { +@@ -36,7 +36,6 @@ static int test_socket_bind( + _cleanup_(unit_freep) Unit *u = NULL; + CGroupSocketBindItem *bi; + CGroupContext *cc = NULL; +- char **rule; + int cld_code, r; + + assert_se(u = unit_new(m, sizeof(Service))); +diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c +index 071b391361..93b674baab 100644 +--- a/src/test/test-string-util.c ++++ b/src/test/test-string-util.c +@@ -865,7 +865,6 @@ TEST(strverscmp_improved) { + "124", + NULL, + }; +- const char * const *p, * const *q; + + STRV_FOREACH(p, versions) + STRV_FOREACH(q, p + 1) +diff --git a/src/test/test-strv.c b/src/test/test-strv.c +index 0ece342521..e6aa2e793e 100644 +--- a/src/test/test-strv.c ++++ b/src/test/test-strv.c +@@ -204,7 +204,6 @@ static void test_strv_unquote_one(const char *quoted, char **list) { + _cleanup_strv_free_ char **s; + _cleanup_free_ char *j; + unsigned i = 0; +- char **t; + int r; + + log_info("/* %s */", __func__); +@@ -446,7 +445,6 @@ TEST(strv_split_colon_pairs) { + + TEST(strv_split_newlines) { + unsigned i = 0; +- char **s; + _cleanup_strv_free_ char **l = NULL; + const char str[] = "one\ntwo\nthree"; + +@@ -619,7 +617,6 @@ TEST(strv_extendf) { + TEST(strv_foreach) { + _cleanup_strv_free_ char **a; + unsigned i = 0; +- char **check; + + a = strv_new("one", "two", "three"); + assert_se(a); +@@ -631,7 +628,6 @@ TEST(strv_foreach) { + TEST(strv_foreach_backwards) { + _cleanup_strv_free_ char **a; + unsigned i = 2; +- char **check; + + a = strv_new("one", "two", "three"); + +@@ -649,7 +645,6 @@ TEST(strv_foreach_backwards) { + + TEST(strv_foreach_pair) { + _cleanup_strv_free_ char **a = NULL; +- char **x, **y; + + a = strv_new("pair_one", "pair_one", + "pair_two", "pair_two", +diff --git a/src/test/test-sysctl-util.c b/src/test/test-sysctl-util.c +index 8bd3c26152..02180dc4be 100644 +--- a/src/test/test-sysctl-util.c ++++ b/src/test/test-sysctl-util.c +@@ -27,7 +27,6 @@ static const char* const cases[] = { + }; + + TEST(sysctl_normalize) { +- const char **s, **expected; + STRV_FOREACH_PAIR(s, expected, (const char**) cases) { + _cleanup_free_ char *t; + +diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c +index 799d271a44..15f4a0c169 100644 +--- a/src/test/test-time-util.c ++++ b/src/test/test-time-util.c +@@ -258,7 +258,6 @@ TEST(timezone_is_valid) { + TEST(get_timezones) { + _cleanup_strv_free_ char **zones = NULL; + int r; +- char **zone; + + r = get_timezones(&zones); + assert_se(r == 0); +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index 8ed56ad3b8..261bd7412f 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -55,7 +55,6 @@ TEST(unit_file_build_name_map) { + if (r == 0) + log_debug("Cache rebuild skipped based on mtime."); + +- char **id; + STRV_FOREACH(id, ids) { + const char *fragment, *name; + _cleanup_set_free_free_ Set *names = NULL; +diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c +index 66b454269d..874ff773e1 100644 +--- a/src/timedate/timedated.c ++++ b/src/timedate/timedated.c +@@ -190,7 +190,6 @@ static int context_parse_ntp_services_from_environment(Context *c) { + + static int context_parse_ntp_services_from_disk(Context *c) { + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + r = conf_files_list_strv(&files, ".list", NULL, CONF_FILES_FILTER_MASKED, UNIT_LIST_DIRS); +diff --git a/src/timesync/timesyncd-manager.c b/src/timesync/timesyncd-manager.c +index 918da195d8..67f9a33993 100644 +--- a/src/timesync/timesyncd-manager.c ++++ b/src/timesync/timesyncd-manager.c +@@ -961,7 +961,6 @@ Manager* manager_free(Manager *m) { + static int manager_network_read_link_servers(Manager *m) { + _cleanup_strv_free_ char **ntp = NULL; + ServerName *n, *nx; +- char **i; + bool changed = false; + int r; + +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index aa7ff73a36..17b9c6ab9a 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -1019,8 +1019,6 @@ static int parse_xattrs_from_arg(Item *i) { + } + + static int fd_set_xattrs(Item *i, int fd, const char *path, const struct stat *st) { +- char **name, **value; +- + assert(i); + assert(fd >= 0); + assert(path); +@@ -1939,7 +1937,6 @@ static int glob_item(Item *i, action_t action) { + .gl_opendir = (void *(*)(const char *)) opendir_nomod, + }; + int r = 0, k; +- char **fn; + + k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g); + if (k < 0 && k != -ENOENT) +@@ -1959,7 +1956,6 @@ static int glob_item_recursively(Item *i, fdaction_t action) { + .gl_opendir = (void *(*)(const char *)) opendir_nomod, + }; + int r = 0, k; +- char **fn; + + k = safe_glob(i->path, GLOB_NOSORT|GLOB_BRACE, &g); + if (k < 0 && k != -ENOENT) +@@ -2695,8 +2691,6 @@ static bool item_compatible(Item *a, Item *b) { + } + + static bool should_include_path(const char *path) { +- char **prefix; +- + STRV_FOREACH(prefix, arg_exclude_prefixes) + if (path_startswith(path, *prefix)) { + log_debug("Entry \"%s\" matches exclude prefix \"%s\", skipping.", +@@ -2746,8 +2740,7 @@ static int specifier_expansion_from_arg(const Specifier *specifier_table, Item * + return free_and_replace(i->argument, resolved); + } + case SET_XATTR: +- case RECURSIVE_SET_XATTR: { +- char **xattr; ++ case RECURSIVE_SET_XATTR: + STRV_FOREACH(xattr, i->xattrs) { + _cleanup_free_ char *resolved = NULL; + +@@ -2758,7 +2751,7 @@ static int specifier_expansion_from_arg(const Specifier *specifier_table, Item * + free_and_replace(*xattr, resolved); + } + return 0; +- } ++ + default: + return 0; + } +@@ -3611,7 +3604,6 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe + } + + static int parse_arguments(char **config_dirs, char **args, bool *invalid_config) { +- char **arg; + int r; + + STRV_FOREACH(arg, args) { +@@ -3626,7 +3618,6 @@ static int parse_arguments(char **config_dirs, char **args, bool *invalid_config + static int read_config_files(char **config_dirs, char **args, bool *invalid_config) { + _cleanup_strv_free_ char **files = NULL; + _cleanup_free_ char *p = NULL; +- char **f; + int r; + + r = conf_files_list_with_replacement(arg_root, config_dirs, arg_replace, &files, &p); +@@ -3733,7 +3724,6 @@ static int run(int argc, char *argv[]) { + + if (DEBUG_LOGGING) { + _cleanup_free_ char *t = NULL; +- char **i; + + STRV_FOREACH(i, config_dirs) { + _cleanup_free_ char *j = NULL; +diff --git a/src/tty-ask-password-agent/tty-ask-password-agent.c b/src/tty-ask-password-agent/tty-ask-password-agent.c +index 54a03af082..15a1faedce 100644 +--- a/src/tty-ask-password-agent/tty-ask-password-agent.c ++++ b/src/tty-ask-password-agent/tty-ask-password-agent.c +@@ -59,7 +59,7 @@ static int send_passwords(const char *socket_name, char **passwords) { + union sockaddr_union sa; + socklen_t sa_len; + size_t packet_length = 1; +- char **p, *d; ++ char *d; + ssize_t n; + int r; + +@@ -554,8 +554,6 @@ static int ask_on_this_console(const char *tty, pid_t *ret_pid, char **arguments + if (r < 0) + return r; + if (r == 0) { +- char **i; +- + assert_se(prctl(PR_SET_PDEATHSIG, SIGHUP) >= 0); + + STRV_FOREACH(i, arguments) { +@@ -635,7 +633,6 @@ static int ask_on_consoles(char *argv[]) { + _cleanup_set_free_ Set *pids = NULL; + _cleanup_strv_free_ char **consoles = NULL, **arguments = NULL; + siginfo_t status = {}; +- char **tty; + pid_t pid; + int r; + +diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c +index 05f0f2e0a6..1ac89496c9 100644 +--- a/src/udev/net/link-config.c ++++ b/src/udev/net/link-config.c +@@ -315,7 +315,6 @@ static int device_unsigned_attribute(sd_device *device, const char *attr, unsign + + int link_config_load(LinkConfigContext *ctx) { + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + link_configs_free(ctx); +@@ -816,7 +815,6 @@ static int link_apply_alternative_names(Link *link, sd_netlink **rtnl) { + if (r < 0) + log_link_debug_errno(link, r, "Failed to get alternative names, ignoring: %m"); + +- char **p; + STRV_FOREACH(p, current_altnames) + strv_remove(altnames, *p); + +diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c +index a60e4f294c..e3065ee923 100644 +--- a/src/udev/udev-event.c ++++ b/src/udev/udev-event.c +@@ -573,7 +573,6 @@ static int on_spawn_io(sd_event_source *s, int fd, uint32_t revents, void *userd + /* Log output only if we watch stderr. */ + if (l > 0 && spawn->fd_stderr >= 0) { + _cleanup_strv_free_ char **v = NULL; +- char **q; + + r = strv_split_newlines_full(&v, p, EXTRACT_RETAIN_ESCAPE); + if (r < 0) +diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c +index 243a792662..29b6ae3961 100644 +--- a/src/udev/udev-rules.c ++++ b/src/udev/udev-rules.c +@@ -1348,7 +1348,6 @@ UdevRules* udev_rules_new(ResolveNameTiming resolve_name_timing) { + int udev_rules_load(UdevRules **ret_rules, ResolveNameTiming resolve_name_timing) { + _cleanup_(udev_rules_freep) UdevRules *rules = NULL; + _cleanup_strv_free_ char **files = NULL; +- char **f; + int r; + + rules = udev_rules_new(resolve_name_timing); +@@ -1823,7 +1822,7 @@ static int udev_rule_apply_token_to_event( + } + case TK_M_IMPORT_PROGRAM: { + _cleanup_strv_free_ char **lines = NULL; +- char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE], **line; ++ char buf[UDEV_PATH_SIZE], result[UDEV_LINE_SIZE]; + + (void) udev_event_apply_format(event, token->value, buf, sizeof(buf), false); + log_rule_debug(dev, rules, "Importing properties from results of '%s'", buf); +@@ -2422,7 +2421,6 @@ static int apply_static_dev_perms(const char *devnode, uid_t uid, gid_t gid, mod + char device_node[UDEV_PATH_SIZE], tags_dir[UDEV_PATH_SIZE], tag_symlink[UDEV_PATH_SIZE]; + _cleanup_free_ char *unescaped_filename = NULL; + struct stat stats; +- char **t; + int r; + + assert(devnode); +diff --git a/src/udev/udevadm-info.c b/src/udev/udevadm-info.c +index 740434bb41..b985961c62 100644 +--- a/src/udev/udevadm-info.c ++++ b/src/udev/udevadm-info.c +@@ -522,7 +522,6 @@ int info_main(int argc, char *argv[], void *userdata) { + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "-x/--export or -P/--export-prefix cannot be used with --value"); + +- char **p; + STRV_FOREACH(p, devices) { + _cleanup_(sd_device_unrefp) sd_device *device = NULL; + +diff --git a/src/userdb/userdbctl.c b/src/userdb/userdbctl.c +index c2acd85742..85aa6c752c 100644 +--- a/src/userdb/userdbctl.c ++++ b/src/userdb/userdbctl.c +@@ -119,9 +119,7 @@ static int display_user(int argc, char *argv[], void *userdata) { + (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3, (size_t) 4, (size_t) 5, (size_t) 6); + } + +- if (argc > 1) { +- char **i; +- ++ if (argc > 1) + STRV_FOREACH(i, argv + 1) { + _cleanup_(user_record_unrefp) UserRecord *ur = NULL; + uid_t uid; +@@ -151,7 +149,7 @@ static int display_user(int argc, char *argv[], void *userdata) { + draw_separator = true; + } + } +- } else { ++ else { + _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL; + + r = userdb_all(arg_userdb_flags, &iterator); +@@ -283,9 +281,7 @@ static int display_group(int argc, char *argv[], void *userdata) { + (void) table_set_display(table, (size_t) 0, (size_t) 1, (size_t) 2, (size_t) 3); + } + +- if (argc > 1) { +- char **i; +- ++ if (argc > 1) + STRV_FOREACH(i, argv + 1) { + _cleanup_(group_record_unrefp) GroupRecord *gr = NULL; + gid_t gid; +@@ -315,8 +311,7 @@ static int display_group(int argc, char *argv[], void *userdata) { + draw_separator = true; + } + } +- +- } else { ++ else { + _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL; + + r = groupdb_all(arg_userdb_flags, &iterator); +@@ -435,9 +430,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) { + (void) table_set_sort(table, (size_t) 0, (size_t) 1); + } + +- if (argc > 1) { +- char **i; +- ++ if (argc > 1) + STRV_FOREACH(i, argv + 1) { + _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL; + +@@ -468,7 +461,7 @@ static int display_memberships(int argc, char *argv[], void *userdata) { + return r; + } + } +- } else { ++ else { + _cleanup_(userdb_iterator_freep) UserDBIterator *iterator = NULL; + + r = membershipdb_all(arg_userdb_flags, &iterator); +@@ -630,12 +623,9 @@ static int ssh_authorized_keys(int argc, char *argv[], void *userdata) { + else { + if (strv_isempty(ur->ssh_authorized_keys)) + log_debug("User record for %s has no public SSH keys.", argv[1]); +- else { +- char **i; +- ++ else + STRV_FOREACH(i, ur->ssh_authorized_keys) + printf("%s\n", *i); +- } + + if (ur->incomplete) { + fflush(stdout); +diff --git a/src/xdg-autostart-generator/xdg-autostart-condition.c b/src/xdg-autostart-generator/xdg-autostart-condition.c +index c4485cf625..9ceea61547 100644 +--- a/src/xdg-autostart-generator/xdg-autostart-condition.c ++++ b/src/xdg-autostart-generator/xdg-autostart-condition.c +@@ -13,7 +13,6 @@ + static int run(int argc, char *argv[]) { + _cleanup_strv_free_ char **only_show_in = NULL, **not_show_in = NULL, **desktops = NULL; + const char *xdg_current_desktop; +- char **d; + + if (argc != 3) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), +diff --git a/src/xdg-autostart-generator/xdg-autostart-generator.c b/src/xdg-autostart-generator/xdg-autostart-generator.c +index c5c6b54fdc..39ab81c1f2 100644 +--- a/src/xdg-autostart-generator/xdg-autostart-generator.c ++++ b/src/xdg-autostart-generator/xdg-autostart-generator.c +@@ -24,7 +24,6 @@ static int enumerate_xdg_autostart(Hashmap *all_services) { + _cleanup_strv_free_ char **config_dirs = NULL; + _unused_ _cleanup_strv_free_ char **data_dirs = NULL; + _cleanup_free_ char *user_config_autostart_dir = NULL; +- char **path; + int r; + + r = xdg_user_config_dir(&user_config_autostart_dir, "/autostart"); diff --git a/SOURCES/0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch b/SOURCES/0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch new file mode 100644 index 0000000..a36deb0 --- /dev/null +++ b/SOURCES/0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch @@ -0,0 +1,29 @@ +From 607c82526a5085885f4af96f1979572c72c300a4 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Thu, 17 Mar 2022 03:42:41 +0900 +Subject: [PATCH] core: ExecContext::restrict_filesystems is set of string + +(cherry picked from commit 8fe84dc8de60ae8995e53e4d47b44c61626c0526) + +Related: #2082131 +--- + src/core/execute.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/core/execute.c b/src/core/execute.c +index 306e563e4f..34b0478ead 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -5916,9 +5916,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { + + #if HAVE_LIBBPF + if (exec_context_restrict_filesystems_set(c)) { +- char **e; +- SET_FOREACH(e, c->restrict_filesystems) +- fprintf(f, "%sRestrictFileSystems: %s\n", prefix, *e); ++ char *fs; ++ SET_FOREACH(fs, c->restrict_filesystems) ++ fprintf(f, "%sRestrictFileSystems: %s\n", prefix, fs); + } + #endif + diff --git a/SOURCES/0184-install-when-linking-a-file-create-the-link-first-or.patch b/SOURCES/0184-install-when-linking-a-file-create-the-link-first-or.patch new file mode 100644 index 0000000..6b88602 --- /dev/null +++ b/SOURCES/0184-install-when-linking-a-file-create-the-link-first-or.patch @@ -0,0 +1,67 @@ +From 9b655d805e78a314a24b8493c6c116a4d943beb9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 11 Mar 2022 14:27:46 +0100 +Subject: [PATCH] install: when linking a file, create the link first or abort + +We'd create aliases and other symlinks first, and only then try to create +the main link. Since that can fail, let's do things in opposite order, and +abort immediately if we can't link the file itself. + +(cherry picked from commit 20d68b3aec62110351bdc695fd1a55adcf3a6ee5) + +Related: #2082131 +--- + src/shared/install.c | 12 +++++++----- + test/test-systemctl-enable.sh | 9 +++------ + 2 files changed, 10 insertions(+), 11 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 785ef55dbd..fadd2be248 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1985,6 +1985,13 @@ static int install_info_apply( + + bool force = file_flags & UNIT_FILE_FORCE; + ++ r = install_info_symlink_link(info, lp, config_path, force, changes, n_changes); ++ /* Do not count links to the unit file towards the "carries_install_info" count */ ++ if (r < 0) ++ /* If linking of the file failed, do not try to create other symlinks, ++ * because they might would pointing to a non-existent or wrong unit. */ ++ return r; ++ + r = install_info_symlink_alias(scope, info, lp, config_path, force, changes, n_changes); + + q = install_info_symlink_wants(scope, file_flags, info, lp, config_path, info->wanted_by, ".wants/", changes, n_changes); +@@ -1995,11 +2002,6 @@ static int install_info_apply( + if (r == 0) + r = q; + +- q = install_info_symlink_link(info, lp, config_path, force, changes, n_changes); +- /* Do not count links to the unit file towards the "carries_install_info" count */ +- if (r == 0 && q < 0) +- r = q; +- + return r; + } + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 3aa61222a8..c1fb9626ab 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -173,12 +173,9 @@ islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" + + : -------enable already linked different path----------------- +-# FIXME +-# "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; } +-# test -h "$root/etc/systemd/system/link1.path" +-# readlink "$root/etc/systemd/system/link1.path" +-# test -h "$root/etc/systemd/system/paths.target.wants/link1.path" +-# readlink "$root/etc/systemd/system/paths.target.wants/link1.path" ++"$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; } ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" + + : -------enable bad suffix------------------------------------ + cp "$root/link1.path" "$root/subdir/link1.suffix" diff --git a/SOURCES/0185-shared-install-split-unit_file_-disable-enable-so-_r.patch b/SOURCES/0185-shared-install-split-unit_file_-disable-enable-so-_r.patch new file mode 100644 index 0000000..5b7ca2b --- /dev/null +++ b/SOURCES/0185-shared-install-split-unit_file_-disable-enable-so-_r.patch @@ -0,0 +1,199 @@ +From caaea62c2c32e6aedb24288d5f51e6c35187e14c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 14 Mar 2022 12:09:31 +0100 +Subject: [PATCH] shared/install: split unit_file_{disable,enable}() so + _reenable doesn't do setup twice + +It was pretty ugly that we were creating LookupPaths twice. + +(cherry picked from commit ec7eaff3c2abf3048f3fba98bfbe08a0c7c898b0) + +Related: #2082131 +--- + src/shared/install.c | 105 +++++++++++++++++++++++++++++-------------- + 1 file changed, 72 insertions(+), 33 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index fadd2be248..1018e4fbf3 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2596,33 +2596,21 @@ int unit_file_add_dependency( + SEARCH_FOLLOW_CONFIG_SYMLINKS, changes, n_changes); + } + +-int unit_file_enable( ++static int do_unit_file_enable( ++ const LookupPaths *lp, + UnitFileScope scope, +- UnitFileFlags file_flags, +- const char *root_dir, ++ UnitFileFlags flags, ++ const char *config_path, + char **files, + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_(lookup_paths_free) LookupPaths lp = {}; + _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; +- const char *config_path; + UnitFileInstallInfo *info; + int r; + +- assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); +- +- r = lookup_paths_init_or_warn(&lp, scope, 0, root_dir); +- if (r < 0) +- return r; +- +- config_path = config_path_from_flags(&lp, file_flags); +- if (!config_path) +- return -ENXIO; +- + STRV_FOREACH(f, files) { +- r = install_info_discover_and_check(&ctx, &lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, ++ r = install_info_discover_and_check(&ctx, lp, *f, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, + &info, changes, n_changes); + if (r < 0) + return r; +@@ -2635,11 +2623,11 @@ int unit_file_enable( + is useful to determine whether the passed files had any + installation data at all. */ + +- return install_context_apply(&ctx, &lp, file_flags, config_path, ++ return install_context_apply(&ctx, lp, flags, config_path, + SEARCH_LOAD, changes, n_changes); + } + +-int unit_file_disable( ++int unit_file_enable( + UnitFileScope scope, + UnitFileFlags flags, + const char *root_dir, +@@ -2648,9 +2636,6 @@ int unit_file_disable( + size_t *n_changes) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; +- _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; +- const char *config_path; + int r; + + assert(scope >= 0); +@@ -2660,27 +2645,44 @@ int unit_file_disable( + if (r < 0) + return r; + +- config_path = config_path_from_flags(&lp, flags); ++ const char *config_path = config_path_from_flags(&lp, flags); + if (!config_path) + return -ENXIO; + ++ return do_unit_file_enable(&lp, scope, flags, config_path, files, changes, n_changes); ++} ++ ++static int do_unit_file_disable( ++ const LookupPaths *lp, ++ UnitFileScope scope, ++ UnitFileFlags flags, ++ const char *config_path, ++ char **files, ++ UnitFileChange **changes, ++ size_t *n_changes) { ++ ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; ++ _cleanup_set_free_free_ Set *remove_symlinks_to = NULL; ++ int r; ++ + STRV_FOREACH(i, files) { + if (!unit_name_is_valid(*i, UNIT_NAME_ANY)) + return -EINVAL; + +- r = install_info_add(&ctx, *i, NULL, lp.root_dir, /* auxiliary= */ false, NULL); ++ r = install_info_add(&ctx, *i, NULL, lp->root_dir, /* auxiliary= */ false, NULL); + if (r < 0) + return r; + } + +- r = install_context_mark_for_removal(&ctx, &lp, &remove_symlinks_to, config_path, changes, n_changes); ++ r = install_context_mark_for_removal(&ctx, lp, &remove_symlinks_to, config_path, changes, n_changes); + if (r < 0) + return r; + +- return remove_marked_symlinks(remove_symlinks_to, config_path, &lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes); ++ return remove_marked_symlinks(remove_symlinks_to, config_path, lp, flags & UNIT_FILE_DRY_RUN, changes, n_changes); + } + +-int unit_file_reenable( ++ ++int unit_file_disable( + UnitFileScope scope, + UnitFileFlags flags, + const char *root_dir, +@@ -2688,23 +2690,60 @@ int unit_file_reenable( + UnitFileChange **changes, + size_t *n_changes) { + +- char **n; ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + int r; ++ ++ assert(scope >= 0); ++ assert(scope < _UNIT_FILE_SCOPE_MAX); ++ ++ r = lookup_paths_init(&lp, scope, 0, root_dir); ++ if (r < 0) ++ return r; ++ ++ const char *config_path = config_path_from_flags(&lp, flags); ++ if (!config_path) ++ return -ENXIO; ++ ++ return do_unit_file_disable(&lp, scope, flags, config_path, files, changes, n_changes); ++} ++ ++int unit_file_reenable( ++ UnitFileScope scope, ++ UnitFileFlags flags, ++ const char *root_dir, ++ char **files, ++ UnitFileChange **changes, ++ size_t *n_changes) { ++ ++ _cleanup_(lookup_paths_free) LookupPaths lp = {}; + size_t l, i; ++ char **names; ++ int r; ++ ++ assert(scope >= 0); ++ assert(scope < _UNIT_FILE_SCOPE_MAX); ++ ++ r = lookup_paths_init(&lp, scope, 0, root_dir); ++ if (r < 0) ++ return r; ++ ++ const char *config_path = config_path_from_flags(&lp, flags); ++ if (!config_path) ++ return -ENXIO; + + /* First, we invoke the disable command with only the basename... */ + l = strv_length(files); +- n = newa(char*, l+1); ++ names = newa(char*, l+1); + for (i = 0; i < l; i++) +- n[i] = basename(files[i]); +- n[i] = NULL; ++ names[i] = basename(files[i]); ++ names[i] = NULL; + +- r = unit_file_disable(scope, flags, root_dir, n, changes, n_changes); ++ r = do_unit_file_disable(&lp, scope, flags, config_path, names, changes, n_changes); + if (r < 0) + return r; + + /* But the enable command with the full name */ +- return unit_file_enable(scope, flags, root_dir, files, changes, n_changes); ++ return do_unit_file_enable(&lp, scope, flags, config_path, files, changes, n_changes); + } + + int unit_file_set_default( diff --git a/SOURCES/0186-shared-install-fix-reenable-on-linked-unit-files.patch b/SOURCES/0186-shared-install-fix-reenable-on-linked-unit-files.patch new file mode 100644 index 0000000..d5bdcb5 --- /dev/null +++ b/SOURCES/0186-shared-install-fix-reenable-on-linked-unit-files.patch @@ -0,0 +1,146 @@ +From f88f7c68264f9cfef78f4a4e2f68e45de8f1f055 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 15 Mar 2022 09:44:39 +0100 +Subject: [PATCH] shared/install: fix reenable on linked unit files + +(cherry picked from commit 29a7c59abbe594422f1ed7602263420745339a3e) + +Related: #2082131 +--- + src/shared/install.c | 73 ++++++++++++++++++++++++++++++----- + src/shared/install.h | 2 +- + test/test-systemctl-enable.sh | 8 ++-- + 3 files changed, 68 insertions(+), 15 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 1018e4fbf3..bf11e5bdce 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2707,17 +2707,74 @@ int unit_file_disable( + return do_unit_file_disable(&lp, scope, flags, config_path, files, changes, n_changes); + } + ++static int normalize_linked_files( ++ UnitFileScope scope, ++ const LookupPaths *lp, ++ char **names_or_paths, ++ char ***ret_names, ++ char ***ret_files) { ++ ++ /* This is similar to normalize_filenames()/normalize_names() in src/systemctl/, ++ * but operates on real unit names. For each argument we we look up the actual path ++ * where the unit is found. This way linked units can be reenabled successfully. */ ++ ++ _cleanup_free_ char **files = NULL, **names = NULL; ++ int r; ++ ++ STRV_FOREACH(a, names_or_paths) { ++ _cleanup_(install_context_done) InstallContext ctx = { .scope = scope }; ++ UnitFileInstallInfo *i = NULL; ++ _cleanup_free_ char *n = NULL; ++ ++ r = path_extract_filename(*a, &n); ++ if (r < 0) ++ return r; ++ if (r == O_DIRECTORY) ++ return log_debug_errno(SYNTHETIC_ERRNO(EISDIR), ++ "Unexpected path to a directory \"%s\", refusing.", *a); ++ ++ if (!is_path(*a)) { ++ r = install_info_discover(&ctx, lp, n, SEARCH_LOAD|SEARCH_FOLLOW_CONFIG_SYMLINKS, &i, NULL, NULL); ++ if (r < 0) ++ log_debug_errno(r, "Failed to discover unit \"%s\", operating on name: %m", n); ++ } ++ ++ r = strv_consume(&names, TAKE_PTR(n)); ++ if (r < 0) ++ return r; ++ ++ const char *p = NULL; ++ if (i && i->path) ++ /* Use startswith here, because we know that paths are normalized, and ++ * path_startswith() would give us a relative path, but we need an absolute path ++ * relative to i->root. ++ * ++ * In other words: /var/tmp/instroot.1234/etc/systemd/system/frobnicator.service ++ * is replaced by /etc/systemd/system/frobnicator.service, which is "absolute" ++ * in a sense, but only makes sense "relative" to /var/tmp/instroot.1234/. ++ */ ++ p = startswith(i->path, i->root); ++ ++ r = strv_extend(&files, p ?: *a); ++ if (r < 0) ++ return r; ++ } ++ ++ *ret_names = TAKE_PTR(names); ++ *ret_files = TAKE_PTR(files); ++ return 0; ++} ++ + int unit_file_reenable( + UnitFileScope scope, + UnitFileFlags flags, + const char *root_dir, +- char **files, ++ char **names_or_paths, + UnitFileChange **changes, + size_t *n_changes) { + + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- size_t l, i; +- char **names; ++ _cleanup_strv_free_ char **names = NULL, **files = NULL; + int r; + + assert(scope >= 0); +@@ -2731,13 +2788,11 @@ int unit_file_reenable( + if (!config_path) + return -ENXIO; + +- /* First, we invoke the disable command with only the basename... */ +- l = strv_length(files); +- names = newa(char*, l+1); +- for (i = 0; i < l; i++) +- names[i] = basename(files[i]); +- names[i] = NULL; ++ r = normalize_linked_files(scope, &lp, names_or_paths, &names, &files); ++ if (r < 0) ++ return r; + ++ /* First, we invoke the disable command with only the basename... */ + r = do_unit_file_disable(&lp, scope, flags, config_path, names, changes, n_changes); + if (r < 0) + return r; +diff --git a/src/shared/install.h b/src/shared/install.h +index d21e2aaa45..dba6987406 100644 +--- a/src/shared/install.h ++++ b/src/shared/install.h +@@ -111,7 +111,7 @@ int unit_file_reenable( + UnitFileScope scope, + UnitFileFlags flags, + const char *root_dir, +- char **files, ++ char **names_or_paths, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_preset( +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index c1fb9626ab..0ed08a9da3 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -206,11 +206,9 @@ test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path" + islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" + +-# FIXME +-# "$systemctl" --root="$root" reenable 'link1.path' +-# islink "$root/etc/systemd/system/link1.path" "/link1.path" +-# islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" +- ++"$systemctl" --root="$root" reenable 'link1.path' ++islink "$root/etc/systemd/system/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" + + : -------manual link------------------------------------------ + cat >"$root/link3.suffix" < +Date: Tue, 15 Mar 2022 10:13:18 +0100 +Subject: [PATCH] test-systemctl-enable: extend the test for repeated + WantedBy/RequiredBy + +I was considering deduplicating the list of target units in +WantedBy/RequiredBy. But to do this meaningfully, we'd need to do alias +expansion first, i.e. after the initial parsing is done. This seems to be +more trouble than it would be worth. + +Instead, I added tests that we're doing the right thing and creating symlinks +as expected. For duplicate links, we create the link, and on the second time we +see that the link is already there, so the output is correct. + +(cherry picked from commit 0c003e8305188f25429938c7c4d09c0a5dfc961b) + +Related: #2082131 +--- + test/test-systemctl-enable.sh | 22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 0ed08a9da3..0a0123b9d7 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -285,39 +285,53 @@ test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" + test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" + + : -------template enablement w/ default instance-------------- +-cat >>"$root/etc/systemd/system/templ1@.service" <"$root/etc/systemd/system/templ1@.service" <"$root/etc/systemd/system/templ2@.service" < +Date: Wed, 2 Mar 2022 16:53:54 +0100 +Subject: [PATCH] shared/install: when we fail to chase a symlink, show some + logs + +When chase_symlinks() fails, we'd get the generic error: + + Failed to disable: Permission denied. + +Let's at least add the failure to changes list, so the user gets +a slightly better message. Ideally, we'd say where exactly the permission +failure occured, but chase_symlinks() is a library level function and I don't +think we should add logging there. The output looks like this now: + + Failed to resolve symlink "/tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias2.service": Permission denied + Failed to resolve symlink "/tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias.service": Permission denied + Failed to disable unit, file /tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias2.service: Permission denied. + Failed to disable unit, file /tmp/systemctl-test.1r7Roj/etc/systemd/system/link5alias.service: Permission denied. + +(cherry picked from commit 212a24f0bbe4c54183d3b0ad9579a995007e29a8) + +Related: #2082131 +--- + src/shared/install.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/shared/install.c b/src/shared/install.c +index bf11e5bdce..ce045d02be 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -616,6 +616,9 @@ static int remove_marked_symlinks_fd( + if (q == -ENOENT) + continue; + if (q < 0) { ++ log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p); ++ unit_file_changes_add(changes, n_changes, q, p, NULL); ++ + if (r == 0) + r = q; + continue; diff --git a/SOURCES/0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch b/SOURCES/0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch new file mode 100644 index 0000000..1dee0c7 --- /dev/null +++ b/SOURCES/0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch @@ -0,0 +1,42 @@ +From 64fa6f059ae0b491fdb52c7375d59774ff9c237a Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 15 Mar 2022 16:35:47 +0100 +Subject: [PATCH] shared/install: do not try to resolve symlinks outside of + root directory +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +I linked a file as root, so I had a symlink /root/test.service ← /etc/systemd/system/test.service. +To my surpise, when running test-systemctl-enable, it failed with a cryptic EACCES. +The previous commit made the logs a bit better. Strace shows that we +were trying to follow the symlink without taking --root into account. + +It seems that this bug was introduced in 66a19d85a533b15ed32f4066ec880b5a8c06babd: +before it, we'd do readlink_malloc(), which returned a path relative to root. But +we only used that path for checking if the path is in remove_symlinks_to set, which +contains relative paths. So if the path was relative, we'd get a false-negative +answer, but we didn't go outside of the root. (We need to canonicalize the symlink +to get a consistent answer.) But after 66a19 we use chase_symlinks(), without taking +root into account which is completely bogus. + +(cherry picked from commit 40276314afc4fb5c35c6b3da3e6185af6ed3886b) + +Related: #2082131 +--- + src/shared/install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index ce045d02be..ad0238ab50 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -612,7 +612,7 @@ static int remove_marked_symlinks_fd( + return -ENOMEM; + path_simplify(p); + +- q = chase_symlinks(p, NULL, CHASE_NONEXISTENT, &dest, NULL); ++ q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL); + if (q == -ENOENT) + continue; + if (q < 0) { diff --git a/SOURCES/0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch b/SOURCES/0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch new file mode 100644 index 0000000..a74db25 --- /dev/null +++ b/SOURCES/0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch @@ -0,0 +1,79 @@ +From 2a11a51491d3113f8d198c7d30ead8b555e60a61 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 15 Mar 2022 17:45:34 +0100 +Subject: [PATCH] test-systemctl-enable: enhance the test for unit file linking + +Current behaviour is wrong, but it cannot be shown in this test, because we +don't have a running systemd instance here. + +(cherry picked from commit 85516075a24fd2f1316575570d7d5f5a37f43dbd) + +Related: #2082131 +--- + test/test-systemctl-enable.sh | 39 ++++++++++++++++++++++++++++++++--- + 1 file changed, 36 insertions(+), 3 deletions(-) + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 0a0123b9d7..220ebfdab7 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -401,7 +401,7 @@ test ! -h "$root/etc/systemd/system/link4.service" + test ! -h "$root/etc/systemd/system/link4alias.service" + test ! -h "$root/etc/systemd/system/link4alias2.service" + +-: -------issue 661: link and enable on unit file-------------- ++: -------issue 661: enable on unit file-------------- + test ! -e "$root/etc/systemd/system/link5.service" + cat >"$root/etc/systemd/system/link5.service" <"$root/link5copy.service" <"$root/etc/systemd/system/link5@.path" < +Date: Wed, 16 Mar 2022 09:28:46 +0100 +Subject: [PATCH] shared/install: skip unnecessary chasing of symlinks in + disable + +We use the symlink source name and destination names to decide whether to remove +the symlink. But if the source name is enough to decide to remove the symlink, +we'd still look up the destination for no good reason. This is a slow operation, +let's skip it. + +(cherry picked from commit 7a6c73dabf6451d6ef22d0cdfbb1749a77450d5b) + +Related: #2082131 +--- + src/shared/install.c | 43 +++++++++++++++++++++++++------------------ + 1 file changed, 25 insertions(+), 18 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index ad0238ab50..08a9892260 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -599,8 +599,7 @@ static int remove_marked_symlinks_fd( + r = q; + + } else if (de->d_type == DT_LNK) { +- _cleanup_free_ char *p = NULL, *dest = NULL; +- const char *rp; ++ _cleanup_free_ char *p = NULL; + bool found; + int q; + +@@ -612,24 +611,32 @@ static int remove_marked_symlinks_fd( + return -ENOMEM; + path_simplify(p); + +- q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL); +- if (q == -ENOENT) +- continue; +- if (q < 0) { +- log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p); +- unit_file_changes_add(changes, n_changes, q, p, NULL); ++ /* We remove all links pointing to a file or path that is marked, as well as all ++ * files sharing the same name as a file that is marked. Do path chasing only if ++ * we don't already know that we want to remove the symlink. */ ++ found = set_contains(remove_symlinks_to, de->d_name); + +- if (r == 0) +- r = q; +- continue; +- } ++ if (!found) { ++ _cleanup_free_ char *dest = NULL; ++ ++ ++ q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL); ++ if (q == -ENOENT) ++ continue; ++ if (q < 0) { ++ log_debug_errno(q, "Failed to resolve symlink \"%s\": %m", p); ++ unit_file_changes_add(changes, n_changes, q, p, NULL); + +- /* We remove all links pointing to a file or path that is marked, as well as all files sharing +- * the same name as a file that is marked. */ ++ if (r == 0) ++ r = q; ++ continue; ++ } ++ ++ found = set_contains(remove_symlinks_to, dest) || ++ set_contains(remove_symlinks_to, basename(dest)); ++ ++ } + +- found = set_contains(remove_symlinks_to, dest) || +- set_contains(remove_symlinks_to, basename(dest)) || +- set_contains(remove_symlinks_to, de->d_name); + + if (!found) + continue; +@@ -650,7 +657,7 @@ static int remove_marked_symlinks_fd( + /* Now, remember the full path (but with the root prefix removed) of + * the symlink we just removed, and remove any symlinks to it, too. */ + +- rp = skip_root(lp->root_dir, p); ++ const char *rp = skip_root(lp->root_dir, p); + q = mark_symlink_for_removal(&remove_symlinks_to, rp ?: p); + if (q < 0) + return q; diff --git a/SOURCES/0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch b/SOURCES/0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch new file mode 100644 index 0000000..3682ca1 --- /dev/null +++ b/SOURCES/0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch @@ -0,0 +1,116 @@ +From 5aa2be25e7de16f4d3ff3b322cf8c35574e712c5 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 16 Mar 2022 09:51:24 +0100 +Subject: [PATCH] =?UTF-8?q?shared/install:=20also=20remove=20symlinks=20li?= + =?UTF-8?q?ke=20.wants/foo@one.service=20=E2=86=92=20../foo@one.service?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +So far 'systemctl enable' would create absolute links to the target template +name. And we would remove such symlinks just fine. But the user may create +symlinks manually in a different form. In particular, symlinks for instanced +units *must* have the instance in the source name, and then it is natural to +also include it in the target name (.wants/foo@one.service → ../foo@one.service +rather than .wants/foo@one.service → ../foo@.service). We would choke on such +links, or not remove them at all. A test is added: + +before: + ++ build-rawhide/systemctl --root=/tmp/systemctl-test.001xda disable templ1@.service +Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@seven.service". +Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@six.service". +Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@five.service". +Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@four.service". +Removed "/tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@three.service". +Failed to disable unit, refusing to operate on linked unit file /tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@two.service. +Failed to disable unit, refusing to operate on linked unit file /tmp/systemctl-test.001xda/etc/systemd/system/services.target.wants/templ1@two.service. + +after: + ++ build-rawhide/systemctl --root=/tmp/systemctl-test.QVP0ev disable templ1@.service +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@seven.service". +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@six.service". +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@five.service". +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@four.service". +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@three.service". +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@two.service". +Removed "/tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@one.service". ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@one.service ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@two.service ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@three.service ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@four.service ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@five.service ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@six.service ++ test '!' -h /tmp/systemctl-test.QVP0ev/etc/systemd/system/services.target.wants/templ1@seven.service + +(cherry picked from commit 9f61c9f79e0f77044b71ef2ba5edde20e15c6ad2) + +Related: #2082131 +--- + src/shared/install.c | 16 +++++++++++++--- + test/test-systemctl-enable.sh | 20 ++++++++++++++++++++ + 2 files changed, 33 insertions(+), 3 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 08a9892260..43955519ae 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -612,13 +612,23 @@ static int remove_marked_symlinks_fd( + path_simplify(p); + + /* We remove all links pointing to a file or path that is marked, as well as all +- * files sharing the same name as a file that is marked. Do path chasing only if +- * we don't already know that we want to remove the symlink. */ ++ * files sharing the same name as a file that is marked, and files sharing the same ++ * name after the instance has been removed. Do path chasing only if we don't already ++ * know that we want to remove the symlink. */ + found = set_contains(remove_symlinks_to, de->d_name); + + if (!found) { +- _cleanup_free_ char *dest = NULL; ++ _cleanup_free_ char *template = NULL; ++ ++ q = unit_name_template(de->d_name, &template); ++ if (q < 0 && q != -EINVAL) ++ return q; ++ if (q >= 0) ++ found = set_contains(remove_symlinks_to, template); ++ } + ++ if (!found) { ++ _cleanup_free_ char *dest = NULL; + + q = chase_symlinks(p, lp->root_dir, CHASE_NONEXISTENT, &dest, NULL); + if (q == -ENOENT) +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 220ebfdab7..4462fb386e 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -333,6 +333,26 @@ test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@one.serv + test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" + test ! -h "$root/etc/systemd/system/other@templ1.target.requires/templ1@two.service" + ++: -------removal of relative enablement symlinks-------------- ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" ++ln -s '../templ1@one.service' "$root/etc/systemd/system/services.target.wants/templ1@one.service" ++ln -s 'templ1@two.service' "$root/etc/systemd/system/services.target.wants/templ1@two.service" ++ln -s '../templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@three.service" ++ln -s 'templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@four.service" ++ln -s '/usr/lib/systemd/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@five.service" ++ln -s '/etc/systemd/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@six.service" ++ln -s '/run/system/templ1@.service' "$root/etc/systemd/system/services.target.wants/templ1@seven.service" ++ ++# this should remove all links ++"$systemctl" --root="$root" disable 'templ1@.service' ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@one.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@two.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@three.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@four.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@five.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@six.service" ++test ! -h "$root/etc/systemd/system/services.target.wants/templ1@seven.service" ++ + : -------template enablement for another template------------- + cat >"$root/etc/systemd/system/templ2@.service" < +Date: Wed, 16 Mar 2022 10:17:32 +0100 +Subject: [PATCH] shared/install: create relative symlinks for enablement and + aliasing +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +This is a fairly noticable change, but I think it needs to be done. +So far we'd create an absolute symlink to the target unit file: + .wants/foo.service → /usr/lib/systemd/system/foo.service +or + alias.service → /etc/systemd/system/aliased.service. + +This works reasonably well, except in one case: where the unit file +is linked. When we look at a file link, the name of the physical file +isn't used, and we only take the account the symlink source name. +(In fact, the destination filename may not even be a well-formed unit name, +so we couldn't use it, even if we wanted to.) But this means that if +a file is linked, and specifies aliases, we'd create absolute links for +those aliases, and systemd would consider each "alias" to be a separate +unit. This isn't checked by the tests here, because we don't have a running +systemd instance, but it is easy enough to check manually. + +The most reasonable way to fix this is to create relative links to the +unit file: + .wants/foo.service → ../foo.service + alias.service → aliased.service. + +I opted to use no prefix for aliases, both normal and 'default.target', +and to add "../" for .wants/ and .requires/. Note that the link that is +created doesn't necessarily point to the file. E.g. if we're enabling +a file under /usr/lib/systemd/system, and create a symlink in /etc/systemd/system, +it'll still be "../foo.service", not "../../usr/lib/systemd/system/foo.service". +For our unit loading logic this doesn't matter, and figuring out a path +that actually leads somewhere would be more work. Since the user is allowed +to move the unit file, or add a new unit file in a different location, and +we don't actually follow the symlink, I think it's OK to create a dangling +symlink. The prefix of "../" is useful to give a hint that the link points +to files that are conceptually "one level up" in the directory hierarchy. + +With the relative symlinks, systemd knows that those are aliases. + +The tests are adjusted to use the new forms. There were a few tests that +weren't really testing something useful: 'test -e x' fails if 'x' is a +a dangling symlink. Absolute links in the chroot would be dangling, even +though the target existed in the expected path, but become non-dangling +when made relative and the test fails. + +This should be described in NEWS, but I'm not adding that here, because +it'd likely result in conflicts. + +(cherry picked from commit d6c9411072901556176ac130f2ce71a33107aa93) + +Related: #2082131 +--- + src/shared/install.c | 14 ++-- + src/test/test-install-root.c | 65 +++++++++-------- + test/test-systemctl-enable.sh | 128 ++++++++++++++++------------------ + 3 files changed, 105 insertions(+), 102 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 43955519ae..1a2b0ccf24 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1842,7 +1842,7 @@ static int install_info_symlink_alias( + if (!alias_path) + return -ENOMEM; + +- q = create_symlink(lp, info->path, alias_path, force, changes, n_changes); ++ q = create_symlink(lp, info->name, alias_path, force, changes, n_changes); + r = r < 0 ? r : q; + } + +@@ -1911,7 +1911,7 @@ static int install_info_symlink_wants( + } + + STRV_FOREACH(s, list) { +- _cleanup_free_ char *path = NULL, *dst = NULL; ++ _cleanup_free_ char *dst = NULL; + + q = install_name_printf(scope, info, *s, info->root, &dst); + if (q < 0) { +@@ -1941,11 +1941,15 @@ static int install_info_symlink_wants( + continue; + } + +- path = strjoin(config_path, "/", dst, suffix, n); ++ _cleanup_free_ char *path = strjoin(config_path, "/", dst, suffix, n); + if (!path) + return -ENOMEM; + +- q = create_symlink(lp, info->path, path, true, changes, n_changes); ++ _cleanup_free_ char *target = strjoin("../", info->name); ++ if (!target) ++ return -ENOMEM; ++ ++ q = create_symlink(lp, target, path, true, changes, n_changes); + if (r == 0) + r = q; + +@@ -2853,7 +2857,7 @@ int unit_file_set_default( + return r; + + new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET); +- return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes); ++ return create_symlink(&lp, info->name, new_path, flags & UNIT_FILE_FORCE, changes, n_changes); + } + + int unit_file_get_default( +diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c +index 4f66c12655..dca695d124 100644 +--- a/src/test/test-install-root.c ++++ b/src/test/test-install-root.c +@@ -88,7 +88,7 @@ TEST(basic_mask_and_enable) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service")); ++ assert_se(streq(changes[0].source, "../a.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -128,7 +128,7 @@ TEST(basic_mask_and_enable) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service")); ++ assert_se(streq(changes[0].source, "../a.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -147,7 +147,7 @@ TEST(basic_mask_and_enable) { + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); + assert_se(streq(changes[0].path, p)); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service")); ++ assert_se(streq(changes[1].source, "../a.service")); + assert_se(streq(changes[1].path, p)); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; +@@ -186,7 +186,7 @@ TEST(basic_mask_and_enable) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service")); ++ assert_se(streq(changes[0].source, "../f.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service"); + assert_se(streq(changes[0].path, p)); + assert_se(changes[1].type_or_errno == UNIT_FILE_DESTINATION_NOT_PRESENT); +@@ -280,7 +280,8 @@ TEST(linked_units) { + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service"); + for (i = 0 ; i < n_changes; i++) { + assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[i].source, "/opt/linked.service")); ++ assert_se(STR_IN_SET(changes[i].source, ++ "../linked.service", "/opt/linked.service")); + + if (p && streq(changes[i].path, p)) + p = NULL; +@@ -322,7 +323,8 @@ TEST(linked_units) { + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service"); + for (i = 0 ; i < n_changes; i++) { + assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[i].source, "/opt/linked2.service")); ++ assert_se(STR_IN_SET(changes[i].source, ++ "../linked2.service", "/opt/linked2.service")); + + if (p && streq(changes[i].path, p)) + p = NULL; +@@ -340,7 +342,7 @@ TEST(linked_units) { + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(startswith(changes[0].path, root)); + assert_se(endswith(changes[0].path, "linked3.service")); +- assert_se(streq(changes[0].source, "/opt/linked3.service")); ++ assert_se(streq(changes[0].source, "../linked3.service")); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + } +@@ -371,7 +373,7 @@ TEST(default) { + assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target")); ++ assert_se(streq(changes[0].source, "test-default-real.target")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -401,7 +403,7 @@ TEST(add_dependency) { + assert_se(unit_file_add_dependency(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service")); ++ assert_se(streq(changes[0].source, "../real-add-dependency-test-service.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -442,7 +444,7 @@ TEST(template_enable) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service")); ++ assert_se(streq(changes[0].source, "../template@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -473,13 +475,14 @@ TEST(template_enable) { + + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service")); ++ assert_se(streq(changes[0].source, "../template@foo.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); ++ assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0); ++ assert_se(state == UNIT_FILE_INDIRECT); + assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +@@ -506,7 +509,7 @@ TEST(template_enable) { + + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service")); ++ assert_se(streq(changes[0].source, "../template@quux.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -552,7 +555,7 @@ TEST(indirect) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service")); ++ assert_se(streq(changes[0].source, "../indirectb.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -604,7 +607,7 @@ TEST(preset_and_list) { + assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service")); ++ assert_se(streq(changes[0].source, "../preset-yes.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -641,7 +644,7 @@ TEST(preset_and_list) { + for (i = 0; i < n_changes; i++) { + + if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) { +- assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service")); ++ assert_se(streq(changes[i].source, "../preset-yes.service")); + assert_se(streq(changes[i].path, p)); + } else + assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK); +@@ -757,7 +760,7 @@ TEST(preset_order) { + assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service")); ++ assert_se(streq(changes[0].source, "../prefix-1.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -866,8 +869,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service")); +- assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-1.service")); ++ assert_se(streq(changes[1].source, "../with-dropin-1.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service"); +@@ -880,8 +883,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service")); +- assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-2.service")); ++ assert_se(streq(changes[1].source, "../with-dropin-2.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service"); +@@ -894,8 +897,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service")); +- assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-3.service")); ++ assert_se(streq(changes[1].source, "../with-dropin-3.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service"); +@@ -908,8 +911,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service")); +- assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-4a.service")); ++ assert_se(streq(changes[1].source, "../with-dropin-4b.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service"); +@@ -975,8 +978,8 @@ TEST(with_dropin_template) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service")); +- assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-1@instance-1.service")); ++ assert_se(streq(changes[1].source, "../with-dropin-1@instance-1.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service"); +@@ -988,8 +991,8 @@ TEST(with_dropin_template) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service")); +- assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-2@instance-1.service")); ++ assert_se(streq(changes[1].source, "../with-dropin-2@instance-1.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service"); +@@ -1000,7 +1003,7 @@ TEST(with_dropin_template) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-2@instance-2.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -1009,7 +1012,7 @@ TEST(with_dropin_template) { + assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service")); ++ assert_se(streq(changes[0].source, "../with-dropin-3@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 4462fb386e..9463433c5b 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -68,27 +68,27 @@ EOF + "$systemctl" --root="$root" enable test1 && { echo "Expected failure" >&2; exit 1; } + test -h "$root/etc/systemd/system/default.target.wants/test1.service" + test -h "$root/etc/systemd/system/special.target.requires/test1.service" +-test ! -e "$root/etc/systemd/system/test1-goodalias.service" ++test -e "$root/etc/systemd/system/test1-goodalias.service" + test -h "$root/etc/systemd/system/test1-goodalias.service" +-test ! -e "$root/etc/systemd/system/test1@badalias.service" +-test ! -e "$root/etc/systemd/system/test1-badalias.target" +-test ! -e "$root/etc/systemd/system/test1-badalias.socket" ++test ! -h "$root/etc/systemd/system/test1@badalias.service" ++test ! -h "$root/etc/systemd/system/test1-badalias.target" ++test ! -h "$root/etc/systemd/system/test1-badalias.socket" ++test -e "$root/etc/systemd/system/test1-goodalias2.service" + test -h "$root/etc/systemd/system/test1-goodalias2.service" + + : -------aliases in reeanble---------------------------------- + "$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; } +-test -h "$root/etc/systemd/system/default.target.wants/test1.service" +-test ! -e "$root/etc/systemd/system/test1-goodalias.service" +-test -h "$root/etc/systemd/system/test1-goodalias.service" ++islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service" ++islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service" + +-test ! -e "$root/etc/systemd/system/test1@badalias.service" +-test ! -e "$root/etc/systemd/system/test1-badalias.target" +-test ! -e "$root/etc/systemd/system/test1-badalias.socket" ++test ! -h "$root/etc/systemd/system/test1@badalias.service" ++test ! -h "$root/etc/systemd/system/test1-badalias.target" ++test ! -h "$root/etc/systemd/system/test1-badalias.socket" + + "$systemctl" --root="$root" disable test1 +-test ! -e "$root/etc/systemd/system/default.target.wants/test1.service" +-test ! -e "$root/etc/systemd/system/special.target.requires/test1.service" +-test ! -e "$root/etc/systemd/system/test1-goodalias.service" ++test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" ++test ! -h "$root/etc/systemd/system/test1-goodalias.service" + + : -------also units------------------------------------------- + cat >"$root/etc/systemd/system/test2.socket" <&2; exit 1; } + islink "$root/etc/systemd/system/link1.path" "/link1.path" +-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + + : -------enable bad suffix------------------------------------ + cp "$root/link1.path" "$root/subdir/link1.suffix" +@@ -204,11 +204,11 @@ test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path" + + "$systemctl" --root="$root" enable 'link1.path' + islink "$root/etc/systemd/system/link1.path" "/link1.path" +-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + + "$systemctl" --root="$root" reenable 'link1.path' + islink "$root/etc/systemd/system/link1.path" "/link1.path" +-islink "$root/etc/systemd/system/paths.target.wants/link1.path" "/link1.path" ++islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + + : -------manual link------------------------------------------ + cat >"$root/link3.suffix" <"$root/etc/systemd/system/templ1@.service" < +Date: Wed, 16 Mar 2022 17:37:58 +0100 +Subject: [PATCH] shared/install: when looking for symlinks in + .wants/.requires, ignore symlink target +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We'd say that file is enabled indirectly if we had a symlink like: + foo@.service ← bar.target.wants/foo@one.service +but not when we had + foo@one.service ← bar.target.wants/foo@one.service + +The effect of both link types is the same. In fact we don't care +about the symlink target. (We'll warn if it is mismatched, but we honour +it anyway.) + +So let's use the original match logic only for aliases. +For .wants/.requires we instead look for a matching source name, +or a source name that matches after stripping of instance. + +(cherry picked from commit 466f6979c90aaee62c33723392cc49c6638a3f46) + +Related: #2082131 +--- + src/shared/install.c | 93 ++++++++++++++++++++++++++++---------------- + 1 file changed, 60 insertions(+), 33 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 1a2b0ccf24..a864039f44 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -748,7 +748,8 @@ static int find_symlinks_in_directory( + const char *dir_path, + const char *root_dir, + const UnitFileInstallInfo *info, +- bool match_aliases, ++ bool ignore_destination, ++ bool match_name, + bool ignore_same_name, + const char *config_path, + bool *same_name_link) { +@@ -756,51 +757,67 @@ static int find_symlinks_in_directory( + int r = 0; + + FOREACH_DIRENT(de, dir, return -errno) { +- _cleanup_free_ char *dest = NULL; +- bool found_path = false, found_dest, b = false; ++ bool found_path = false, found_dest = false, b = false; + int q; + + if (de->d_type != DT_LNK) + continue; + +- /* Acquire symlink destination */ +- q = readlinkat_malloc(dirfd(dir), de->d_name, &dest); +- if (q == -ENOENT) +- continue; +- if (q < 0) { +- if (r == 0) +- r = q; +- continue; +- } ++ if (!ignore_destination) { ++ _cleanup_free_ char *dest = NULL; ++ ++ /* Acquire symlink destination */ ++ q = readlinkat_malloc(dirfd(dir), de->d_name, &dest); ++ if (q == -ENOENT) ++ continue; ++ if (q < 0) { ++ if (r == 0) ++ r = q; ++ continue; ++ } + +- /* Make absolute */ +- if (!path_is_absolute(dest)) { +- char *x; ++ /* Make absolute */ ++ if (!path_is_absolute(dest)) { ++ char *x; + +- x = path_join(dir_path, dest); +- if (!x) +- return -ENOMEM; ++ x = path_join(dir_path, dest); ++ if (!x) ++ return -ENOMEM; + +- free_and_replace(dest, x); ++ free_and_replace(dest, x); ++ } ++ ++ /* Check if what the symlink points to matches what we are looking for */ ++ found_dest = streq(basename(dest), info->name); + } + + assert(unit_name_is_valid(info->name, UNIT_NAME_ANY)); +- if (!ignore_same_name) +- /* Check if the symlink itself matches what we are looking for. +- * +- * If ignore_same_name is specified, we are in one of the directories which +- * have lower priority than the unit file, and even if a file or symlink with +- * this name was found, we should ignore it. */ +- found_path = streq(de->d_name, info->name); + +- /* Check if what the symlink points to matches what we are looking for */ +- found_dest = streq(basename(dest), info->name); ++ /* Check if the symlink itself matches what we are looking for. ++ * ++ * If ignore_destination is specified, we only look at the source name. ++ * ++ * If ignore_same_name is specified, we are in one of the directories which ++ * have lower priority than the unit file, and even if a file or symlink with ++ * this name was found, we should ignore it. */ ++ ++ if (ignore_destination || !ignore_same_name) ++ found_path = streq(de->d_name, info->name); ++ ++ if (!found_path && ignore_destination) { ++ _cleanup_free_ char *template = NULL; ++ ++ q = unit_name_template(de->d_name, &template); ++ if (q < 0 && q != -EINVAL) ++ return q; ++ if (q >= 0) ++ found_dest = streq(template, info->name); ++ } + + if (found_path && found_dest) { + _cleanup_free_ char *p = NULL, *t = NULL; + +- /* Filter out same name links in the main +- * config path */ ++ /* Filter out same name links in the main config path */ + p = path_make_absolute(de->d_name, dir_path); + t = path_make_absolute(info->name, config_path); + +@@ -813,7 +830,7 @@ static int find_symlinks_in_directory( + if (b) + *same_name_link = true; + else if (found_path || found_dest) { +- if (!match_aliases) ++ if (!match_name) + return 1; + + /* Check if symlink name is in the set of names used by [Install] */ +@@ -872,7 +889,12 @@ static int find_symlinks( + continue; + } + +- r = find_symlinks_in_directory(d, path, root_dir, i, match_name, ignore_same_name, config_path, same_name_link); ++ r = find_symlinks_in_directory(d, path, root_dir, i, ++ /* ignore_destination= */ true, ++ /* match_name= */ match_name, ++ /* ignore_same_name= */ ignore_same_name, ++ config_path, ++ same_name_link); + if (r > 0) + return 1; + else if (r < 0) +@@ -881,7 +903,12 @@ static int find_symlinks( + + /* We didn't find any suitable symlinks in .wants or .requires directories, let's look for linked unit files in this directory. */ + rewinddir(config_dir); +- return find_symlinks_in_directory(config_dir, config_path, root_dir, i, match_name, ignore_same_name, config_path, same_name_link); ++ return find_symlinks_in_directory(config_dir, config_path, root_dir, i, ++ /* ignore_destination= */ false, ++ /* match_name= */ match_name, ++ /* ignore_same_name= */ ignore_same_name, ++ config_path, ++ same_name_link); + } + + static int find_symlinks_in_scope( diff --git a/SOURCES/0195-shared-install-stop-passing-duplicate-root-argument-.patch b/SOURCES/0195-shared-install-stop-passing-duplicate-root-argument-.patch new file mode 100644 index 0000000..29bd4e3 --- /dev/null +++ b/SOURCES/0195-shared-install-stop-passing-duplicate-root-argument-.patch @@ -0,0 +1,111 @@ +From 0d19f19be9a93642f10b4c039aafd9e62f35e8fc Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 17 Mar 2022 10:16:30 +0100 +Subject: [PATCH] shared/install: stop passing duplicate root argument to + install_name_printf() + +All callers were just passing info + info->root, we can simplify this. + +(cherry picked from commit 38e8a6c7fdffd3389cb3596139b1309579193946) + +Related: #2082131 +--- + src/shared/install-printf.c | 7 +++---- + src/shared/install-printf.h | 3 +-- + src/shared/install.c | 8 ++++---- + src/test/test-load-fragment.c | 2 +- + 4 files changed, 9 insertions(+), 11 deletions(-) + +diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c +index 963102674b..7aad1b7443 100644 +--- a/src/shared/install-printf.c ++++ b/src/shared/install-printf.c +@@ -105,9 +105,8 @@ static int specifier_last_component(char specifier, const void *data, const char + + int install_name_printf( + UnitFileScope scope, +- const UnitFileInstallInfo *i, ++ const UnitFileInstallInfo *info, + const char *format, +- const char *root, + char **ret) { + /* This is similar to unit_name_printf() */ + +@@ -124,9 +123,9 @@ int install_name_printf( + {} + }; + +- assert(i); ++ assert(info); + assert(format); + assert(ret); + +- return specifier_printf(format, UNIT_NAME_MAX, table, root, i, ret); ++ return specifier_printf(format, UNIT_NAME_MAX, table, info->root, info, ret); + } +diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h +index d2cccdf66d..60d3a9fc55 100644 +--- a/src/shared/install-printf.h ++++ b/src/shared/install-printf.h +@@ -6,7 +6,6 @@ + + int install_name_printf( + UnitFileScope scope, +- const UnitFileInstallInfo *i, ++ const UnitFileInstallInfo *info, + const char *format, +- const char *root, + char **ret); +diff --git a/src/shared/install.c b/src/shared/install.c +index a864039f44..f911d527df 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1205,7 +1205,7 @@ static int config_parse_also( + if (r == 0) + break; + +- r = install_name_printf(ctx->scope, info, word, info->root, &printed); ++ r = install_name_printf(ctx->scope, info, word, &printed); + if (r < 0) + return log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to resolve unit name in Also=\"%s\": %m", word); +@@ -1254,7 +1254,7 @@ static int config_parse_default_instance( + return log_syntax(unit, LOG_WARNING, filename, line, 0, + "DefaultInstance= only makes sense for template units, ignoring."); + +- r = install_name_printf(ctx->scope, info, rvalue, info->root, &printed); ++ r = install_name_printf(ctx->scope, info, rvalue, &printed); + if (r < 0) + return log_syntax(unit, LOG_WARNING, filename, line, r, + "Failed to resolve instance name in DefaultInstance=\"%s\": %m", rvalue); +@@ -1850,7 +1850,7 @@ static int install_info_symlink_alias( + STRV_FOREACH(s, info->aliases) { + _cleanup_free_ char *alias_path = NULL, *dst = NULL, *dst_updated = NULL; + +- q = install_name_printf(scope, info, *s, info->root, &dst); ++ q = install_name_printf(scope, info, *s, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); + r = r < 0 ? r : q; +@@ -1940,7 +1940,7 @@ static int install_info_symlink_wants( + STRV_FOREACH(s, list) { + _cleanup_free_ char *dst = NULL; + +- q = install_name_printf(scope, info, *s, info->root, &dst); ++ q = install_name_printf(scope, info, *s, &dst); + if (q < 0) { + unit_file_changes_add(changes, n_changes, q, *s, NULL); + return q; +diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c +index 9df53cec2b..a87c654f4e 100644 +--- a/src/test/test-load-fragment.c ++++ b/src/test/test-load-fragment.c +@@ -531,7 +531,7 @@ TEST(install_printf, .sd_booted = true) { + _cleanup_free_ char *t = NULL, \ + *d1 = ASSERT_PTR(strdup(i.name)), \ + *d2 = ASSERT_PTR(strdup(i.path)); \ +- int r = install_name_printf(scope, &src, pattern, NULL, &t); \ ++ int r = install_name_printf(scope, &src, pattern, &t); \ + assert_se(result ? r >= 0 : r < 0); \ + memzero(i.name, strlen(i.name)); \ + memzero(i.path, strlen(i.path)); \ diff --git a/SOURCES/0196-basic-unit-file-reverse-negative-conditional.patch b/SOURCES/0196-basic-unit-file-reverse-negative-conditional.patch new file mode 100644 index 0000000..633fcd4 --- /dev/null +++ b/SOURCES/0196-basic-unit-file-reverse-negative-conditional.patch @@ -0,0 +1,70 @@ +From 4ac4cc6e4b17dea8f071e260cd8d3eae68ba883d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 17 Mar 2022 11:46:03 +0100 +Subject: [PATCH] basic/unit-file: reverse negative conditional + +Having the reverse condition first makes changes that I want to do +later awkward, so reverse it as a separate step first. + +(cherry picked from commit bd177c62158df97785af0d360c4fc9c266311d88) + +Related: #2082131 +--- + src/basic/unit-file.c | 32 ++++++++++++++++---------------- + 1 file changed, 16 insertions(+), 16 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 6cf66b45cf..2474648ceb 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -326,27 +326,16 @@ int unit_file_resolve_symlink( + + assert(path_is_absolute(simplified)); + +- /* Check if the symlink goes outside of our search path. +- * If yes, it's a linked unit file or mask, and we don't care about the target name ++ /* Check if the symlink remain inside of of our search path. ++ * If yes, it is an alias. Verify that it is valid. ++ * ++ * If no, then this is a linked unit file or mask, and we don't care about the target name + * when loading units, and we return the link *source* (resolve_destination_target == false); + * When this is called for installation purposes, we want the final destination, + * so we return the *target*. +- * +- * Otherwise, let's verify that it's a good alias. + */ + const char *tail = path_startswith_strv(simplified, search_path); +- if (!tail) { +- log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified); +- +- if (resolve_destination_target) +- dst = TAKE_PTR(simplified); +- else { +- dst = path_join(dir, filename); +- if (!dst) +- return log_oom(); +- } +- +- } else { ++ if (tail) { /* An alias */ + _cleanup_free_ char *target_name = NULL; + + r = path_extract_filename(simplified, &target_name); +@@ -361,6 +350,17 @@ int unit_file_resolve_symlink( + dir, filename, simplified); + + dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name); ++ ++ } else { ++ log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified); ++ ++ if (resolve_destination_target) ++ dst = TAKE_PTR(simplified); ++ else { ++ dst = path_join(dir, filename); ++ if (!dst) ++ return log_oom(); ++ } + } + + *ret_destination = TAKE_PTR(dst); diff --git a/SOURCES/0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch b/SOURCES/0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch new file mode 100644 index 0000000..f5b972c --- /dev/null +++ b/SOURCES/0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch @@ -0,0 +1,109 @@ +From e2d699c92944c6251f9de161c9e3ae93d915c4e0 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 17 Mar 2022 15:50:16 +0100 +Subject: [PATCH] shared/install: split UNIT_FILE_SYMLINK into two states + +The two states are distinguished, but are treated everywhere identically, +so there is no difference in behaviour except for slighlty different log +output. + +(cherry picked from commit 48ed75adabef3427767038fa155e55b3b0d48f35) + +Related: #2082131 +--- + src/basic/unit-file.c | 6 ++++-- + src/shared/install.c | 14 +++++++++----- + src/shared/install.h | 3 ++- + 3 files changed, 15 insertions(+), 8 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 2474648ceb..7c1ae515e1 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -282,7 +282,9 @@ int unit_file_resolve_symlink( + * + * If resolve_destination_target is true, an absolute path will be returned. + * If not, an absolute path is returned for linked unit files, and a relative +- * path otherwise. */ ++ * path otherwise. ++ * ++ * Returns an error, false if this is an alias, true if it's a linked unit file. */ + + assert(filename); + assert(ret_destination); +@@ -364,7 +366,7 @@ int unit_file_resolve_symlink( + } + + *ret_destination = TAKE_PTR(dst); +- return 0; ++ return !tail; /* true if linked unit file */ + } + + int unit_file_build_name_map( +diff --git a/src/shared/install.c b/src/shared/install.c +index f911d527df..b33f7d4bc1 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -93,8 +93,9 @@ void unit_file_presets_freep(UnitFilePresets *p) { + + static const char *const unit_file_type_table[_UNIT_FILE_TYPE_MAX] = { + [UNIT_FILE_TYPE_REGULAR] = "regular", +- [UNIT_FILE_TYPE_SYMLINK] = "symlink", +- [UNIT_FILE_TYPE_MASKED] = "masked", ++ [UNIT_FILE_TYPE_LINKED] = "linked", ++ [UNIT_FILE_TYPE_ALIAS] = "alias", ++ [UNIT_FILE_TYPE_MASKED] = "masked", + }; + + DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(unit_file_type, UnitFileType); +@@ -1404,14 +1405,17 @@ static int unit_file_load_or_readlink( + true, &info->symlink_target); + if (r < 0) + return r; ++ bool outside_search_path = r > 0; + + r = null_or_empty_path_with_root(info->symlink_target, lp->root_dir); + if (r < 0 && r != -ENOENT) + return log_debug_errno(r, "Failed to stat %s: %m", info->symlink_target); + if (r > 0) + info->type = UNIT_FILE_TYPE_MASKED; ++ else if (outside_search_path) ++ info->type = UNIT_FILE_TYPE_LINKED; + else +- info->type = UNIT_FILE_TYPE_SYMLINK; ++ info->type = UNIT_FILE_TYPE_ALIAS; + + return 0; + } +@@ -1550,7 +1554,7 @@ static int install_info_follow( + assert(ctx); + assert(info); + +- if (info->type != UNIT_FILE_TYPE_SYMLINK) ++ if (!IN_SET(info->type, UNIT_FILE_TYPE_ALIAS, UNIT_FILE_TYPE_LINKED)) + return -EINVAL; + if (!info->symlink_target) + return -EINVAL; +@@ -1591,7 +1595,7 @@ static int install_info_traverse( + return r; + + i = start; +- while (i->type == UNIT_FILE_TYPE_SYMLINK) { ++ while (IN_SET(i->type, UNIT_FILE_TYPE_ALIAS, UNIT_FILE_TYPE_LINKED)) { + /* Follow the symlink */ + + if (++k > UNIT_FILE_FOLLOW_SYMLINK_MAX) +diff --git a/src/shared/install.h b/src/shared/install.h +index dba6987406..95427537f2 100644 +--- a/src/shared/install.h ++++ b/src/shared/install.h +@@ -70,7 +70,8 @@ struct UnitFileList { + + enum UnitFileType { + UNIT_FILE_TYPE_REGULAR, +- UNIT_FILE_TYPE_SYMLINK, ++ UNIT_FILE_TYPE_LINKED, ++ UNIT_FILE_TYPE_ALIAS, + UNIT_FILE_TYPE_MASKED, + _UNIT_FILE_TYPE_MAX, + _UNIT_FILE_TYPE_INVALID = -EINVAL, diff --git a/SOURCES/0198-shared-install-fix-handling-of-a-linked-unit-file.patch b/SOURCES/0198-shared-install-fix-handling-of-a-linked-unit-file.patch new file mode 100644 index 0000000..b22a45a --- /dev/null +++ b/SOURCES/0198-shared-install-fix-handling-of-a-linked-unit-file.patch @@ -0,0 +1,57 @@ +From 13c099caa9ae0389423c403152952c3c548fd146 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 17 Mar 2022 16:02:10 +0100 +Subject: [PATCH] shared/install: fix handling of a linked unit file + +When we have a symlink that goes outside of our search path, we should just +ignore the target file name. But we were verifying it, and rejecting in +the case where a symlink was created manually. + +(cherry picked from commit 48eadb9d9b66f302cda09cdf6d35fead31aaa968) + +Related: #2082131 +--- + src/shared/install.c | 4 +++- + test/test-systemctl-enable.sh | 12 ++++++++---- + 2 files changed, 11 insertions(+), 5 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index b33f7d4bc1..d6951b805d 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1609,7 +1609,9 @@ static int install_info_traverse( + return -ELOOP; + } + +- r = install_info_follow(ctx, i, lp, flags, false); ++ r = install_info_follow(ctx, i, lp, flags, ++ /* If linked, don't look at the target name */ ++ /* ignore_different_name= */ i->type == UNIT_FILE_TYPE_LINKED); + if (r == -EXDEV) { + _cleanup_free_ char *buffer = NULL; + const char *bn; +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 9463433c5b..45f3513de3 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -216,12 +216,16 @@ cat >"$root/link3.suffix" < +Date: Thu, 24 Mar 2022 11:52:35 +0100 +Subject: [PATCH] test-systemctl-enable: make shellcheck happy + +Quoting is not necessary in many places, but I think it's nicer +to use it consistently. + +(cherry picked from commit 84fdced62c740a3b07656e84747dd721ad6a30c5) + +Related: #2082131 +--- + test/test-systemctl-enable.sh | 76 +++++++++++++++++------------------ + 1 file changed, 38 insertions(+), 38 deletions(-) + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 45f3513de3..3b30f090a5 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -19,10 +19,10 @@ islink() { + test "$(readlink "$1")" = "$2" || return 2 + } + +-: ------enablement nonexistent-------------------------------- ++: '------enable nonexistent------------------------------------' + "$systemctl" --root="$root" enable test1.service && { echo "Expected failure" >&2; exit 1; } + +-: ------basic enablement-------------------------------------- ++: '------basic enablement--------------------------------------' + mkdir -p "$root/etc/systemd/system" + cat >"$root/etc/systemd/system/test1.service" <>"$root/etc/systemd/system/test1.service" <&2; exit 1; } + islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service" + islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service" +@@ -90,7 +90,7 @@ test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" + test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" + test ! -h "$root/etc/systemd/system/test1-goodalias.service" + +-: -------also units------------------------------------------- ++: '-------also units-------------------------------------------' + cat >"$root/etc/systemd/system/test2.socket" <&2; exit 1; } +@@ -130,65 +130,65 @@ EOF + "$systemctl" --root="$root" link '/link1.path' + islink "$root/etc/systemd/system/link1.path" "/link1.path" + +-: -------link already linked same path------------------------ ++: '-------link already linked same path------------------------' + SYSTEMD_LOG_LEVEL=debug "$systemctl" --root="$root" link '/link1.path' # this passes + islink "$root/etc/systemd/system/link1.path" "/link1.path" + +-: -------link already linked different path------------------- ++: '-------link already linked different path-------------------' + mkdir "$root/subdir" + cp "$root/link1.path" "$root/subdir/" + "$systemctl" --root="$root" link '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; } + islink "$root/etc/systemd/system/link1.path" "/link1.path" + +-: -------link bad suffix-------------------------------------- ++: '-------link bad suffix--------------------------------------' + cp "$root/link1.path" "$root/subdir/link1.suffix" + "$systemctl" --root="$root" link '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; } + test ! -e "$root/etc/systemd/system/link1.suffix" + +-: -------unlink by unit name---------------------------------- ++: '-------unlink by unit name----------------------------------' + "$systemctl" --root="$root" disable 'link1.path' + test ! -e "$root/etc/systemd/system/link1.path" + +-: -------unlink by path--------------------------------------- ++: '-------unlink by path---------------------------------------' + "$systemctl" --root="$root" link '/link1.path' + test -h "$root/etc/systemd/system/link1.path" + "$systemctl" --root="$root" disable '/link1.path' + test ! -e "$root/etc/systemd/system/link1.path" + +-: -------unlink by wrong path--------------------------------- ++: '-------unlink by wrong path---------------------------------' + "$systemctl" --root="$root" link '/link1.path' + test -h "$root/etc/systemd/system/link1.path" + "$systemctl" --root="$root" disable '/subdir/link1.path' # we only care about the name + test ! -e "$root/etc/systemd/system/link1.path" + + +-: -------link and enable-------------------------------------- ++: '-------link and enable--------------------------------------' + "$systemctl" --root="$root" enable '/link1.path' + islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + +-: -------enable already linked same path---------------------- ++: '-------enable already linked same path----------------------' + "$systemctl" --root="$root" enable '/link1.path' + islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + +-: -------enable already linked different path----------------- ++: '-------enable already linked different path-----------------' + "$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; } + islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + +-: -------enable bad suffix------------------------------------ ++: '-------enable bad suffix------------------------------------' + cp "$root/link1.path" "$root/subdir/link1.suffix" + "$systemctl" --root="$root" enable '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; } + test ! -e "$root/etc/systemd/system/link1.suffix" + test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix" + +-: -------disable by unit name--------------------------------- ++: '-------disable by unit name---------------------------------' + "$systemctl" --root="$root" disable 'link1.path' + test ! -e "$root/etc/systemd/system/link1.path" + test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path" + +-: -------disable by path-------------------------------------- ++: '-------disable by path--------------------------------------' + "$systemctl" --root="$root" enable '/link1.path' + test -h "$root/etc/systemd/system/link1.path" + test -h "$root/etc/systemd/system/paths.target.wants/link1.path" +@@ -197,7 +197,7 @@ test ! -e "$root/etc/systemd/system/link1.path" + test ! -e "$root/etc/systemd/system/paths.target.wants/link1.path" + + +-: -------link then enable------------------------------------- ++: '-------link and enable-------------------------------------' + "$systemctl" --root="$root" link '/link1.path' + islink "$root/etc/systemd/system/link1.path" "/link1.path" + test ! -h "$root/etc/systemd/system/paths.target.wants/link1.path" +@@ -210,7 +210,7 @@ islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + +-: -------manual link------------------------------------------ ++: '-------manual link------------------------------------------' + cat >"$root/link3.suffix" <&2; exit 1; } + "$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' && { echo "Expected failure" >&2; exit 1; } + +-: -------enable on masked alias------------------------------- ++: '-------enable on masked alias-------------------------------' + test -h "$root/etc/systemd/system/masked.service" + ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service" + "$systemctl" --root="$root" enable 'masked-alias.service' && { echo "Expected failure" >&2; exit 1; } + "$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' && { echo "Expected failure" >&2; exit 1; } + +-: -------issue 22000: link in subdirectory-------------------- ++: '-------issue 22000: link in subdirectory--------------------' + mkdir -p "$root/etc/systemd/system/myown.d" + cat >"$root/etc/systemd/system/link5-also.service" <"$root/etc/systemd/system/templ1@.service" <"$root/etc/systemd/system/templ1@.service" <"$root/etc/systemd/system/templ2@.service" <"$root/etc/systemd/system/link4.service" <"$root/etc/systemd/system/link4.service" <"$root/etc/systemd/system/link5.service" <"$root/link5copy.service" <"$root/etc/systemd/system/link5@.path" <"$root/etc/systemd/system/multilink.mount" <"$root/etc/systemd/system/some-some-link6@.socket" <&2; exit 1; } + +-: -------specifiers in WantedBy------------------------------- ++: '-------specifiers in WantedBy-------------------------------' + # We don't need to repeat all the tests. Let's do a basic check that specifier + # expansion is performed. + +@@ -642,7 +642,7 @@ test ! -h "$root/etc/systemd/system/another-target2@.target.requires/some-some-l + + # TODO: repeat the tests above for presets + +-: -------SYSTEMD_OS_RELEASE relative to root------------------ ++: '-------SYSTEMD_OS_RELEASE relative to root-------------------' + # check that os-release overwriting works as expected with root + test -e "$root/etc/os-release" + diff --git a/SOURCES/0200-shared-install-when-creating-symlinks-accept-differe.patch b/SOURCES/0200-shared-install-when-creating-symlinks-accept-differe.patch new file mode 100644 index 0000000..ced8871 --- /dev/null +++ b/SOURCES/0200-shared-install-when-creating-symlinks-accept-differe.patch @@ -0,0 +1,176 @@ +From 56bc8e8eef5fcbfcf72dd1b3caa56b9186e1011d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Fri, 25 Mar 2022 15:43:27 +0100 +Subject: [PATCH] shared/install: when creating symlinks, accept different but + equivalent symlinks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We would only accept "identical" links, but having e.g. a symlink +/usr/lib/systemd/system/foo-alias.service → /usr/lib/systemd/system/foo.service +when we're trying to create /usr/lib/systemd/system/foo-alias.service → +./foo.service is OK. This fixes an issue found in ubuntuautopkg package +installation, where we'd fail when enabling systemd-resolved.service, because +the existing alias was absolute, and (with the recent patches) we were trying +to create a relative one. + +A test is added. +(For .wants/.requires symlinks we were already doing OK. A test is also +added, to verify.) + +(cherry picked from commit 3fc53351dc8f37355f5a4ee8f922d3e13a5182c2) + +Related: #2082131 +--- + src/shared/install.c | 59 ++++++++++++++++++++++++++--------- + test/test-systemctl-enable.sh | 39 +++++++++++++++++++++-- + 2 files changed, 81 insertions(+), 17 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index d6951b805d..22b16ad453 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -423,21 +423,54 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + } + + /** +- * Checks if two paths or symlinks from wd are the same, when root is the root of the filesystem. +- * wc should be the full path in the host file system. ++ * Checks if two symlink targets (starting from src) are equivalent as far as the unit enablement logic is ++ * concerned. If the target is in the unit search path, then anything with the same name is equivalent. ++ * If outside the unit search path, paths must be identical. + */ +-static bool chroot_symlinks_same(const char *root, const char *wd, const char *a, const char *b) { +- assert(path_is_absolute(wd)); ++static int chroot_unit_symlinks_equivalent( ++ const LookupPaths *lp, ++ const char *src, ++ const char *target_a, ++ const char *target_b) { ++ ++ assert(lp); ++ assert(src); ++ assert(target_a); ++ assert(target_b); + + /* This will give incorrect results if the paths are relative and go outside + * of the chroot. False negatives are possible. */ + +- if (!root) +- root = "/"; ++ const char *root = lp->root_dir ?: "/"; ++ _cleanup_free_ char *dirname = NULL; ++ int r; ++ ++ if (!path_is_absolute(target_a) || !path_is_absolute(target_b)) { ++ r = path_extract_directory(src, &dirname); ++ if (r < 0) ++ return r; ++ } + +- a = strjoina(path_is_absolute(a) ? root : wd, "/", a); +- b = strjoina(path_is_absolute(b) ? root : wd, "/", b); +- return path_equal_or_files_same(a, b, 0); ++ _cleanup_free_ char *a = path_join(path_is_absolute(target_a) ? root : dirname, target_a); ++ _cleanup_free_ char *b = path_join(path_is_absolute(target_b) ? root : dirname, target_b); ++ if (!a || !b) ++ return log_oom(); ++ ++ r = path_equal_or_files_same(a, b, 0); ++ if (r != 0) ++ return r; ++ ++ _cleanup_free_ char *a_name = NULL, *b_name = NULL; ++ r = path_extract_filename(a, &a_name); ++ if (r < 0) ++ return r; ++ r = path_extract_filename(b, &b_name); ++ if (r < 0) ++ return r; ++ ++ return streq(a_name, b_name) && ++ path_startswith_strv(a, lp->search_path) && ++ path_startswith_strv(b, lp->search_path); + } + + static int create_symlink( +@@ -448,7 +481,7 @@ static int create_symlink( + UnitFileChange **changes, + size_t *n_changes) { + +- _cleanup_free_ char *dest = NULL, *dirname = NULL; ++ _cleanup_free_ char *dest = NULL; + const char *rp; + int r; + +@@ -489,11 +522,7 @@ static int create_symlink( + return r; + } + +- dirname = dirname_malloc(new_path); +- if (!dirname) +- return -ENOMEM; +- +- if (chroot_symlinks_same(lp->root_dir, dirname, dest, old_path)) { ++ if (chroot_unit_symlinks_equivalent(lp, new_path, dest, old_path)) { + log_debug("Symlink %s → %s already exists", new_path, dest); + return 1; + } +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 3b30f090a5..0f66af309a 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -39,8 +39,29 @@ test -h "$root/etc/systemd/system/default.target.wants/test1.service" + test -h "$root/etc/systemd/system/special.target.requires/test1.service" + + "$systemctl" --root="$root" disable test1.service +-test ! -e "$root/etc/systemd/system/default.target.wants/test1.service" +-test ! -e "$root/etc/systemd/system/special.target.requires/test1.service" ++test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" ++ ++: '------enable when link already exists-----------------------' ++# We don't read the symlink target, so it's OK for the symlink to point ++# to something else. We should just silently accept this. ++ ++mkdir -p "$root/etc/systemd/system/default.target.wants" ++mkdir -p "$root/etc/systemd/system/special.target.requires" ++ln -s /usr/lib/systemd/system/test1.service "$root/etc/systemd/system/default.target.wants/test1.service" ++ln -s /usr/lib/systemd/system/test1.service "$root/etc/systemd/system/special.target.requires/test1.service" ++ ++"$systemctl" --root="$root" enable test1.service ++test -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test -h "$root/etc/systemd/system/special.target.requires/test1.service" ++ ++"$systemctl" --root="$root" reenable test1.service ++test -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test -h "$root/etc/systemd/system/special.target.requires/test1.service" ++ ++"$systemctl" --root="$root" disable test1.service ++test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" + + : '------suffix guessing---------------------------------------' + "$systemctl" --root="$root" enable test1 +@@ -90,6 +111,20 @@ test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" + test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" + test ! -h "$root/etc/systemd/system/test1-goodalias.service" + ++: '-------aliases when link already exists---------------------' ++cat >"$root/etc/systemd/system/test1a.service" <"$root/etc/systemd/system/test2.socket" < +Date: Fri, 25 Mar 2022 15:56:16 +0100 +Subject: [PATCH] test-systemctl-enable: use magic syntax to allow inverted + tests +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Inspired by 7910ec3bcde2ee0086b3e49f8aaa2a9f13f58d97. +'! true' passes, because it's a conditional expression. +But '( ! true )' fails, because '( … )' creates a subshell, i.e. a separate +program, and '! true' becomes the return value of that program, and the whole +thing apparently is not a conditional expression for the outer shell. + +This is shorter, so let's just do this. + +(cherry picked from commit d6c51c485abe0026a5da654fca5d6c1457c4587d) + +Related: #2082131 +--- + test/test-systemctl-enable.sh | 76 ++++++++++++++++++----------------- + 1 file changed, 39 insertions(+), 37 deletions(-) + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 0f66af309a..ecb433380e 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -20,7 +20,7 @@ islink() { + } + + : '------enable nonexistent------------------------------------' +-"$systemctl" --root="$root" enable test1.service && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable test1.service ) + + : '------basic enablement--------------------------------------' + mkdir -p "$root/etc/systemd/system" +@@ -86,7 +86,7 @@ Alias=test1-badalias.socket + Alias=test1-goodalias2.service + EOF + +-"$systemctl" --root="$root" enable test1 && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable test1 ) + test -h "$root/etc/systemd/system/default.target.wants/test1.service" + test -h "$root/etc/systemd/system/special.target.requires/test1.service" + test -e "$root/etc/systemd/system/test1-goodalias.service" +@@ -98,7 +98,7 @@ test -e "$root/etc/systemd/system/test1-goodalias2.service" + test -h "$root/etc/systemd/system/test1-goodalias2.service" + + : '-------aliases in reeanble----------------------------------' +-"$systemctl" --root="$root" reenable test1 && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" reenable test1 ) + islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service" + islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service" + +@@ -154,7 +154,7 @@ test ! -e "$root/etc/systemd/system/sockets.target.wants/test2.socket" + : '-------link-------------------------------------------------' + # File doesn't exist yet + test ! -e "$root/link1.path" +-"$systemctl" --root="$root" link '/link1.path' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" link '/link1.path' ) + test ! -e "$root/etc/systemd/system/link1.path" + + cat >"$root/link1.path" <&2; exit 1; } ++( ! "$systemctl" --root="$root" link '/subdir/link1.path' ) + islink "$root/etc/systemd/system/link1.path" "/link1.path" + + : '-------link bad suffix--------------------------------------' + cp "$root/link1.path" "$root/subdir/link1.suffix" +-"$systemctl" --root="$root" link '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" link '/subdir/link1.suffix' ) + test ! -e "$root/etc/systemd/system/link1.suffix" + + : '-------unlink by unit name----------------------------------' +@@ -208,13 +208,13 @@ islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + + : '-------enable already linked different path-----------------' +-"$systemctl" --root="$root" enable '/subdir/link1.path' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable '/subdir/link1.path' ) + islink "$root/etc/systemd/system/link1.path" "/link1.path" + islink "$root/etc/systemd/system/paths.target.wants/link1.path" "../link1.path" + + : '-------enable bad suffix------------------------------------' + cp "$root/link1.path" "$root/subdir/link1.suffix" +-"$systemctl" --root="$root" enable '/subdir/link1.suffix' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable '/subdir/link1.suffix' ) + test ! -e "$root/etc/systemd/system/link1.suffix" + test ! -e "$root/etc/systemd/system/paths.target.wants/link1.suffix" + +@@ -264,14 +264,14 @@ test ! -h "$root/etc/systemd/system/services.target.wants/link3.service" + + : '-------enable on masked-------------------------------------' + ln -s "/dev/null" "$root/etc/systemd/system/masked.service" +-"$systemctl" --root="$root" enable 'masked.service' && { echo "Expected failure" >&2; exit 1; } +-"$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable 'masked.service' ) ++( ! "$systemctl" --root="$root" enable '/etc/systemd/system/masked.service' ) + + : '-------enable on masked alias-------------------------------' + test -h "$root/etc/systemd/system/masked.service" + ln -s "masked.service" "$root/etc/systemd/system/masked-alias.service" +-"$systemctl" --root="$root" enable 'masked-alias.service' && { echo "Expected failure" >&2; exit 1; } +-"$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable 'masked-alias.service' ) ++( ! "$systemctl" --root="$root" enable '/etc/systemd/system/masked-alias.service' ) + + : '-------issue 22000: link in subdirectory--------------------' + mkdir -p "$root/etc/systemd/system/myown.d" +@@ -286,7 +286,7 @@ WantedBy=services.target + Also=link5-also.service + EOF + +-"$systemctl" --root="$root" enable 'link5.service' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable 'link5.service' ) + test ! -h "$root/etc/systemd/system/services.target.wants/link5.service" + test ! -h "$root/etc/systemd/system/services.target.wants/link5-also.service" + +@@ -301,7 +301,7 @@ WantedBy=services.target + EOF + + # No instance here — this can't succeed. +-"$systemctl" --root="$root" enable 'templ1@.service' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable 'templ1@.service' ) + test ! -h "$root/etc/systemd/system/services.target.wants/templ1@.service" + + "$systemctl" --root="$root" enable 'templ1@one.service' +@@ -428,7 +428,7 @@ Alias=link4alias.service + Alias=link4alias2.service + EOF + +-"$systemctl" --root="$root" enable 'link4.service' && { echo "Expected failure" >&2; exit 1; } ++( ! "$systemctl" --root="$root" enable 'link4.service' ) + test ! -h "$root/etc/systemd/system/link4.service" # this is our file + test ! -h "$root/etc/systemd/system/link4@.service" + test ! -h "$root/etc/systemd/system/link4@inst.service" +@@ -571,12 +571,12 @@ check_alias a "$(uname -m | tr '_' '-')" + test ! -e "$root/etc/os-release" + test ! -e "$root/usr/lib/os-release" + +-check_alias A '' && { echo "Expected failure" >&2; exit 1; } +-check_alias B '' && { echo "Expected failure" >&2; exit 1; } +-check_alias M '' && { echo "Expected failure" >&2; exit 1; } +-check_alias o '' && { echo "Expected failure" >&2; exit 1; } +-check_alias w '' && { echo "Expected failure" >&2; exit 1; } +-check_alias W '' && { echo "Expected failure" >&2; exit 1; } ++( ! check_alias A '' ) ++( ! check_alias B '' ) ++( ! check_alias M '' ) ++( ! check_alias o '' ) ++( ! check_alias w '' ) ++( ! check_alias W '' ) + + cat >"$root/etc/os-release" <&2; exit 1; } +-check_alias E '' && { echo "Expected failure" >&2; exit 1; } +-check_alias f '' && { echo "Expected failure" >&2; exit 1; } +-check_alias h '' && { echo "Expected failure" >&2; exit 1; } +-check_alias I '' && { echo "Expected failure" >&2; exit 1; } +-check_alias J '' && { echo "Expected failure" >&2; exit 1; } +-check_alias L '' && { echo "Expected failure" >&2; exit 1; } +-check_alias P '' && { echo "Expected failure" >&2; exit 1; } +-check_alias s '' && { echo "Expected failure" >&2; exit 1; } +-check_alias S '' && { echo "Expected failure" >&2; exit 1; } +-check_alias t '' && { echo "Expected failure" >&2; exit 1; } +-check_alias T '' && { echo "Expected failure" >&2; exit 1; } +-check_alias V '' && { echo "Expected failure" >&2; exit 1; } ++( ! check_alias C '' ) ++( ! check_alias E '' ) ++( ! check_alias f '' ) ++( ! check_alias h '' ) ++( ! check_alias I '' ) ++( ! check_alias J '' ) ++( ! check_alias L '' ) ++( ! check_alias P '' ) ++( ! check_alias s '' ) ++( ! check_alias S '' ) ++( ! check_alias t '' ) ++( ! check_alias T '' ) ++( ! check_alias V '' ) + + check_alias g root + check_alias G 0 +@@ -635,7 +635,7 @@ check_alias j 'link6' + check_alias l "$(uname -n | sed 's/\..*//')" + + test ! -e "$root/etc/machine-id" +-check_alias m '' && { echo "Expected failure" >&2; exit 1; } ++( ! check_alias m '' ) + + systemd-id128 new >"$root/etc/machine-id" + check_alias m "$(cat "$root/etc/machine-id")" +@@ -647,9 +647,11 @@ check_alias p 'some-some-link6' + + check_alias v "$(uname -r)" + +-check_alias % '%' && { echo "Expected failure because % is not legal in unit name" >&2; exit 1; } ++# % is not legal in unit name ++( ! check_alias % '%' ) + +-check_alias z 'z' && { echo "Expected failure because %z is not known" >&2; exit 1; } ++# %z is not defined ++( ! check_alias z 'z' ) + + : '-------specifiers in WantedBy-------------------------------' + # We don't need to repeat all the tests. Let's do a basic check that specifier diff --git a/SOURCES/0202-test-systemctl-enable-also-use-freshly-built-systemd.patch b/SOURCES/0202-test-systemctl-enable-also-use-freshly-built-systemd.patch new file mode 100644 index 0000000..369d9d3 --- /dev/null +++ b/SOURCES/0202-test-systemctl-enable-also-use-freshly-built-systemd.patch @@ -0,0 +1,97 @@ +From 90fb011c43410958e5bda6f470137522f536adb4 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 28 Mar 2022 20:03:37 +0200 +Subject: [PATCH] test-systemctl-enable: also use freshly-built systemd-id128 + +Tests were failing on centos7 because systemd-id128 is not in path. + +(cherry picked from commit 2a2d002fb0913fe931b4ac903ca425a725aa79c0) + +Related: #2082131 +--- + meson.build | 21 ++++++++++++--------- + test/test-systemctl-enable.sh | 5 +++-- + 2 files changed, 15 insertions(+), 11 deletions(-) + +diff --git a/meson.build b/meson.build +index 005af872cf..4fc3e64e54 100644 +--- a/meson.build ++++ b/meson.build +@@ -2371,7 +2371,7 @@ public_programs += executable( + install_rpath : rootlibexecdir, + install : true) + +-exe = executable( ++systemctl = executable( + 'systemctl', + systemctl_sources, + include_directories : includes, +@@ -2385,13 +2385,7 @@ exe = executable( + install_rpath : rootlibexecdir, + install : true, + install_dir : rootbindir) +-public_programs += exe +-if want_tests != 'false' +- test('test-systemctl-enable', +- test_systemctl_enable_sh, +- # https://github.com/mesonbuild/meson/issues/2681 +- args : exe.full_path()) +-endif ++public_programs += systemctl + + if conf.get('ENABLE_PORTABLED') == 1 + dbus_programs += executable( +@@ -3188,13 +3182,22 @@ executable( + install : true, + install_dir : rootlibexecdir) + +-public_programs += executable( ++systemd_id128 = executable( + 'systemd-id128', + 'src/id128/id128.c', + include_directories : includes, + link_with : [libshared], + install_rpath : rootlibexecdir, + install : true) ++public_programs += systemd_id128 ++ ++if want_tests != 'false' ++ test('test-systemctl-enable', ++ test_systemctl_enable_sh, ++ # https://github.com/mesonbuild/meson/issues/2681 ++ args : [systemctl.full_path(), ++ systemd_id128.full_path()]) ++endif + + public_programs += executable( + 'systemd-path', +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index ecb433380e..8eb2828e35 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -6,6 +6,7 @@ set -ex + export SYSTEMD_IGNORE_CHROOT=1 + + systemctl=${1:-systemctl} ++systemd_id128=${2:-systemd-id128} + + unset root + cleanup() { +@@ -606,7 +607,7 @@ check_alias o 'the-id' + check_alias w '39a' + check_alias W 'right' + +-check_alias b "$(systemd-id128 boot-id)" ++check_alias b "$("$systemd_id128" boot-id)" + + # Specifiers not available for [Install] + ( ! check_alias C '' ) +@@ -637,7 +638,7 @@ check_alias l "$(uname -n | sed 's/\..*//')" + test ! -e "$root/etc/machine-id" + ( ! check_alias m '' ) + +-systemd-id128 new >"$root/etc/machine-id" ++"$systemd_id128" new >"$root/etc/machine-id" + check_alias m "$(cat "$root/etc/machine-id")" + + check_alias n 'some-some-link6@.socket' diff --git a/SOURCES/0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch b/SOURCES/0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch new file mode 100644 index 0000000..8c95ce6 --- /dev/null +++ b/SOURCES/0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch @@ -0,0 +1,27 @@ +From 9b0a2632fd060e0c7b13eabb5ad87f623237eef9 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Mon, 28 Mar 2022 20:20:09 +0200 +Subject: [PATCH] test-systemctl-enable: disable the test for %a for now + +(cherry picked from commit 5c29de29b43829ba09967b05ae2f136356c8c0d2) + +Related: #2082131 +--- + test/test-systemctl-enable.sh | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index 8eb2828e35..ac1bcc1cc7 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -567,7 +567,9 @@ EOF + islink "$root/etc/systemd/system/target@$1:$2.socket" "some-some-link6@.socket" || return 2 + } + +-check_alias a "$(uname -m | tr '_' '-')" ++# TODO: our architecture names are different than what uname -m returns. ++# Add something like 'systemd-detect-virt --print-architecture' and use it here. ++check_alias a "$(uname -m | tr '_' '-')" || : + + test ! -e "$root/etc/os-release" + test ! -e "$root/usr/lib/os-release" diff --git a/SOURCES/0204-Rename-UnitFileScope-to-LookupScope.patch b/SOURCES/0204-Rename-UnitFileScope-to-LookupScope.patch new file mode 100644 index 0000000..5088923 --- /dev/null +++ b/SOURCES/0204-Rename-UnitFileScope-to-LookupScope.patch @@ -0,0 +1,3454 @@ +From c499122cb7ba5fe2f76760844cbc2e34cc3a5626 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 29 Mar 2022 15:55:59 +0200 +Subject: [PATCH] Rename UnitFileScope to LookupScope + +As suggested in +https://github.com/systemd/systemd/pull/22649/commits/8b3ad3983f5440eef812b34e5ed862ca59fdf7f7#r837345892 + +The define is generalized and moved to path-lookup.h, where it seems to fit +better. This allows a recursive include to be removed and in general makes +things simpler. + +(cherry picked from commit b380b6438361e39ad5076bfa58d2021621a957af) + +Related: #2082131 +--- + src/analyze/analyze-condition.c | 2 +- + src/analyze/analyze-condition.h | 2 +- + src/analyze/analyze-security.c | 4 +- + src/analyze/analyze-security.h | 2 +- + src/analyze/analyze-verify.c | 2 +- + src/analyze/analyze-verify.h | 2 +- + src/analyze/analyze.c | 24 +- + src/basic/path-lookup.c | 64 ++-- + src/basic/path-lookup.h | 21 +- + src/basic/unit-file.h | 11 +- + src/core/dbus-manager.c | 8 +- + src/core/fuzz-unit-file.c | 2 +- + src/core/main.c | 2 +- + src/core/manager.c | 6 +- + src/core/manager.h | 8 +- + src/libsystemd/sd-path/sd-path.c | 8 +- + src/portable/portable.c | 14 +- + src/shared/install-printf.c | 2 +- + src/shared/install-printf.h | 2 +- + src/shared/install.c | 92 ++--- + src/shared/install.h | 35 +- + src/shared/specifier.c | 26 +- + src/systemctl/systemctl-edit.c | 6 +- + src/systemctl/systemctl-is-enabled.c | 2 +- + src/systemctl/systemctl-show.c | 2 +- + src/systemctl/systemctl-start-special.c | 4 +- + src/systemctl/systemctl-start-unit.c | 6 +- + src/systemctl/systemctl-sysv-compat.c | 2 +- + src/systemctl/systemctl-util.c | 10 +- + src/systemctl/systemctl.c | 12 +- + src/systemctl/systemctl.h | 2 +- + src/sysv-generator/sysv-generator.c | 4 +- + src/test/test-bpf-firewall.c | 2 +- + src/test/test-bpf-foreign-programs.c | 2 +- + src/test/test-bpf-lsm.c | 2 +- + src/test/test-cgroup-mask.c | 2 +- + src/test/test-cgroup-unit-default.c | 2 +- + src/test/test-engine.c | 2 +- + src/test/test-execute.c | 10 +- + src/test/test-install-root.c | 448 ++++++++++++------------ + src/test/test-install.c | 72 ++-- + src/test/test-load-fragment.c | 96 ++--- + src/test/test-path-lookup.c | 30 +- + src/test/test-path.c | 2 +- + src/test/test-sched-prio.c | 2 +- + src/test/test-socket-bind.c | 2 +- + src/test/test-specifier.c | 2 +- + src/test/test-unit-file.c | 2 +- + src/test/test-unit-name.c | 2 +- + src/test/test-unit-serialize.c | 2 +- + src/test/test-watch-pid.c | 2 +- + src/tmpfiles/tmpfiles.c | 2 +- + 52 files changed, 536 insertions(+), 539 deletions(-) + +diff --git a/src/analyze/analyze-condition.c b/src/analyze/analyze-condition.c +index a7ad085f46..248fe01448 100644 +--- a/src/analyze/analyze-condition.c ++++ b/src/analyze/analyze-condition.c +@@ -73,7 +73,7 @@ static int log_helper(void *userdata, int level, int error, const char *file, in + return r; + } + +-int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const char *root) { ++int verify_conditions(char **lines, LookupScope scope, const char *unit, const char *root) { + _cleanup_(manager_freep) Manager *m = NULL; + Unit *u; + int r, q = 1; +diff --git a/src/analyze/analyze-condition.h b/src/analyze/analyze-condition.h +index 9ebd205b6d..04bd853c4f 100644 +--- a/src/analyze/analyze-condition.h ++++ b/src/analyze/analyze-condition.h +@@ -3,4 +3,4 @@ + + #include "install.h" + +-int verify_conditions(char **lines, UnitFileScope scope, const char *unit, const char *root); ++int verify_conditions(char **lines, LookupScope scope, const char *unit, const char *root); +diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c +index d8ccbf8c54..e112922cbf 100644 +--- a/src/analyze/analyze-security.c ++++ b/src/analyze/analyze-security.c +@@ -2643,7 +2643,7 @@ static int offline_security_check(Unit *u, + + static int offline_security_checks(char **filenames, + JsonVariant *policy, +- UnitFileScope scope, ++ LookupScope scope, + bool check_man, + bool run_generators, + unsigned threshold, +@@ -2755,7 +2755,7 @@ static int offline_security_checks(char **filenames, + int analyze_security(sd_bus *bus, + char **units, + JsonVariant *policy, +- UnitFileScope scope, ++ LookupScope scope, + bool check_man, + bool run_generators, + bool offline, +diff --git a/src/analyze/analyze-security.h b/src/analyze/analyze-security.h +index 07483248ee..99bc1fabe4 100644 +--- a/src/analyze/analyze-security.h ++++ b/src/analyze/analyze-security.h +@@ -18,7 +18,7 @@ typedef enum AnalyzeSecurityFlags { + int analyze_security(sd_bus *bus, + char **units, + JsonVariant *policy, +- UnitFileScope scope, ++ LookupScope scope, + bool check_man, + bool run_generators, + bool offline, +diff --git a/src/analyze/analyze-verify.c b/src/analyze/analyze-verify.c +index 39eb5cf93b..6680b9768d 100644 +--- a/src/analyze/analyze-verify.c ++++ b/src/analyze/analyze-verify.c +@@ -243,7 +243,7 @@ static void set_destroy_ignore_pointer_max(Set** s) { + set_free_free(*s); + } + +-int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root) { ++int verify_units(char **filenames, LookupScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root) { + const ManagerTestRunFlags flags = + MANAGER_TEST_RUN_MINIMAL | + MANAGER_TEST_RUN_ENV_GENERATORS | +diff --git a/src/analyze/analyze-verify.h b/src/analyze/analyze-verify.h +index 47b78a8158..385d635e33 100644 +--- a/src/analyze/analyze-verify.h ++++ b/src/analyze/analyze-verify.h +@@ -17,7 +17,7 @@ typedef enum RecursiveErrors { + int verify_generate_path(char **var, char **filenames); + int verify_prepare_filename(const char *filename, char **ret); + int verify_executable(Unit *u, const ExecCommand *exec, const char *root); +-int verify_units(char **filenames, UnitFileScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root); ++int verify_units(char **filenames, LookupScope scope, bool check_man, bool run_generators, RecursiveErrors recursive_errors, const char *root); + + const char* recursive_errors_to_string(RecursiveErrors i) _const_; + RecursiveErrors recursive_errors_from_string(const char *s) _pure_; +diff --git a/src/analyze/analyze.c b/src/analyze/analyze.c +index 846acf31d3..7520134880 100644 +--- a/src/analyze/analyze.c ++++ b/src/analyze/analyze.c +@@ -92,7 +92,7 @@ static usec_t arg_fuzz = 0; + static PagerFlags arg_pager_flags = 0; + static BusTransport arg_transport = BUS_TRANSPORT_LOCAL; + static const char *arg_host = NULL; +-static UnitFileScope arg_scope = UNIT_FILE_SYSTEM; ++static LookupScope arg_scope = LOOKUP_SCOPE_SYSTEM; + static RecursiveErrors arg_recursive_errors = RECURSIVE_ERRORS_YES; + static bool arg_man = true; + static bool arg_generators = false; +@@ -171,7 +171,7 @@ typedef struct HostInfo { + } HostInfo; + + static int acquire_bus(sd_bus **bus, bool *use_full_bus) { +- bool user = arg_scope != UNIT_FILE_SYSTEM; ++ bool user = arg_scope != LOOKUP_SCOPE_SYSTEM; + int r; + + if (use_full_bus && *use_full_bus) { +@@ -349,9 +349,9 @@ static int acquire_boot_times(sd_bus *bus, BootTimes **bt) { + "Please try again later.\n" + "Hint: Use 'systemctl%s list-jobs' to see active jobs", + times.finish_time, +- arg_scope == UNIT_FILE_SYSTEM ? "" : " --user"); ++ arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user"); + +- if (arg_scope == UNIT_FILE_SYSTEM && times.security_start_time > 0) { ++ if (arg_scope == LOOKUP_SCOPE_SYSTEM && times.security_start_time > 0) { + /* security_start_time is set when systemd is not running under container environment. */ + if (times.initrd_time > 0) + times.kernel_done_time = times.initrd_time; +@@ -506,7 +506,7 @@ static int acquire_host_info(sd_bus *bus, HostInfo **hi) { + if (!host) + return log_oom(); + +- if (arg_scope != UNIT_FILE_SYSTEM) { ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) { + r = bus_connect_transport(arg_transport, arg_host, false, &system_bus); + if (r < 0) { + log_debug_errno(r, "Failed to connect to system bus, ignoring: %m"); +@@ -684,7 +684,7 @@ static int analyze_plot(int argc, char *argv[], void *userdata) { + _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL; + _cleanup_(unit_times_free_arrayp) UnitTimes *times = NULL; + _cleanup_free_ char *pretty_times = NULL; +- bool use_full_bus = arg_scope == UNIT_FILE_SYSTEM; ++ bool use_full_bus = arg_scope == LOOKUP_SCOPE_SYSTEM; + BootTimes *boot; + UnitTimes *u; + int n, m = 1, y = 0, r; +@@ -702,7 +702,7 @@ static int analyze_plot(int argc, char *argv[], void *userdata) { + if (n < 0) + return n; + +- if (use_full_bus || arg_scope != UNIT_FILE_SYSTEM) { ++ if (use_full_bus || arg_scope != LOOKUP_SCOPE_SYSTEM) { + n = acquire_host_info(bus, &host); + if (n < 0) + return n; +@@ -2607,15 +2607,15 @@ static int parse_argv(int argc, char *argv[]) { + break; + + case ARG_SYSTEM: +- arg_scope = UNIT_FILE_SYSTEM; ++ arg_scope = LOOKUP_SCOPE_SYSTEM; + break; + + case ARG_USER: +- arg_scope = UNIT_FILE_USER; ++ arg_scope = LOOKUP_SCOPE_USER; + break; + + case ARG_GLOBAL: +- arg_scope = UNIT_FILE_GLOBAL; ++ arg_scope = LOOKUP_SCOPE_GLOBAL; + break; + + case ARG_ORDER: +@@ -2756,12 +2756,12 @@ static int parse_argv(int argc, char *argv[]) { + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Option --threshold= is only supported for security right now."); + +- if (arg_scope == UNIT_FILE_GLOBAL && ++ if (arg_scope == LOOKUP_SCOPE_GLOBAL && + !STR_IN_SET(argv[optind] ?: "time", "dot", "unit-paths", "verify")) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Option --global only makes sense with verbs dot, unit-paths, verify."); + +- if (streq_ptr(argv[optind], "cat-config") && arg_scope == UNIT_FILE_USER) ++ if (streq_ptr(argv[optind], "cat-config") && arg_scope == LOOKUP_SCOPE_USER) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Option --user is not supported for cat-config right now."); + +diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c +index b699756658..1f4331a8bf 100644 +--- a/src/basic/path-lookup.c ++++ b/src/basic/path-lookup.c +@@ -232,7 +232,7 @@ bool path_is_user_config_dir(const char *path) { + } + + static int acquire_generator_dirs( +- UnitFileScope scope, ++ LookupScope scope, + const char *tempdir, + char **generator, + char **generator_early, +@@ -244,17 +244,17 @@ static int acquire_generator_dirs( + assert(generator); + assert(generator_early); + assert(generator_late); +- assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER, UNIT_FILE_GLOBAL)); ++ assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER, LOOKUP_SCOPE_GLOBAL)); + +- if (scope == UNIT_FILE_GLOBAL) ++ if (scope == LOOKUP_SCOPE_GLOBAL) + return -EOPNOTSUPP; + + if (tempdir) + prefix = tempdir; +- else if (scope == UNIT_FILE_SYSTEM) ++ else if (scope == LOOKUP_SCOPE_SYSTEM) + prefix = "/run/systemd"; + else { +- /* UNIT_FILE_USER */ ++ /* LOOKUP_SCOPE_USER */ + const char *e; + + e = getenv("XDG_RUNTIME_DIR"); +@@ -288,21 +288,21 @@ static int acquire_generator_dirs( + } + + static int acquire_transient_dir( +- UnitFileScope scope, ++ LookupScope scope, + const char *tempdir, + char **ret) { + + char *transient; + + assert(ret); +- assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER, UNIT_FILE_GLOBAL)); ++ assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER, LOOKUP_SCOPE_GLOBAL)); + +- if (scope == UNIT_FILE_GLOBAL) ++ if (scope == LOOKUP_SCOPE_GLOBAL) + return -EOPNOTSUPP; + + if (tempdir) + transient = path_join(tempdir, "transient"); +- else if (scope == UNIT_FILE_SYSTEM) ++ else if (scope == LOOKUP_SCOPE_SYSTEM) + transient = strdup("/run/systemd/transient"); + else + return xdg_user_runtime_dir(ret, "/systemd/transient"); +@@ -313,7 +313,7 @@ static int acquire_transient_dir( + return 0; + } + +-static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **runtime) { ++static int acquire_config_dirs(LookupScope scope, char **persistent, char **runtime) { + _cleanup_free_ char *a = NULL, *b = NULL; + int r; + +@@ -322,17 +322,17 @@ static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **ru + + switch (scope) { + +- case UNIT_FILE_SYSTEM: ++ case LOOKUP_SCOPE_SYSTEM: + a = strdup(SYSTEM_CONFIG_UNIT_DIR); + b = strdup("/run/systemd/system"); + break; + +- case UNIT_FILE_GLOBAL: ++ case LOOKUP_SCOPE_GLOBAL: + a = strdup(USER_CONFIG_UNIT_DIR); + b = strdup("/run/systemd/user"); + break; + +- case UNIT_FILE_USER: ++ case LOOKUP_SCOPE_USER: + r = xdg_user_config_dir(&a, "/systemd/user"); + if (r < 0 && r != -ENXIO) + return r; +@@ -364,7 +364,7 @@ static int acquire_config_dirs(UnitFileScope scope, char **persistent, char **ru + return 0; + } + +-static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **runtime) { ++static int acquire_control_dirs(LookupScope scope, char **persistent, char **runtime) { + _cleanup_free_ char *a = NULL; + int r; + +@@ -373,7 +373,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r + + switch (scope) { + +- case UNIT_FILE_SYSTEM: { ++ case LOOKUP_SCOPE_SYSTEM: { + _cleanup_free_ char *b = NULL; + + a = strdup("/etc/systemd/system.control"); +@@ -389,7 +389,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r + break; + } + +- case UNIT_FILE_USER: ++ case LOOKUP_SCOPE_USER: + r = xdg_user_config_dir(&a, "/systemd/user.control"); + if (r < 0 && r != -ENXIO) + return r; +@@ -406,7 +406,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r + + break; + +- case UNIT_FILE_GLOBAL: ++ case LOOKUP_SCOPE_GLOBAL: + return -EOPNOTSUPP; + + default: +@@ -419,7 +419,7 @@ static int acquire_control_dirs(UnitFileScope scope, char **persistent, char **r + } + + static int acquire_attached_dirs( +- UnitFileScope scope, ++ LookupScope scope, + char **ret_persistent, + char **ret_runtime) { + +@@ -429,7 +429,7 @@ static int acquire_attached_dirs( + assert(ret_runtime); + + /* Portable services are not available to regular users for now. */ +- if (scope != UNIT_FILE_SYSTEM) ++ if (scope != LOOKUP_SCOPE_SYSTEM) + return -EOPNOTSUPP; + + a = strdup("/etc/systemd/system.attached"); +@@ -509,7 +509,7 @@ static int get_paths_from_environ(const char *var, char ***paths, bool *append) + + int lookup_paths_init( + LookupPaths *lp, +- UnitFileScope scope, ++ LookupScope scope, + LookupPathsFlags flags, + const char *root_dir) { + +@@ -528,14 +528,14 @@ int lookup_paths_init( + + assert(lp); + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + #if HAVE_SPLIT_USR + flags |= LOOKUP_PATHS_SPLIT_USR; + #endif + + if (!empty_or_root(root_dir)) { +- if (scope == UNIT_FILE_USER) ++ if (scope == LOOKUP_SCOPE_USER) + return -EINVAL; + + r = is_dir(root_dir, true); +@@ -560,8 +560,8 @@ int lookup_paths_init( + if (r < 0) + return r; + +- if (scope == UNIT_FILE_USER) { +- r = acquire_config_dirs(UNIT_FILE_GLOBAL, &global_persistent_config, &global_runtime_config); ++ if (scope == LOOKUP_SCOPE_USER) { ++ r = acquire_config_dirs(LOOKUP_SCOPE_GLOBAL, &global_persistent_config, &global_runtime_config); + if (r < 0) + return r; + } +@@ -606,7 +606,7 @@ int lookup_paths_init( + + switch (scope) { + +- case UNIT_FILE_SYSTEM: ++ case LOOKUP_SCOPE_SYSTEM: + add = strv_new( + /* If you modify this you also want to modify + * systemdsystemunitpath= in systemd.pc.in! */ +@@ -629,7 +629,7 @@ int lookup_paths_init( + STRV_IFNOTNULL(generator_late)); + break; + +- case UNIT_FILE_GLOBAL: ++ case LOOKUP_SCOPE_GLOBAL: + add = strv_new( + /* If you modify this you also want to modify + * systemduserunitpath= in systemd.pc.in, and +@@ -652,7 +652,7 @@ int lookup_paths_init( + STRV_IFNOTNULL(generator_late)); + break; + +- case UNIT_FILE_USER: ++ case LOOKUP_SCOPE_USER: + add = user_dirs(persistent_config, runtime_config, + global_persistent_config, global_runtime_config, + generator, generator_early, generator_late, +@@ -741,7 +741,7 @@ int lookup_paths_init( + return 0; + } + +-int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir) { ++int lookup_paths_init_or_warn(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir) { + int r; + + r = lookup_paths_init(lp, scope, flags, root_dir); +@@ -790,7 +790,7 @@ void lookup_paths_log(LookupPaths *lp) { + } + } + +-char **generator_binary_paths(UnitFileScope scope) { ++char **generator_binary_paths(LookupScope scope) { + bool append = false; /* Add items from SYSTEMD_GENERATOR_PATH before normal directories */ + _cleanup_strv_free_ char **paths = NULL; + int r; +@@ -805,15 +805,15 @@ char **generator_binary_paths(UnitFileScope scope) { + + switch (scope) { + +- case UNIT_FILE_SYSTEM: ++ case LOOKUP_SCOPE_SYSTEM: + add = strv_new("/run/systemd/system-generators", + "/etc/systemd/system-generators", + "/usr/local/lib/systemd/system-generators", + SYSTEM_GENERATOR_DIR); + break; + +- case UNIT_FILE_GLOBAL: +- case UNIT_FILE_USER: ++ case LOOKUP_SCOPE_GLOBAL: ++ case LOOKUP_SCOPE_USER: + add = strv_new("/run/systemd/user-generators", + "/etc/systemd/user-generators", + "/usr/local/lib/systemd/user-generators", +diff --git a/src/basic/path-lookup.h b/src/basic/path-lookup.h +index 1f0e5ea271..aed72defe7 100644 +--- a/src/basic/path-lookup.h ++++ b/src/basic/path-lookup.h +@@ -3,10 +3,7 @@ + + #include + +-typedef struct LookupPaths LookupPaths; +- + #include "def.h" +-#include "unit-file.h" + #include "macro.h" + + typedef enum LookupPathsFlags { +@@ -15,7 +12,15 @@ typedef enum LookupPathsFlags { + LOOKUP_PATHS_SPLIT_USR = 1 << 2, + } LookupPathsFlags; + +-struct LookupPaths { ++typedef enum LookupScope { ++ LOOKUP_SCOPE_SYSTEM, ++ LOOKUP_SCOPE_GLOBAL, ++ LOOKUP_SCOPE_USER, ++ _LOOKUP_SCOPE_MAX, ++ _LOOKUP_SCOPE_INVALID = -EINVAL, ++} LookupScope; ++ ++typedef struct LookupPaths { + /* Where we look for unit files. This includes the individual special paths below, but also any vendor + * supplied, static unit file paths. */ + char **search_path; +@@ -52,10 +57,10 @@ struct LookupPaths { + + /* A temporary directory when running in test mode, to be nuked */ + char *temporary_dir; +-}; ++} LookupPaths; + +-int lookup_paths_init(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); +-int lookup_paths_init_or_warn(LookupPaths *lp, UnitFileScope scope, LookupPathsFlags flags, const char *root_dir); ++int lookup_paths_init(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir); ++int lookup_paths_init_or_warn(LookupPaths *lp, LookupScope scope, LookupPathsFlags flags, const char *root_dir); + + int xdg_user_dirs(char ***ret_config_dirs, char ***ret_data_dirs); + int xdg_user_runtime_dir(char **ret, const char *suffix); +@@ -68,7 +73,7 @@ bool path_is_user_config_dir(const char *path); + void lookup_paths_log(LookupPaths *p); + void lookup_paths_free(LookupPaths *p); + +-char **generator_binary_paths(UnitFileScope scope); ++char **generator_binary_paths(LookupScope scope); + char **env_generator_binary_paths(bool is_system); + + #define NETWORK_DIRS ((const char* const*) CONF_PATHS_STRV("systemd/network")) +diff --git a/src/basic/unit-file.h b/src/basic/unit-file.h +index b7c03e9c2c..1c43861f00 100644 +--- a/src/basic/unit-file.h ++++ b/src/basic/unit-file.h +@@ -4,12 +4,11 @@ + #include + + #include "hashmap.h" ++#include "path-lookup.h" + #include "time-util.h" + #include "unit-name.h" + + typedef enum UnitFileState UnitFileState; +-typedef enum UnitFileScope UnitFileScope; +-typedef struct LookupPaths LookupPaths; + + enum UnitFileState { + UNIT_FILE_ENABLED, +@@ -29,14 +28,6 @@ enum UnitFileState { + _UNIT_FILE_STATE_INVALID = -EINVAL, + }; + +-enum UnitFileScope { +- UNIT_FILE_SYSTEM, +- UNIT_FILE_GLOBAL, +- UNIT_FILE_USER, +- _UNIT_FILE_SCOPE_MAX, +- _UNIT_FILE_SCOPE_INVALID = -EINVAL, +-}; +- + bool unit_type_may_alias(UnitType type) _const_; + bool unit_type_may_template(UnitType type) _const_; + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 0e3590d1c9..efba6331b9 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -2215,7 +2215,7 @@ fail: + static int method_enable_unit_files_generic( + sd_bus_message *message, + Manager *m, +- int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes), ++ int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes), + bool carries_install_info, + sd_bus_error *error) { + +@@ -2279,7 +2279,7 @@ static int method_link_unit_files(sd_bus_message *message, void *userdata, sd_bu + return method_enable_unit_files_generic(message, userdata, unit_file_link, false, error); + } + +-static int unit_file_preset_without_mode(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) { ++static int unit_file_preset_without_mode(LookupScope scope, UnitFileFlags flags, const char *root_dir, char **files, UnitFileChange **changes, size_t *n_changes) { + return unit_file_preset(scope, flags, root_dir, files, UNIT_FILE_PRESET_FULL, changes, n_changes); + } + +@@ -2339,7 +2339,7 @@ static int method_preset_unit_files_with_mode(sd_bus_message *message, void *use + static int method_disable_unit_files_generic( + sd_bus_message *message, + Manager *m, +- int (*call)(UnitFileScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes), ++ int (*call)(LookupScope scope, UnitFileFlags flags, const char *root_dir, char *files[], UnitFileChange **changes, size_t *n_changes), + sd_bus_error *error) { + + _cleanup_strv_free_ char **l = NULL; +@@ -2565,7 +2565,7 @@ static int method_get_unit_file_links(sd_bus_message *message, void *userdata, s + flags = UNIT_FILE_DRY_RUN | + (runtime ? UNIT_FILE_RUNTIME : 0); + +- r = unit_file_disable(UNIT_FILE_SYSTEM, flags, NULL, p, &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, flags, NULL, p, &changes, &n_changes); + if (r < 0) + return log_error_errno(r, "Failed to get file links for %s: %m", name); + +diff --git a/src/core/fuzz-unit-file.c b/src/core/fuzz-unit-file.c +index 780dd3988d..c12e874e2d 100644 +--- a/src/core/fuzz-unit-file.c ++++ b/src/core/fuzz-unit-file.c +@@ -62,7 +62,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + if (!getenv("SYSTEMD_LOG_LEVEL")) + log_set_max_level(LOG_CRIT); + +- assert_se(manager_new(UNIT_FILE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0); ++ assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_MINIMAL, &m) >= 0); + + name = strjoina("a.", unit_type_to_string(t)); + assert_se(unit_new_for_name(m, unit_vtable[t]->object_size, name, &u) >= 0); +diff --git a/src/core/main.c b/src/core/main.c +index 4bad2e84a0..667e972364 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -2970,7 +2970,7 @@ int main(int argc, char *argv[]) { + if (r < 0) + goto finish; + +- r = manager_new(arg_system ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, ++ r = manager_new(arg_system ? LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER, + arg_action == ACTION_TEST ? MANAGER_TEST_FULL : 0, + &m); + if (r < 0) { +diff --git a/src/core/manager.c b/src/core/manager.c +index 60846a66e6..c01128adb4 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -781,13 +781,13 @@ static int manager_setup_sigchld_event_source(Manager *m) { + return 0; + } + +-int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **_m) { ++int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **_m) { + _cleanup_(manager_freep) Manager *m = NULL; + const char *e; + int r; + + assert(_m); +- assert(IN_SET(scope, UNIT_FILE_SYSTEM, UNIT_FILE_USER)); ++ assert(IN_SET(scope, LOOKUP_SCOPE_SYSTEM, LOOKUP_SCOPE_USER)); + + m = new(Manager, 1); + if (!m) +@@ -1705,7 +1705,7 @@ static void manager_preset_all(Manager *m) { + return; + + /* If this is the first boot, and we are in the host system, then preset everything */ +- r = unit_file_preset_all(UNIT_FILE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0); ++ r = unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, NULL, UNIT_FILE_PRESET_ENABLE_ONLY, NULL, 0); + if (r < 0) + log_full_errno(r == -EEXIST ? LOG_NOTICE : LOG_WARNING, r, + "Failed to populate /etc with preset unit settings, ignoring: %m"); +diff --git a/src/core/manager.h b/src/core/manager.h +index e445e4d751..281d2a2138 100644 +--- a/src/core/manager.h ++++ b/src/core/manager.h +@@ -235,7 +235,7 @@ struct Manager { + int user_lookup_fds[2]; + sd_event_source *user_lookup_event_source; + +- UnitFileScope unit_file_scope; ++ LookupScope unit_file_scope; + LookupPaths lookup_paths; + Hashmap *unit_id_map; + Hashmap *unit_name_map; +@@ -461,8 +461,8 @@ static inline usec_t manager_default_timeout_abort_usec(Manager *m) { + return m->default_timeout_abort_set ? m->default_timeout_abort_usec : m->default_timeout_stop_usec; + } + +-#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == UNIT_FILE_SYSTEM) +-#define MANAGER_IS_USER(m) ((m)->unit_file_scope != UNIT_FILE_SYSTEM) ++#define MANAGER_IS_SYSTEM(m) ((m)->unit_file_scope == LOOKUP_SCOPE_SYSTEM) ++#define MANAGER_IS_USER(m) ((m)->unit_file_scope != LOOKUP_SCOPE_SYSTEM) + + #define MANAGER_IS_RELOADING(m) ((m)->n_reloading > 0) + +@@ -473,7 +473,7 @@ static inline usec_t manager_default_timeout_abort_usec(Manager *m) { + + #define MANAGER_IS_TEST_RUN(m) ((m)->test_run_flags != 0) + +-int manager_new(UnitFileScope scope, ManagerTestRunFlags test_run_flags, Manager **m); ++int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager **m); + Manager* manager_free(Manager *m); + DEFINE_TRIVIAL_CLEANUP_FUNC(Manager*, manager_free); + +diff --git a/src/libsystemd/sd-path/sd-path.c b/src/libsystemd/sd-path/sd-path.c +index 8d9cfbc0af..385cfd3006 100644 +--- a/src/libsystemd/sd-path/sd-path.c ++++ b/src/libsystemd/sd-path/sd-path.c +@@ -601,8 +601,8 @@ static int get_search(uint64_t type, char ***list) { + case SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT: + case SD_PATH_SYSTEMD_SEARCH_USER_UNIT: { + _cleanup_(lookup_paths_free) LookupPaths lp = {}; +- const UnitFileScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT ? +- UNIT_FILE_SYSTEM : UNIT_FILE_USER; ++ const LookupScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_UNIT ? ++ LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER; + + r = lookup_paths_init(&lp, scope, 0, NULL); + if (r < 0) +@@ -615,8 +615,8 @@ static int get_search(uint64_t type, char ***list) { + case SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR: + case SD_PATH_SYSTEMD_SEARCH_USER_GENERATOR: { + char **t; +- const UnitFileScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR ? +- UNIT_FILE_SYSTEM : UNIT_FILE_USER; ++ const LookupScope scope = type == SD_PATH_SYSTEMD_SEARCH_SYSTEM_GENERATOR ? ++ LOOKUP_SCOPE_SYSTEM : LOOKUP_SCOPE_USER; + + t = generator_binary_paths(scope); + if (!t) +diff --git a/src/portable/portable.c b/src/portable/portable.c +index 5be7ea854d..4c75dc0e0c 100644 +--- a/src/portable/portable.c ++++ b/src/portable/portable.c +@@ -231,7 +231,7 @@ static int extract_now( + /* Then, send unit file data to the parent (or/and add it to the hashmap). For that we use our usual unit + * discovery logic. Note that we force looking inside of /lib/systemd/system/ for units too, as we mightbe + * compiled for a split-usr system but the image might be a legacy-usr one. */ +- r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, where); ++ r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, where); + if (r < 0) + return log_debug_errno(r, "Failed to acquire lookup paths: %m"); + +@@ -1302,12 +1302,12 @@ int portable_attach( + strempty(extensions_joined)); + } + +- r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL); ++ r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL); + if (r < 0) + return r; + + HASHMAP_FOREACH(item, unit_files) { +- r = unit_file_exists(UNIT_FILE_SYSTEM, &paths, item->name); ++ r = unit_file_exists(LOOKUP_SCOPE_SYSTEM, &paths, item->name); + if (r < 0) + return sd_bus_error_set_errnof(error, r, "Failed to determine whether unit '%s' exists on the host: %m", item->name); + if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0) +@@ -1489,7 +1489,7 @@ int portable_detach( + + assert(name_or_path); + +- r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL); ++ r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL); + if (r < 0) + return r; + +@@ -1523,7 +1523,7 @@ int portable_detach( + if (r == 0) + continue; + +- r = unit_file_lookup_state(UNIT_FILE_SYSTEM, &paths, de->d_name, &state); ++ r = unit_file_lookup_state(LOOKUP_SCOPE_SYSTEM, &paths, de->d_name, &state); + if (r < 0) + return log_debug_errno(r, "Failed to determine unit file state of '%s': %m", de->d_name); + if (!IN_SET(state, UNIT_FILE_STATIC, UNIT_FILE_DISABLED, UNIT_FILE_LINKED, UNIT_FILE_RUNTIME, UNIT_FILE_LINKED_RUNTIME)) +@@ -1657,7 +1657,7 @@ static int portable_get_state_internal( + assert(name_or_path); + assert(ret); + +- r = lookup_paths_init(&paths, UNIT_FILE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL); ++ r = lookup_paths_init(&paths, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_SPLIT_USR, NULL); + if (r < 0) + return r; + +@@ -1693,7 +1693,7 @@ static int portable_get_state_internal( + if (r == 0) + continue; + +- r = unit_file_lookup_state(UNIT_FILE_SYSTEM, &paths, de->d_name, &state); ++ r = unit_file_lookup_state(LOOKUP_SCOPE_SYSTEM, &paths, de->d_name, &state); + if (r < 0) + return log_debug_errno(r, "Failed to determine unit file state of '%s': %m", de->d_name); + if (!IN_SET(state, UNIT_FILE_STATIC, UNIT_FILE_DISABLED, UNIT_FILE_LINKED, UNIT_FILE_LINKED_RUNTIME)) +diff --git a/src/shared/install-printf.c b/src/shared/install-printf.c +index 7aad1b7443..fdb8e021ac 100644 +--- a/src/shared/install-printf.c ++++ b/src/shared/install-printf.c +@@ -104,7 +104,7 @@ static int specifier_last_component(char specifier, const void *data, const char + } + + int install_name_printf( +- UnitFileScope scope, ++ LookupScope scope, + const UnitFileInstallInfo *info, + const char *format, + char **ret) { +diff --git a/src/shared/install-printf.h b/src/shared/install-printf.h +index 60d3a9fc55..6a9ab24e15 100644 +--- a/src/shared/install-printf.h ++++ b/src/shared/install-printf.h +@@ -5,7 +5,7 @@ + #include "unit-name.h" + + int install_name_printf( +- UnitFileScope scope, ++ LookupScope scope, + const UnitFileInstallInfo *info, + const char *format, + char **ret); +diff --git a/src/shared/install.c b/src/shared/install.c +index 22b16ad453..fa7bbdd93a 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -47,7 +47,7 @@ typedef enum SearchFlags { + } SearchFlags; + + typedef struct { +- UnitFileScope scope; ++ LookupScope scope; + OrderedHashmap *will_process; + OrderedHashmap *have_processed; + } InstallContext; +@@ -942,7 +942,7 @@ static int find_symlinks( + } + + static int find_symlinks_in_scope( +- UnitFileScope scope, ++ LookupScope scope, + const LookupPaths *lp, + const UnitFileInstallInfo *info, + bool match_name, +@@ -976,7 +976,7 @@ static int find_symlinks_in_scope( + } + + /* look for global enablement of user units */ +- if (scope == UNIT_FILE_USER && path_is_user_config_dir(*p)) { ++ if (scope == LOOKUP_SCOPE_USER && path_is_user_config_dir(*p)) { + *state = UNIT_FILE_ENABLED; + return 1; + } +@@ -1868,7 +1868,7 @@ int unit_file_verify_alias( + } + + static int install_info_symlink_alias( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileInstallInfo *info, + const LookupPaths *lp, + const char *config_path, +@@ -1912,7 +1912,7 @@ static int install_info_symlink_alias( + } + + static int install_info_symlink_wants( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags file_flags, + UnitFileInstallInfo *info, + const LookupPaths *lp, +@@ -2052,7 +2052,7 @@ static int install_info_symlink_link( + } + + static int install_info_apply( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags file_flags, + UnitFileInstallInfo *info, + const LookupPaths *lp, +@@ -2225,7 +2225,7 @@ static int install_context_mark_for_removal( + } + + int unit_file_mask( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -2237,7 +2237,7 @@ int unit_file_mask( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) +@@ -2270,7 +2270,7 @@ int unit_file_mask( + } + + int unit_file_unmask( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -2285,7 +2285,7 @@ int unit_file_unmask( + int r, q; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) +@@ -2362,7 +2362,7 @@ int unit_file_unmask( + } + + int unit_file_link( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -2376,7 +2376,7 @@ int unit_file_link( + int r, q; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) +@@ -2462,7 +2462,7 @@ static int path_shall_revert(const LookupPaths *lp, const char *path) { + } + + int unit_file_revert( +- UnitFileScope scope, ++ LookupScope scope, + const char *root_dir, + char **files, + UnitFileChange **changes, +@@ -2613,7 +2613,7 @@ int unit_file_revert( + } + + int unit_file_add_dependency( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags file_flags, + const char *root_dir, + char **files, +@@ -2629,7 +2629,7 @@ int unit_file_add_dependency( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(target); + + if (!IN_SET(dep, UNIT_WANTS, UNIT_REQUIRES)) +@@ -2684,7 +2684,7 @@ int unit_file_add_dependency( + + static int do_unit_file_enable( + const LookupPaths *lp, +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *config_path, + char **files, +@@ -2714,7 +2714,7 @@ static int do_unit_file_enable( + } + + int unit_file_enable( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -2725,7 +2725,7 @@ int unit_file_enable( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) +@@ -2740,7 +2740,7 @@ int unit_file_enable( + + static int do_unit_file_disable( + const LookupPaths *lp, +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *config_path, + char **files, +@@ -2769,7 +2769,7 @@ static int do_unit_file_disable( + + + int unit_file_disable( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -2780,7 +2780,7 @@ int unit_file_disable( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) +@@ -2794,7 +2794,7 @@ int unit_file_disable( + } + + static int normalize_linked_files( +- UnitFileScope scope, ++ LookupScope scope, + const LookupPaths *lp, + char **names_or_paths, + char ***ret_names, +@@ -2852,7 +2852,7 @@ static int normalize_linked_files( + } + + int unit_file_reenable( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **names_or_paths, +@@ -2864,7 +2864,7 @@ int unit_file_reenable( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); + if (r < 0) +@@ -2888,7 +2888,7 @@ int unit_file_reenable( + } + + int unit_file_set_default( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + const char *name, +@@ -2902,7 +2902,7 @@ int unit_file_set_default( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(name); + + if (unit_name_to_type(name) != UNIT_TARGET) /* this also validates the name */ +@@ -2923,7 +2923,7 @@ int unit_file_set_default( + } + + int unit_file_get_default( +- UnitFileScope scope, ++ LookupScope scope, + const char *root_dir, + char **name) { + +@@ -2934,7 +2934,7 @@ int unit_file_get_default( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(name); + + r = lookup_paths_init(&lp, scope, 0, root_dir); +@@ -2958,7 +2958,7 @@ int unit_file_get_default( + } + + int unit_file_lookup_state( +- UnitFileScope scope, ++ LookupScope scope, + const LookupPaths *lp, + const char *name, + UnitFileState *ret) { +@@ -3056,7 +3056,7 @@ int unit_file_lookup_state( + } + + int unit_file_get_state( +- UnitFileScope scope, ++ LookupScope scope, + const char *root_dir, + const char *name, + UnitFileState *ret) { +@@ -3065,7 +3065,7 @@ int unit_file_get_state( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(name); + + r = lookup_paths_init(&lp, scope, 0, root_dir); +@@ -3075,7 +3075,7 @@ int unit_file_get_state( + return unit_file_lookup_state(scope, &lp, name, ret); + } + +-int unit_file_exists(UnitFileScope scope, const LookupPaths *lp, const char *name) { ++int unit_file_exists(LookupScope scope, const LookupPaths *lp, const char *name) { + _cleanup_(install_context_done) InstallContext c = { .scope = scope }; + int r; + +@@ -3127,17 +3127,17 @@ static int split_pattern_into_name_and_instances(const char *pattern, char **out + return 0; + } + +-static int presets_find_config(UnitFileScope scope, const char *root_dir, char ***files) { ++static int presets_find_config(LookupScope scope, const char *root_dir, char ***files) { + static const char* const system_dirs[] = {CONF_PATHS("systemd/system-preset"), NULL}; + static const char* const user_dirs[] = {CONF_PATHS_USR("systemd/user-preset"), NULL}; + const char* const* dirs; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + +- if (scope == UNIT_FILE_SYSTEM) ++ if (scope == LOOKUP_SCOPE_SYSTEM) + dirs = system_dirs; +- else if (IN_SET(scope, UNIT_FILE_GLOBAL, UNIT_FILE_USER)) ++ else if (IN_SET(scope, LOOKUP_SCOPE_GLOBAL, LOOKUP_SCOPE_USER)) + dirs = user_dirs; + else + assert_not_reached(); +@@ -3145,13 +3145,13 @@ static int presets_find_config(UnitFileScope scope, const char *root_dir, char * + return conf_files_list_strv(files, ".preset", root_dir, 0, dirs); + } + +-static int read_presets(UnitFileScope scope, const char *root_dir, UnitFilePresets *presets) { ++static int read_presets(LookupScope scope, const char *root_dir, UnitFilePresets *presets) { + _cleanup_(unit_file_presets_freep) UnitFilePresets ps = {}; + _cleanup_strv_free_ char **files = NULL; + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(presets); + + r = presets_find_config(scope, root_dir, &files); +@@ -3325,7 +3325,7 @@ static int query_presets(const char *name, const UnitFilePresets *presets, char + } + } + +-int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name, UnitFilePresets *cached) { ++int unit_file_query_preset(LookupScope scope, const char *root_dir, const char *name, UnitFilePresets *cached) { + _cleanup_(unit_file_presets_freep) UnitFilePresets tmp = {}; + int r; + +@@ -3389,7 +3389,7 @@ static int execute_preset( + } + + static int preset_prepare_one( +- UnitFileScope scope, ++ LookupScope scope, + InstallContext *plus, + InstallContext *minus, + LookupPaths *lp, +@@ -3442,7 +3442,7 @@ static int preset_prepare_one( + } + + int unit_file_preset( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags file_flags, + const char *root_dir, + char **files, +@@ -3457,7 +3457,7 @@ int unit_file_preset( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(mode < _UNIT_FILE_PRESET_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); +@@ -3482,7 +3482,7 @@ int unit_file_preset( + } + + int unit_file_preset_all( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags file_flags, + const char *root_dir, + UnitFilePresetMode mode, +@@ -3496,7 +3496,7 @@ int unit_file_preset_all( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(mode < _UNIT_FILE_PRESET_MAX); + + r = lookup_paths_init(&lp, scope, 0, root_dir); +@@ -3557,7 +3557,7 @@ Hashmap* unit_file_list_free(Hashmap *h) { + DEFINE_TRIVIAL_CLEANUP_FUNC(UnitFileList*, unit_file_list_free_one); + + int unit_file_get_list( +- UnitFileScope scope, ++ LookupScope scope, + const char *root_dir, + Hashmap *h, + char **states, +@@ -3567,7 +3567,7 @@ int unit_file_get_list( + int r; + + assert(scope >= 0); +- assert(scope < _UNIT_FILE_SCOPE_MAX); ++ assert(scope < _LOOKUP_SCOPE_MAX); + assert(h); + + r = lookup_paths_init(&lp, scope, 0, root_dir); +diff --git a/src/shared/install.h b/src/shared/install.h +index 95427537f2..2ba7e8aea0 100644 +--- a/src/shared/install.h ++++ b/src/shared/install.h +@@ -15,6 +15,7 @@ typedef struct UnitFileInstallInfo UnitFileInstallInfo; + #include "macro.h" + #include "path-lookup.h" + #include "strv.h" ++#include "unit-file.h" + #include "unit-name.h" + + enum UnitFilePresetMode { +@@ -95,28 +96,28 @@ struct UnitFileInstallInfo { + }; + + int unit_file_enable( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_disable( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_reenable( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **names_or_paths, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_preset( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -124,52 +125,52 @@ int unit_file_preset( + UnitFileChange **changes, + size_t *n_changes); + int unit_file_preset_all( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + UnitFilePresetMode mode, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_mask( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_unmask( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_link( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_revert( +- UnitFileScope scope, ++ LookupScope scope, + const char *root_dir, + char **files, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_set_default( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + const char *file, + UnitFileChange **changes, + size_t *n_changes); + int unit_file_get_default( +- UnitFileScope scope, ++ LookupScope scope, + const char *root_dir, + char **name); + int unit_file_add_dependency( +- UnitFileScope scope, ++ LookupScope scope, + UnitFileFlags flags, + const char *root_dir, + char **files, +@@ -179,15 +180,15 @@ int unit_file_add_dependency( + size_t *n_changes); + + int unit_file_lookup_state( +- UnitFileScope scope, ++ LookupScope scope, + const LookupPaths *paths, + const char *name, + UnitFileState *ret); + +-int unit_file_get_state(UnitFileScope scope, const char *root_dir, const char *filename, UnitFileState *ret); +-int unit_file_exists(UnitFileScope scope, const LookupPaths *paths, const char *name); ++int unit_file_get_state(LookupScope scope, const char *root_dir, const char *filename, UnitFileState *ret); ++int unit_file_exists(LookupScope scope, const LookupPaths *paths, const char *name); + +-int unit_file_get_list(UnitFileScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns); ++int unit_file_get_list(LookupScope scope, const char *root_dir, Hashmap *h, char **states, char **patterns); + Hashmap* unit_file_list_free(Hashmap *h); + + int unit_file_changes_add(UnitFileChange **changes, size_t *n_changes, int type, const char *path, const char *source); +@@ -210,7 +211,7 @@ typedef struct { + } UnitFilePresets; + + void unit_file_presets_freep(UnitFilePresets *p); +-int unit_file_query_preset(UnitFileScope scope, const char *root_dir, const char *name, UnitFilePresets *cached); ++int unit_file_query_preset(LookupScope scope, const char *root_dir, const char *name, UnitFilePresets *cached); + + const char *unit_file_state_to_string(UnitFileState s) _const_; + UnitFileState unit_file_state_from_string(const char *s) _pure_; +diff --git a/src/shared/specifier.c b/src/shared/specifier.c +index ac353a651c..cfa60abc7b 100644 +--- a/src/shared/specifier.c ++++ b/src/shared/specifier.c +@@ -18,10 +18,10 @@ + #include "id128-util.h" + #include "macro.h" + #include "os-util.h" ++#include "path-lookup.h" + #include "specifier.h" + #include "string-util.h" + #include "strv.h" +-#include "unit-file.h" + #include "user-util.h" + + /* +@@ -254,15 +254,15 @@ int specifier_os_image_version(char specifier, const void *data, const char *roo + } + + int specifier_group_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- UnitFileScope scope = PTR_TO_INT(data); ++ LookupScope scope = PTR_TO_INT(data); + char *t; + + assert(ret); + +- if (scope == UNIT_FILE_GLOBAL) ++ if (scope == LOOKUP_SCOPE_GLOBAL) + return -EINVAL; + +- t = gid_to_name(scope == UNIT_FILE_USER ? getgid() : 0); ++ t = gid_to_name(scope == LOOKUP_SCOPE_USER ? getgid() : 0); + if (!t) + return -ENOMEM; + +@@ -271,15 +271,15 @@ int specifier_group_name(char specifier, const void *data, const char *root, con + } + + int specifier_group_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- UnitFileScope scope = PTR_TO_INT(data); ++ LookupScope scope = PTR_TO_INT(data); + gid_t gid; + + assert(ret); + +- if (scope == UNIT_FILE_GLOBAL) ++ if (scope == LOOKUP_SCOPE_GLOBAL) + return -EINVAL; + +- gid = scope == UNIT_FILE_USER ? getgid() : 0; ++ gid = scope == LOOKUP_SCOPE_USER ? getgid() : 0; + + if (asprintf(ret, UID_FMT, gid) < 0) + return -ENOMEM; +@@ -288,16 +288,16 @@ int specifier_group_id(char specifier, const void *data, const char *root, const + } + + int specifier_user_name(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- UnitFileScope scope = PTR_TO_INT(data); ++ LookupScope scope = PTR_TO_INT(data); + uid_t uid; + char *t; + + assert(ret); + +- if (scope == UNIT_FILE_GLOBAL) ++ if (scope == LOOKUP_SCOPE_GLOBAL) + return -EINVAL; + +- uid = scope == UNIT_FILE_USER ? getuid() : 0; ++ uid = scope == LOOKUP_SCOPE_USER ? getuid() : 0; + + /* If we are UID 0 (root), this will not result in NSS, otherwise it might. This is good, as we want + * to be able to run this in PID 1, where our user ID is 0, but where NSS lookups are not allowed. +@@ -315,15 +315,15 @@ int specifier_user_name(char specifier, const void *data, const char *root, cons + } + + int specifier_user_id(char specifier, const void *data, const char *root, const void *userdata, char **ret) { +- UnitFileScope scope = PTR_TO_INT(data); ++ LookupScope scope = PTR_TO_INT(data); + uid_t uid; + + assert(ret); + +- if (scope == UNIT_FILE_GLOBAL) ++ if (scope == LOOKUP_SCOPE_GLOBAL) + return -EINVAL; + +- uid = scope == UNIT_FILE_USER ? getuid() : 0; ++ uid = scope == LOOKUP_SCOPE_USER ? getuid() : 0; + + if (asprintf(ret, UID_FMT, uid) < 0) + return -ENOMEM; +diff --git a/src/systemctl/systemctl-edit.c b/src/systemctl/systemctl-edit.c +index 328168e4bb..1d9e8dc5d2 100644 +--- a/src/systemctl/systemctl-edit.c ++++ b/src/systemctl/systemctl-edit.c +@@ -99,7 +99,7 @@ int cat(int argc, char *argv[], void *userdata) { + ansi_highlight_red(), + ansi_highlight_red(), + ansi_highlight_red(), +- arg_scope == UNIT_FILE_SYSTEM ? "" : " --user", ++ arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user", + ansi_normal()); + + r = cat_files(fragment_path, dropin_paths, 0); +@@ -406,8 +406,8 @@ static int find_paths_to_edit(sd_bus *bus, char **names, char ***paths) { + if (!path) { + if (!arg_force) { + log_info("Run 'systemctl edit%s --force --full %s' to create a new unit.", +- arg_scope == UNIT_FILE_GLOBAL ? " --global" : +- arg_scope == UNIT_FILE_USER ? " --user" : "", ++ arg_scope == LOOKUP_SCOPE_GLOBAL ? " --global" : ++ arg_scope == LOOKUP_SCOPE_USER ? " --user" : "", + *name); + return -ENOENT; + } +diff --git a/src/systemctl/systemctl-is-enabled.c b/src/systemctl/systemctl-is-enabled.c +index eaf25217a8..db8f9e8cc4 100644 +--- a/src/systemctl/systemctl-is-enabled.c ++++ b/src/systemctl/systemctl-is-enabled.c +@@ -18,7 +18,7 @@ static int show_installation_targets_client_side(const char *name) { + flags = UNIT_FILE_DRY_RUN | + (arg_runtime ? UNIT_FILE_RUNTIME : 0); + +- r = unit_file_disable(UNIT_FILE_SYSTEM, flags, NULL, p, &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, flags, NULL, p, &changes, &n_changes); + if (r < 0) + return log_error_errno(r, "Failed to get file links for %s: %m", name); + +diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c +index ee96dac457..d472e1759d 100644 +--- a/src/systemctl/systemctl-show.c ++++ b/src/systemctl/systemctl-show.c +@@ -764,7 +764,7 @@ static void print_status_info( + getuid(), + get_output_flags() | OUTPUT_BEGIN_NEWLINE, + SD_JOURNAL_LOCAL_ONLY, +- arg_scope == UNIT_FILE_SYSTEM, ++ arg_scope == LOOKUP_SCOPE_SYSTEM, + ellipsized); + + if (i->need_daemon_reload) +diff --git a/src/systemctl/systemctl-start-special.c b/src/systemctl/systemctl-start-special.c +index 6ece700a9b..9c88e7910c 100644 +--- a/src/systemctl/systemctl-start-special.c ++++ b/src/systemctl/systemctl-start-special.c +@@ -242,10 +242,10 @@ int start_special(int argc, char *argv[], void *userdata) { + int start_system_special(int argc, char *argv[], void *userdata) { + /* Like start_special above, but raises an error when running in user mode */ + +- if (arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Bad action for %s mode.", +- arg_scope == UNIT_FILE_GLOBAL ? "--global" : "--user"); ++ arg_scope == LOOKUP_SCOPE_GLOBAL ? "--global" : "--user"); + + return start_special(argc, argv, userdata); + } +diff --git a/src/systemctl/systemctl-start-unit.c b/src/systemctl/systemctl-start-unit.c +index b45495d51d..88b2b7a53d 100644 +--- a/src/systemctl/systemctl-start-unit.c ++++ b/src/systemctl/systemctl-start-unit.c +@@ -168,8 +168,8 @@ fail: + BUS_ERROR_UNIT_MASKED, + BUS_ERROR_JOB_TYPE_NOT_APPLICABLE)) + log_error("See %s logs and 'systemctl%s status%s %s' for details.", +- arg_scope == UNIT_FILE_SYSTEM ? "system" : "user", +- arg_scope == UNIT_FILE_SYSTEM ? "" : " --user", ++ arg_scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user", ++ arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user", + name[0] == '-' ? " --" : "", + name); + +@@ -242,7 +242,7 @@ static const char** make_extra_args(const char *extra_args[static 4]) { + + assert(extra_args); + +- if (arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) + extra_args[n++] = "--user"; + + if (arg_transport == BUS_TRANSPORT_REMOTE) { +diff --git a/src/systemctl/systemctl-sysv-compat.c b/src/systemctl/systemctl-sysv-compat.c +index c6e8defd1b..f6889993ed 100644 +--- a/src/systemctl/systemctl-sysv-compat.c ++++ b/src/systemctl/systemctl-sysv-compat.c +@@ -116,7 +116,7 @@ int enable_sysv_units(const char *verb, char **args) { + + /* Processes all SysV units, and reshuffles the array so that afterwards only the native units remain */ + +- if (arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) + return 0; + + if (getenv_bool("SYSTEMCTL_SKIP_SYSV") > 0) +diff --git a/src/systemctl/systemctl-util.c b/src/systemctl/systemctl-util.c +index db40154943..c39e0b7d5d 100644 +--- a/src/systemctl/systemctl-util.c ++++ b/src/systemctl/systemctl-util.c +@@ -46,7 +46,7 @@ int acquire_bus(BusFocus focus, sd_bus **ret) { + if (!buses[focus]) { + bool user; + +- user = arg_scope != UNIT_FILE_SYSTEM; ++ user = arg_scope != LOOKUP_SCOPE_SYSTEM; + + if (focus == BUS_MANAGER) + r = bus_connect_transport_systemd(arg_transport, arg_host, user, &buses[focus]); +@@ -73,7 +73,7 @@ void ask_password_agent_open_maybe(void) { + if (arg_dry_run) + return; + +- if (arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) + return; + + ask_password_agent_open_if_enabled(arg_transport, arg_ask_password); +@@ -82,7 +82,7 @@ void ask_password_agent_open_maybe(void) { + void polkit_agent_open_maybe(void) { + /* Open the polkit agent as a child process if necessary */ + +- if (arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) + return; + + polkit_agent_open_if_enabled(arg_transport, arg_ask_password); +@@ -380,7 +380,7 @@ void warn_unit_file_changed(const char *unit) { + ansi_highlight_red(), + ansi_normal(), + unit, +- arg_scope == UNIT_FILE_SYSTEM ? "" : " --user"); ++ arg_scope == LOOKUP_SCOPE_SYSTEM ? "" : " --user"); + } + + int unit_file_find_path(LookupPaths *lp, const char *unit_name, char **ret_unit_path) { +@@ -814,7 +814,7 @@ bool install_client_side(void) { + if (!isempty(arg_root)) + return true; + +- if (arg_scope == UNIT_FILE_GLOBAL) ++ if (arg_scope == LOOKUP_SCOPE_GLOBAL) + return true; + + /* Unsupported environment variable, mostly for debugging purposes */ +diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c +index 0489796a75..094cceebd6 100644 +--- a/src/systemctl/systemctl.c ++++ b/src/systemctl/systemctl.c +@@ -66,7 +66,7 @@ char **arg_properties = NULL; + bool arg_all = false; + enum dependency arg_dependency = DEPENDENCY_FORWARD; + const char *_arg_job_mode = NULL; +-UnitFileScope arg_scope = UNIT_FILE_SYSTEM; ++LookupScope arg_scope = LOOKUP_SCOPE_SYSTEM; + bool arg_wait = false; + bool arg_no_block = false; + int arg_legend = -1; /* -1: true, unless --quiet is passed, 1: true */ +@@ -616,15 +616,15 @@ static int systemctl_parse_argv(int argc, char *argv[]) { + break; + + case ARG_USER: +- arg_scope = UNIT_FILE_USER; ++ arg_scope = LOOKUP_SCOPE_USER; + break; + + case ARG_SYSTEM: +- arg_scope = UNIT_FILE_SYSTEM; ++ arg_scope = LOOKUP_SCOPE_SYSTEM; + break; + + case ARG_GLOBAL: +- arg_scope = UNIT_FILE_GLOBAL; ++ arg_scope = LOOKUP_SCOPE_GLOBAL; + break; + + case ARG_WAIT: +@@ -924,10 +924,10 @@ static int systemctl_parse_argv(int argc, char *argv[]) { + + /* If we are in --user mode, there's no point in talking to PolicyKit or the infra to query system + * passwords */ +- if (arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_scope != LOOKUP_SCOPE_SYSTEM) + arg_ask_password = false; + +- if (arg_transport == BUS_TRANSPORT_REMOTE && arg_scope != UNIT_FILE_SYSTEM) ++ if (arg_transport == BUS_TRANSPORT_REMOTE && arg_scope != LOOKUP_SCOPE_SYSTEM) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Cannot access user instance remotely."); + +diff --git a/src/systemctl/systemctl.h b/src/systemctl/systemctl.h +index d6b9d7495c..7507398c4a 100644 +--- a/src/systemctl/systemctl.h ++++ b/src/systemctl/systemctl.h +@@ -51,7 +51,7 @@ extern char **arg_properties; + extern bool arg_all; + extern enum dependency arg_dependency; + extern const char *_arg_job_mode; +-extern UnitFileScope arg_scope; ++extern LookupScope arg_scope; + extern bool arg_wait; + extern bool arg_no_block; + extern int arg_legend; +diff --git a/src/sysv-generator/sysv-generator.c b/src/sysv-generator/sysv-generator.c +index 428509f4ce..14ae873dc0 100644 +--- a/src/sysv-generator/sysv-generator.c ++++ b/src/sysv-generator/sysv-generator.c +@@ -747,7 +747,7 @@ static int enumerate_sysv(const LookupPaths *lp, Hashmap *all_services) { + if (hashmap_contains(all_services, name)) + continue; + +- r = unit_file_exists(UNIT_FILE_SYSTEM, lp, name); ++ r = unit_file_exists(LOOKUP_SCOPE_SYSTEM, lp, name); + if (r < 0 && !IN_SET(r, -ELOOP, -ERFKILL, -EADDRNOTAVAIL)) { + log_debug_errno(r, "Failed to detect whether %s exists, skipping: %m", name); + continue; +@@ -891,7 +891,7 @@ static int run(const char *dest, const char *dest_early, const char *dest_late) + + assert_se(arg_dest = dest_late); + +- r = lookup_paths_init_or_warn(&lp, UNIT_FILE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL); ++ r = lookup_paths_init_or_warn(&lp, LOOKUP_SCOPE_SYSTEM, LOOKUP_PATHS_EXCLUDE_GENERATED, NULL); + if (r < 0) + return r; + +diff --git a/src/test/test-bpf-firewall.c b/src/test/test-bpf-firewall.c +index 2e19db600e..cebd7d8a8b 100644 +--- a/src/test/test-bpf-firewall.c ++++ b/src/test/test-bpf-firewall.c +@@ -97,7 +97,7 @@ int main(int argc, char *argv[]) { + + /* The simple tests succeeded. Now let's try full unit-based use-case. */ + +- assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); ++ assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); + assert_se(manager_startup(m, NULL, NULL, NULL) >= 0); + + assert_se(u = unit_new(m, sizeof(Service))); +diff --git a/src/test/test-bpf-foreign-programs.c b/src/test/test-bpf-foreign-programs.c +index 56933c87bf..45b685d219 100644 +--- a/src/test/test-bpf-foreign-programs.c ++++ b/src/test/test-bpf-foreign-programs.c +@@ -301,7 +301,7 @@ int main(int argc, char *argv[]) { + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); + +- assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); ++ assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); + assert_se(manager_startup(m, NULL, NULL, NULL) >= 0); + + assert_se(test_bpf_cgroup_programs(m, +diff --git a/src/test/test-bpf-lsm.c b/src/test/test-bpf-lsm.c +index 4a3b327a3f..812f7e99fb 100644 +--- a/src/test/test-bpf-lsm.c ++++ b/src/test/test-bpf-lsm.c +@@ -92,7 +92,7 @@ int main(int argc, char *argv[]) { + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); + +- assert_se(manager_new(UNIT_FILE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0); ++ assert_se(manager_new(LOOKUP_SCOPE_SYSTEM, MANAGER_TEST_RUN_BASIC, &m) >= 0); + assert_se(manager_startup(m, NULL, NULL, NULL) >= 0); + + /* We need to enable access to the filesystem where the binary is so we +diff --git a/src/test/test-cgroup-mask.c b/src/test/test-cgroup-mask.c +index 6058f32b0e..57483f72c2 100644 +--- a/src/test/test-cgroup-mask.c ++++ b/src/test/test-cgroup-mask.c +@@ -42,7 +42,7 @@ TEST_RET(cgroup_mask, .sd_booted = true) { + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m); + if (IN_SET(r, -EPERM, -EACCES)) { + log_error_errno(r, "manager_new: %m"); + return log_tests_skipped("cannot create manager"); +diff --git a/src/test/test-cgroup-unit-default.c b/src/test/test-cgroup-unit-default.c +index 4c8de1e382..94201a3ccc 100644 +--- a/src/test/test-cgroup-unit-default.c ++++ b/src/test/test-cgroup-unit-default.c +@@ -26,7 +26,7 @@ TEST_RET(default_memory_low, .sd_booted = true) { + assert_se(get_testdata_dir("units", &unit_dir) >= 0); + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m); + if (IN_SET(r, -EPERM, -EACCES)) { + log_error_errno(r, "manager_new: %m"); + return log_tests_skipped("cannot create manager"); +diff --git a/src/test/test-engine.c b/src/test/test-engine.c +index 673c665612..70f727d91c 100644 +--- a/src/test/test-engine.c ++++ b/src/test/test-engine.c +@@ -93,7 +93,7 @@ int main(int argc, char *argv[]) { + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m); + if (manager_errno_skip_test(r)) + return log_tests_skipped_errno(r, "manager_new"); + assert_se(r >= 0); +diff --git a/src/test/test-execute.c b/src/test/test-execute.c +index 3b4b02184c..3505e81a43 100644 +--- a/src/test/test-execute.c ++++ b/src/test/test-execute.c +@@ -1116,7 +1116,7 @@ typedef struct test_entry { + + #define entry(x) {x, #x} + +-static int run_tests(UnitFileScope scope, const test_entry tests[], char **patterns) { ++static int run_tests(LookupScope scope, const test_entry tests[], char **patterns) { + _cleanup_(manager_freep) Manager *m = NULL; + int r; + +@@ -1238,11 +1238,11 @@ int main(int argc, char *argv[]) { + assert_se(unsetenv("VAR2") == 0); + assert_se(unsetenv("VAR3") == 0); + +- r = run_tests(UNIT_FILE_USER, user_tests, argv + 1); ++ r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1); + if (r != 0) + return r; + +- r = run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1); ++ r = run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1); + if (r != 0) + return r; + +@@ -1264,11 +1264,11 @@ int main(int argc, char *argv[]) { + + can_unshare = false; + +- r = run_tests(UNIT_FILE_USER, user_tests, argv + 1); ++ r = run_tests(LOOKUP_SCOPE_USER, user_tests, argv + 1); + if (r != 0) + return r; + +- return run_tests(UNIT_FILE_SYSTEM, system_tests, argv + 1); ++ return run_tests(LOOKUP_SCOPE_SYSTEM, system_tests, argv + 1); + #else + return 0; + #endif +diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c +index dca695d124..a36536b85b 100644 +--- a/src/test/test-install-root.c ++++ b/src/test/test-install-root.c +@@ -23,41 +23,41 @@ TEST(basic_mask_and_enable) { + UnitFileChange *changes = NULL; + size_t n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", NULL) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/a.service"); + assert_se(write_string_file(p, + "[Install]\n" + "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/b.service"); + assert_se(symlink("a.service", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + + p = strjoina(root, "/usr/lib/systemd/system/c.service"); + assert_se(symlink("/usr/lib/systemd/system/a.service", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + + p = strjoina(root, "/usr/lib/systemd/system/d.service"); + assert_se(symlink("c.service", p) >= 0); + + /* This one is interesting, as d follows a relative, then an absolute symlink */ +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + +- assert_se(unit_file_mask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "/dev/null")); +@@ -67,17 +67,17 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_MASKED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_MASKED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_MASKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_MASKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_MASKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_MASKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_MASKED); + + /* Enabling a masked unit should fail! */ +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == -ERFKILL); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_unmask(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/a.service"); +@@ -85,7 +85,7 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../a.service")); +@@ -94,18 +94,18 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + + /* Enabling it again should succeed but be a NOP */ +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 0); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); +@@ -113,19 +113,19 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + + /* Disabling a disabled unit must succeed but be a NOP */ +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 0); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + + /* Let's enable this indirectly via a symlink */ +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../a.service")); +@@ -134,14 +134,14 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + + /* Let's try to reenable */ + +- assert_se(unit_file_reenable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("b.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); +@@ -152,24 +152,24 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "b.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "c.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "d.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + + /* Test masking with relative symlinks */ + + p = strjoina(root, "/usr/lib/systemd/system/e.service"); + assert_se(symlink("../../../../../../dev/null", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED); + + assert_se(unlink(p) == 0); + assert_se(symlink("/usr/../dev/null", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "e.service", &state) >= 0 && state == UNIT_FILE_MASKED); + + assert_se(unlink(p) == 0); + +@@ -180,10 +180,10 @@ TEST(basic_mask_and_enable) { + "[Install]\n" + "WantedBy=x.target\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../f.service")); +@@ -196,7 +196,7 @@ TEST(basic_mask_and_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "f.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + } + + TEST(linked_units) { +@@ -236,9 +236,9 @@ TEST(linked_units) { + "[Install]\n" + "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked2.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked3.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked2.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked3.service", NULL) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/linked2.service"); + assert_se(symlink("/opt/linked2.service", p) >= 0); +@@ -246,12 +246,12 @@ TEST(linked_units) { + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked3.service"); + assert_se(symlink("/opt/linked3.service", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked3.service", &state) >= 0 && state == UNIT_FILE_LINKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked3.service", &state) >= 0 && state == UNIT_FILE_LINKED); + + /* First, let's link the unit into the search path */ +- assert_se(unit_file_link(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "/opt/linked.service")); +@@ -260,10 +260,10 @@ TEST(linked_units) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_LINKED); + + /* Let's unlink it from the search path again */ +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service"); +@@ -271,10 +271,10 @@ TEST(linked_units) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT); + + /* Now, let's not just link it, but also enable it */ +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("/opt/linked.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 2); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service"); + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service"); +@@ -294,10 +294,10 @@ TEST(linked_units) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + + /* And let's unlink it again */ +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 2); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked.service"); + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service"); +@@ -315,9 +315,9 @@ TEST(linked_units) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "linked.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "linked.service", NULL) == -ENOENT); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked2.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked2.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 2); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/linked2.service"); + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service"); +@@ -337,7 +337,7 @@ TEST(linked_units) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("linked3.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(startswith(changes[0].path, root)); +@@ -359,18 +359,18 @@ TEST(default) { + p = strjoina(root, "/usr/lib/systemd/system/test-default.target"); + assert_se(symlink("test-default-real.target", p) >= 0); + +- assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) == -ENOENT); ++ assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT); + +- assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT); ++ assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "idontexist.target", &changes, &n_changes) == -ENOENT); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == -ENOENT); + assert_se(streq_ptr(changes[0].path, "idontexist.target")); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) == -ENOENT); ++ assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) == -ENOENT); + +- assert_se(unit_file_set_default(UNIT_FILE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0); ++ assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "test-default-real.target")); +@@ -379,7 +379,7 @@ TEST(default) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_default(UNIT_FILE_SYSTEM, root, &def) >= 0); ++ assert_se(unit_file_get_default(LOOKUP_SCOPE_SYSTEM, root, &def) >= 0); + assert_se(streq_ptr(def, "test-default-real.target")); + } + +@@ -400,7 +400,7 @@ TEST(add_dependency) { + p = strjoina(root, "/usr/lib/systemd/system/add-dependency-test-service.service"); + assert_se(symlink("real-add-dependency-test-service.service", p) >= 0); + +- assert_se(unit_file_add_dependency(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0); ++ assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../real-add-dependency-test-service.service")); +@@ -418,10 +418,10 @@ TEST(template_enable) { + + log_info("== %s ==", __func__); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/template@.service"); + assert_se(write_string_file(p, +@@ -432,16 +432,16 @@ TEST(template_enable) { + p = strjoina(root, "/usr/lib/systemd/system/template-symlink@.service"); + assert_se(symlink("template@.service", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + log_info("== %s with template@.service enabled ==", __func__); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../template@.service")); +@@ -450,30 +450,30 @@ TEST(template_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + log_info("== %s with template@foo.service enabled ==", __func__); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../template@foo.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service"); +@@ -481,33 +481,33 @@ TEST(template_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0); + assert_se(state == UNIT_FILE_INDIRECT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + log_info("== %s with template-symlink@quux.service enabled ==", __func__); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../template@quux.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service"); +@@ -515,14 +515,14 @@ TEST(template_enable) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@quux.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + } + + TEST(indirect) { +@@ -531,9 +531,9 @@ TEST(indirect) { + UnitFileState state; + const char *p; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/indirecta.service"); + assert_se(write_string_file(p, +@@ -548,11 +548,11 @@ TEST(indirect) { + p = strjoina(root, "/usr/lib/systemd/system/indirectc.service"); + assert_se(symlink("indirecta.service", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../indirectb.service")); +@@ -561,11 +561,11 @@ TEST(indirect) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirecta.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectb.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "indirectc.service", &state) >= 0 && state == UNIT_FILE_ALIAS); + +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service"); +@@ -583,8 +583,8 @@ TEST(preset_and_list) { + UnitFileList *fl; + Hashmap *h; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/preset-yes.service"); + assert_se(write_string_file(p, +@@ -601,10 +601,10 @@ TEST(preset_and_list) { + "enable *-yes.*\n" + "disable *\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../preset-yes.service")); +@@ -613,10 +613,10 @@ TEST(preset_and_list) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service"); +@@ -624,18 +624,18 @@ TEST(preset_and_list) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-no.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 0); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_preset_all(UNIT_FILE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + + assert_se(n_changes > 0); + +@@ -653,17 +653,17 @@ TEST(preset_and_list) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-yes.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "preset-no.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + assert_se(h = hashmap_new(&string_hash_ops)); +- assert_se(unit_file_get_list(UNIT_FILE_SYSTEM, root, h, NULL, NULL) >= 0); ++ assert_se(unit_file_get_list(LOOKUP_SCOPE_SYSTEM, root, h, NULL, NULL) >= 0); + + p = strjoina(root, "/usr/lib/systemd/system/preset-yes.service"); + q = strjoina(root, "/usr/lib/systemd/system/preset-no.service"); + + HASHMAP_FOREACH(fl, h) { +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, basename(fl->path), &state) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, basename(fl->path), &state) >= 0); + assert_se(fl->state == state); + + if (streq(fl->path, p)) { +@@ -687,17 +687,17 @@ TEST(revert) { + UnitFileChange *changes = NULL; + size_t n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", NULL) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "yy.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "yy.service", NULL) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/xx.service"); + assert_se(write_string_file(p, "# Empty\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", NULL) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "xx.service", &state) >= 0 && state == UNIT_FILE_STATIC); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", NULL) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "xx.service", &state) >= 0 && state == UNIT_FILE_STATIC); + + /* Initially there's nothing to revert */ +- assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 0); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; +@@ -706,7 +706,7 @@ TEST(revert) { + assert_se(write_string_file(p, "# Empty override\n", WRITE_STRING_FILE_CREATE) >= 0); + + /* Revert the override file */ +- assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + assert_se(streq(changes[0].path, p)); +@@ -717,7 +717,7 @@ TEST(revert) { + assert_se(write_string_file(p, "# Empty dropin\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + + /* Revert the dropin file */ +- assert_se(unit_file_revert(UNIT_FILE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_revert(LOOKUP_SCOPE_SYSTEM, root, STRV_MAKE("xx.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + assert_se(streq(changes[0].path, p)); +@@ -735,8 +735,8 @@ TEST(preset_order) { + const char *p; + UnitFileState state; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/prefix-1.service"); + assert_se(write_string_file(p, +@@ -754,10 +754,10 @@ TEST(preset_order) { + "disable prefix-*.service\n" + "enable prefix-2.service\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../prefix-1.service")); +@@ -766,36 +766,36 @@ TEST(preset_order) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("prefix-2.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-2.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "prefix-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + } + + TEST(static_instance) { + UnitFileState state; + const char *p; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/static-instance@.service"); + assert_se(write_string_file(p, + "[Install]\n" + "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/static-instance@foo.service"); + assert_se(symlink("static-instance@.service", p) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_STATIC); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "static-instance@foo.service", &state) >= 0 && state == UNIT_FILE_STATIC); + } + + TEST(with_dropin) { +@@ -804,11 +804,11 @@ TEST(with_dropin) { + UnitFileChange *changes = NULL; + size_t n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1.service"); + assert_se(write_string_file(p, +@@ -820,7 +820,7 @@ TEST(with_dropin) { + "[Install]\n" + "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service"); + assert_se(write_string_file(p, +@@ -832,7 +832,7 @@ TEST(with_dropin) { + "[Install]\n" + "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3.service"); + assert_se(write_string_file(p, +@@ -844,7 +844,7 @@ TEST(with_dropin) { + "[Install]\n" + "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-4a.service"); + assert_se(write_string_file(p, +@@ -856,16 +856,16 @@ TEST(with_dropin) { + "[Install]\n" + "Also=with-dropin-4b.service\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-4b.service"); + assert_se(write_string_file(p, + "[Install]\n" + "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +@@ -878,8 +878,8 @@ TEST(with_dropin) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +@@ -892,8 +892,8 @@ TEST(with_dropin) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +@@ -906,8 +906,8 @@ TEST(with_dropin) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-4a.service"), &changes, &n_changes) == 2); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +@@ -920,11 +920,11 @@ TEST(with_dropin) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4a.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-4b.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + } + + TEST(with_dropin_template) { +@@ -933,9 +933,9 @@ TEST(with_dropin_template) { + UnitFileChange *changes = NULL; + size_t n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@.service", &state) == -ENOENT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@.service", &state) == -ENOENT); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-1@.service"); + assert_se(write_string_file(p, +@@ -947,7 +947,7 @@ TEST(with_dropin_template) { + "[Install]\n" + "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-2@.service"); + assert_se(write_string_file(p, +@@ -959,7 +959,7 @@ TEST(with_dropin_template) { + "[Install]\n" + "WantedBy=graphical.target\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system/with-dropin-3@.service"); + assert_se(write_string_file(p, +@@ -972,9 +972,9 @@ TEST(with_dropin_template) { + "[Install]\n" + "DefaultInstance=instance-2\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-1@instance-1.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +@@ -987,7 +987,7 @@ TEST(with_dropin_template) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-1.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +@@ -1000,7 +1000,7 @@ TEST(with_dropin_template) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../with-dropin-2@instance-2.service")); +@@ -1009,7 +1009,7 @@ TEST(with_dropin_template) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_enable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1); ++ assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(streq(changes[0].source, "../with-dropin-3@.service")); +@@ -1018,11 +1018,11 @@ TEST(with_dropin_template) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-2@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@instance-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "with-dropin-3@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-1@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@instance-1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-2@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@instance-1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "with-dropin-3@instance-2.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + } + + TEST(preset_multiple_instances) { +@@ -1038,7 +1038,7 @@ TEST(preset_multiple_instances) { + "DefaultInstance=def\n" + "WantedBy=multi-user.target\n", WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + p = strjoina(root, "/usr/lib/systemd/system-preset/test.preset"); + assert_se(write_string_file(p, +@@ -1046,11 +1046,11 @@ TEST(preset_multiple_instances) { + "enable emptylist@.service\n" /* This line ensures the old functionality for templated unit still works */ + "disable *\n" , WRITE_STRING_FILE_CREATE) >= 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + + /* Preset a single instantiated unit specified in the list */ +- assert_se(unit_file_preset(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service"); +@@ -1058,7 +1058,7 @@ TEST(preset_multiple_instances) { + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_disable(UNIT_FILE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0); ++ assert_se(unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("foo@bar0.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_UNLINK); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/foo@bar0.service"); +@@ -1067,17 +1067,17 @@ TEST(preset_multiple_instances) { + changes = NULL; n_changes = 0; + + /* Check for preset-all case, only instances on the list should be enabled, not including the default instance */ +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + +- assert_se(unit_file_preset_all(UNIT_FILE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); ++ assert_se(unit_file_preset_all(LOOKUP_SCOPE_SYSTEM, 0, root, UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes > 0); + +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +- assert_se(unit_file_get_state(UNIT_FILE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar0.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bar1.service", &state) >= 0 && state == UNIT_FILE_ENABLED); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "foo@bartest.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + + unit_file_changes_free(changes, n_changes); + } +diff --git a/src/test/test-install.c b/src/test/test-install.c +index 7a0beb2d24..6c5a036465 100644 +--- a/src/test/test-install.c ++++ b/src/test/test-install.c +@@ -32,13 +32,13 @@ int main(int argc, char* argv[]) { + test_setup_logging(LOG_DEBUG); + + h = hashmap_new(&string_hash_ops); +- r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL); ++ r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL); + assert_se(r == 0); + + HASHMAP_FOREACH(p, h) { + UnitFileState s = _UNIT_FILE_STATE_INVALID; + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(p->path), &s); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(p->path), &s); + + assert_se((r < 0 && p->state == UNIT_FILE_BAD) || + (p->state == s)); +@@ -52,18 +52,18 @@ int main(int argc, char* argv[]) { + + log_info("/*** enable **/"); + +- r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + log_info("/*** enable2 **/"); + +- r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_ENABLED); + +@@ -71,13 +71,13 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_DISABLED); + +@@ -85,16 +85,16 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + log_info("/*** mask2 ***/"); +- r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_MASKED); + +@@ -102,16 +102,16 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + log_info("/*** unmask2 ***/"); +- r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_DISABLED); + +@@ -119,13 +119,13 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_mask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_mask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_MASKED); + +@@ -133,16 +133,16 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + log_info("/*** disable2 ***/"); +- r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_MASKED); + +@@ -150,13 +150,13 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_unmask(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); ++ r = unit_file_unmask(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, files[0], &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, files[0], &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_DISABLED); + +@@ -164,13 +164,13 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_enable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); ++ r = unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_ENABLED); + +@@ -178,26 +178,26 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r < 0); + + log_info("/*** link files2 ***/"); + changes = NULL; + n_changes = 0; + +- r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); ++ r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_LINKED); + +@@ -205,26 +205,26 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r < 0); + + log_info("/*** link files2 ***/"); + changes = NULL; + n_changes = 0; + +- r = unit_file_link(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); ++ r = unit_file_link(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_LINKED); + +@@ -232,13 +232,13 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_reenable(UNIT_FILE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); ++ r = unit_file_reenable(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files2, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_ENABLED); + +@@ -246,25 +246,25 @@ int main(int argc, char* argv[]) { + changes = NULL; + n_changes = 0; + +- r = unit_file_disable(UNIT_FILE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); ++ r = unit_file_disable(LOOKUP_SCOPE_SYSTEM, 0, NULL, STRV_MAKE(basename(files2[0])), &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files2[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files2[0]), &state); + assert_se(r < 0); + log_info("/*** preset files ***/"); + changes = NULL; + n_changes = 0; + +- r = unit_file_preset(UNIT_FILE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes); ++ r = unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, NULL, (char**) files, UNIT_FILE_PRESET_FULL, &changes, &n_changes); + assert_se(r >= 0); + + dump_changes(changes, n_changes); + unit_file_changes_free(changes, n_changes); + +- r = unit_file_get_state(UNIT_FILE_SYSTEM, NULL, basename(files[0]), &state); ++ r = unit_file_get_state(LOOKUP_SCOPE_SYSTEM, NULL, basename(files[0]), &state); + assert_se(r >= 0); + assert_se(state == UNIT_FILE_ENABLED); + +diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c +index a87c654f4e..46ba108266 100644 +--- a/src/test/test-load-fragment.c ++++ b/src/test/test-load-fragment.c +@@ -43,7 +43,7 @@ TEST_RET(unit_file_get_set) { + h = hashmap_new(&string_hash_ops); + assert_se(h); + +- r = unit_file_get_list(UNIT_FILE_SYSTEM, NULL, h, NULL, NULL); ++ r = unit_file_get_list(LOOKUP_SCOPE_SYSTEM, NULL, h, NULL, NULL); + if (IN_SET(r, -EPERM, -EACCES)) + return log_tests_skipped_errno(r, "unit_file_get_list"); + +@@ -102,7 +102,7 @@ TEST(config_parse_exec) { + _cleanup_(manager_freep) Manager *m = NULL; + _cleanup_(unit_freep) Unit *u = NULL; + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (manager_errno_skip_test(r)) { + log_notice_errno(r, "Skipping test: manager_new: %m"); + return; +@@ -461,7 +461,7 @@ TEST(config_parse_log_extra_fields) { + _cleanup_(unit_freep) Unit *u = NULL; + ExecContext c = {}; + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (manager_errno_skip_test(r)) { + log_notice_errno(r, "Skipping test: manager_new: %m"); + return; +@@ -544,56 +544,56 @@ TEST(install_printf, .sd_booted = true) { + strcpy(i.path, d2); \ + } while (false) + +- expect(UNIT_FILE_SYSTEM, i, "%n", "name.service"); +- expect(UNIT_FILE_SYSTEM, i, "%N", "name"); +- expect(UNIT_FILE_SYSTEM, i, "%p", "name"); +- expect(UNIT_FILE_SYSTEM, i, "%i", ""); +- expect(UNIT_FILE_SYSTEM, i, "%j", "name"); +- expect(UNIT_FILE_SYSTEM, i, "%g", "root"); +- expect(UNIT_FILE_SYSTEM, i, "%G", "0"); +- expect(UNIT_FILE_SYSTEM, i, "%u", "root"); +- expect(UNIT_FILE_SYSTEM, i, "%U", "0"); +- +- expect(UNIT_FILE_SYSTEM, i, "%m", mid); +- expect(UNIT_FILE_SYSTEM, i, "%b", bid); +- expect(UNIT_FILE_SYSTEM, i, "%H", host); +- +- expect(UNIT_FILE_SYSTEM, i2, "%g", "root"); +- expect(UNIT_FILE_SYSTEM, i2, "%G", "0"); +- expect(UNIT_FILE_SYSTEM, i2, "%u", "root"); +- expect(UNIT_FILE_SYSTEM, i2, "%U", "0"); +- +- expect(UNIT_FILE_USER, i2, "%g", group); +- expect(UNIT_FILE_USER, i2, "%G", gid); +- expect(UNIT_FILE_USER, i2, "%u", user); +- expect(UNIT_FILE_USER, i2, "%U", uid); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%n", "name.service"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%N", "name"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%p", "name"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%i", ""); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%j", "name"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%g", "root"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%G", "0"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%u", "root"); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%U", "0"); ++ ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%m", mid); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%b", bid); ++ expect(LOOKUP_SCOPE_SYSTEM, i, "%H", host); ++ ++ expect(LOOKUP_SCOPE_SYSTEM, i2, "%g", "root"); ++ expect(LOOKUP_SCOPE_SYSTEM, i2, "%G", "0"); ++ expect(LOOKUP_SCOPE_SYSTEM, i2, "%u", "root"); ++ expect(LOOKUP_SCOPE_SYSTEM, i2, "%U", "0"); ++ ++ expect(LOOKUP_SCOPE_USER, i2, "%g", group); ++ expect(LOOKUP_SCOPE_USER, i2, "%G", gid); ++ expect(LOOKUP_SCOPE_USER, i2, "%u", user); ++ expect(LOOKUP_SCOPE_USER, i2, "%U", uid); + + /* gcc-12.0.1-0.9.fc36.x86_64 insist that streq(…, NULL) is called, + * even though the call is inside of a conditional where the pointer is checked. :( */ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wnonnull" +- expect(UNIT_FILE_GLOBAL, i2, "%g", NULL); +- expect(UNIT_FILE_GLOBAL, i2, "%G", NULL); +- expect(UNIT_FILE_GLOBAL, i2, "%u", NULL); +- expect(UNIT_FILE_GLOBAL, i2, "%U", NULL); ++ expect(LOOKUP_SCOPE_GLOBAL, i2, "%g", NULL); ++ expect(LOOKUP_SCOPE_GLOBAL, i2, "%G", NULL); ++ expect(LOOKUP_SCOPE_GLOBAL, i2, "%u", NULL); ++ expect(LOOKUP_SCOPE_GLOBAL, i2, "%U", NULL); + #pragma GCC diagnostic pop + +- expect(UNIT_FILE_SYSTEM, i3, "%n", "name@inst.service"); +- expect(UNIT_FILE_SYSTEM, i3, "%N", "name@inst"); +- expect(UNIT_FILE_SYSTEM, i3, "%p", "name"); +- expect(UNIT_FILE_USER, i3, "%g", group); +- expect(UNIT_FILE_USER, i3, "%G", gid); +- expect(UNIT_FILE_USER, i3, "%u", user); +- expect(UNIT_FILE_USER, i3, "%U", uid); +- +- expect(UNIT_FILE_SYSTEM, i3, "%m", mid); +- expect(UNIT_FILE_SYSTEM, i3, "%b", bid); +- expect(UNIT_FILE_SYSTEM, i3, "%H", host); +- +- expect(UNIT_FILE_USER, i4, "%g", group); +- expect(UNIT_FILE_USER, i4, "%G", gid); +- expect(UNIT_FILE_USER, i4, "%u", user); +- expect(UNIT_FILE_USER, i4, "%U", uid); ++ expect(LOOKUP_SCOPE_SYSTEM, i3, "%n", "name@inst.service"); ++ expect(LOOKUP_SCOPE_SYSTEM, i3, "%N", "name@inst"); ++ expect(LOOKUP_SCOPE_SYSTEM, i3, "%p", "name"); ++ expect(LOOKUP_SCOPE_USER, i3, "%g", group); ++ expect(LOOKUP_SCOPE_USER, i3, "%G", gid); ++ expect(LOOKUP_SCOPE_USER, i3, "%u", user); ++ expect(LOOKUP_SCOPE_USER, i3, "%U", uid); ++ ++ expect(LOOKUP_SCOPE_SYSTEM, i3, "%m", mid); ++ expect(LOOKUP_SCOPE_SYSTEM, i3, "%b", bid); ++ expect(LOOKUP_SCOPE_SYSTEM, i3, "%H", host); ++ ++ expect(LOOKUP_SCOPE_USER, i4, "%g", group); ++ expect(LOOKUP_SCOPE_USER, i4, "%G", gid); ++ expect(LOOKUP_SCOPE_USER, i4, "%u", user); ++ expect(LOOKUP_SCOPE_USER, i4, "%U", uid); + } + + static uint64_t make_cap(int cap) { +@@ -822,7 +822,7 @@ TEST(config_parse_unit_env_file) { + _cleanup_strv_free_ char **files = NULL; + int r; + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (manager_errno_skip_test(r)) { + log_notice_errno(r, "Skipping test: manager_new: %m"); + return; +@@ -955,7 +955,7 @@ TEST(unit_is_recursive_template_dependency) { + Unit *u; + int r; + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (manager_errno_skip_test(r)) { + log_notice_errno(r, "Skipping test: manager_new: %m"); + return; +diff --git a/src/test/test-path-lookup.c b/src/test/test-path-lookup.c +index 2c30260f7b..8d25e5f7b7 100644 +--- a/src/test/test-path-lookup.c ++++ b/src/test/test-path-lookup.c +@@ -10,7 +10,7 @@ + #include "strv.h" + #include "tests.h" + +-static void test_paths_one(UnitFileScope scope) { ++static void test_paths_one(LookupScope scope) { + char template[] = "/tmp/test-path-lookup.XXXXXXX"; + + _cleanup_(lookup_paths_free) LookupPaths lp_without_env = {}; +@@ -36,9 +36,9 @@ static void test_paths_one(UnitFileScope scope) { + } + + TEST(paths) { +- test_paths_one(UNIT_FILE_SYSTEM); +- test_paths_one(UNIT_FILE_USER); +- test_paths_one(UNIT_FILE_GLOBAL); ++ test_paths_one(LOOKUP_SCOPE_SYSTEM); ++ test_paths_one(LOOKUP_SCOPE_USER); ++ test_paths_one(LOOKUP_SCOPE_GLOBAL); + } + + TEST(user_and_global_paths) { +@@ -50,8 +50,8 @@ TEST(user_and_global_paths) { + assert_se(unsetenv("XDG_DATA_DIRS") == 0); + assert_se(unsetenv("XDG_CONFIG_DIRS") == 0); + +- assert_se(lookup_paths_init(&lp_global, UNIT_FILE_GLOBAL, 0, NULL) == 0); +- assert_se(lookup_paths_init(&lp_user, UNIT_FILE_USER, 0, NULL) == 0); ++ assert_se(lookup_paths_init(&lp_global, LOOKUP_SCOPE_GLOBAL, 0, NULL) == 0); ++ assert_se(lookup_paths_init(&lp_user, LOOKUP_SCOPE_USER, 0, NULL) == 0); + g = lp_global.search_path; + u = lp_user.search_path; + +@@ -72,7 +72,7 @@ TEST(user_and_global_paths) { + log_info("+ %s", *p); + } + +-static void test_generator_binary_paths_one(UnitFileScope scope) { ++static void test_generator_binary_paths_one(LookupScope scope) { + char template[] = "/tmp/test-path-lookup.XXXXXXX"; + + _cleanup_strv_free_ char **gp_without_env = NULL; +@@ -88,13 +88,13 @@ static void test_generator_binary_paths_one(UnitFileScope scope) { + assert_se(unsetenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH") == 0); + + gp_without_env = generator_binary_paths(scope); +- env_gp_without_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false); ++ env_gp_without_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false); + +- log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user"); ++ log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user"); + STRV_FOREACH(dir, gp_without_env) + log_info(" %s", *dir); + +- log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user"); ++ log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user"); + STRV_FOREACH(dir, env_gp_without_env) + log_info(" %s", *dir); + +@@ -107,13 +107,13 @@ static void test_generator_binary_paths_one(UnitFileScope scope) { + assert_se(setenv("SYSTEMD_ENVIRONMENT_GENERATOR_PATH", systemd_env_generator_path, 1) == 0); + + gp_with_env = generator_binary_paths(scope); +- env_gp_with_env = env_generator_binary_paths(scope == UNIT_FILE_SYSTEM ? true : false); ++ env_gp_with_env = env_generator_binary_paths(scope == LOOKUP_SCOPE_SYSTEM ? true : false); + +- log_info("Generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user"); ++ log_info("Generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user"); + STRV_FOREACH(dir, gp_with_env) + log_info(" %s", *dir); + +- log_info("Environment generators dirs (%s):", scope == UNIT_FILE_SYSTEM ? "system" : "user"); ++ log_info("Environment generators dirs (%s):", scope == LOOKUP_SCOPE_SYSTEM ? "system" : "user"); + STRV_FOREACH(dir, env_gp_with_env) + log_info(" %s", *dir); + +@@ -122,8 +122,8 @@ static void test_generator_binary_paths_one(UnitFileScope scope) { + } + + TEST(generator_binary_paths) { +- test_generator_binary_paths_one(UNIT_FILE_SYSTEM); +- test_generator_binary_paths_one(UNIT_FILE_USER); ++ test_generator_binary_paths_one(LOOKUP_SCOPE_SYSTEM); ++ test_generator_binary_paths_one(LOOKUP_SCOPE_USER); + } + + DEFINE_TEST_MAIN(LOG_DEBUG); +diff --git a/src/test/test-path.c b/src/test/test-path.c +index 2690dc0aa4..7fb1f7363c 100644 +--- a/src/test/test-path.c ++++ b/src/test/test-path.c +@@ -33,7 +33,7 @@ static int setup_test(Manager **m) { + if (r == -ENOMEDIUM) + return log_tests_skipped("cgroupfs not available"); + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &tmp); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &tmp); + if (manager_errno_skip_test(r)) + return log_tests_skipped_errno(r, "manager_new"); + assert_se(r >= 0); +diff --git a/src/test/test-sched-prio.c b/src/test/test-sched-prio.c +index 35f7be491a..721c4b61a1 100644 +--- a/src/test/test-sched-prio.c ++++ b/src/test/test-sched-prio.c +@@ -30,7 +30,7 @@ int main(int argc, char *argv[]) { + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m); + if (manager_errno_skip_test(r)) + return log_tests_skipped_errno(r, "manager_new"); + assert_se(r >= 0); +diff --git a/src/test/test-socket-bind.c b/src/test/test-socket-bind.c +index c5c5477f69..b5f8eb9357 100644 +--- a/src/test/test-socket-bind.c ++++ b/src/test/test-socket-bind.c +@@ -136,7 +136,7 @@ int main(int argc, char *argv[]) { + assert_se(set_unit_path(unit_dir) >= 0); + assert_se(runtime_dir = setup_fake_runtime_dir()); + +- assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); ++ assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); + assert_se(manager_startup(m, NULL, NULL, NULL) >= 0); + + assert_se(test_socket_bind(m, "socket_bind_test.service", netcat_path, "2000", STRV_MAKE("2000"), STRV_MAKE("any")) >= 0); +diff --git a/src/test/test-specifier.c b/src/test/test-specifier.c +index dd47f0285e..71fb06963c 100644 +--- a/src/test/test-specifier.c ++++ b/src/test/test-specifier.c +@@ -46,7 +46,7 @@ TEST(specifier_escape_strv) { + static const Specifier specifier_table[] = { + COMMON_SYSTEM_SPECIFIERS, + +- COMMON_CREDS_SPECIFIERS(UNIT_FILE_USER), ++ COMMON_CREDS_SPECIFIERS(LOOKUP_SCOPE_USER), + { 'h', specifier_user_home, NULL }, + + COMMON_TMP_SPECIFIERS, +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index 261bd7412f..dffa2822e6 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -35,7 +35,7 @@ TEST(unit_file_build_name_map) { + + ids = strv_skip(saved_argv, 1); + +- assert_se(lookup_paths_init(&lp, UNIT_FILE_SYSTEM, 0, NULL) >= 0); ++ assert_se(lookup_paths_init(&lp, LOOKUP_SCOPE_SYSTEM, 0, NULL) >= 0); + + assert_se(unit_file_build_name_map(&lp, &mtime, &unit_ids, &unit_names, NULL) == 1); + +diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c +index b6137333aa..90539f108f 100644 +--- a/src/test/test-unit-name.c ++++ b/src/test/test-unit-name.c +@@ -248,7 +248,7 @@ TEST_RET(unit_printf, .sd_booted = true) { + assert_se(get_home_dir(&home) >= 0); + assert_se(get_shell(&shell) >= 0); + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (manager_errno_skip_test(r)) + return log_tests_skipped_errno(r, "manager_new"); + assert_se(r == 0); +diff --git a/src/test/test-unit-serialize.c b/src/test/test-unit-serialize.c +index 3ef15f3b1e..f84435f480 100644 +--- a/src/test/test-unit-serialize.c ++++ b/src/test/test-unit-serialize.c +@@ -31,7 +31,7 @@ TEST(deserialize_exec_command) { + _cleanup_(manager_freep) Manager *m = NULL; + int r; + +- r = manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_MINIMAL, &m); ++ r = manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_MINIMAL, &m); + if (manager_errno_skip_test(r)) { + log_notice_errno(r, "Skipping test: manager_new: %m"); + return; +diff --git a/src/test/test-watch-pid.c b/src/test/test-watch-pid.c +index 885ed802d4..8c355c1d5f 100644 +--- a/src/test/test-watch-pid.c ++++ b/src/test/test-watch-pid.c +@@ -26,7 +26,7 @@ int main(int argc, char *argv[]) { + + assert_se(runtime_dir = setup_fake_runtime_dir()); + +- assert_se(manager_new(UNIT_FILE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); ++ assert_se(manager_new(LOOKUP_SCOPE_USER, MANAGER_TEST_RUN_BASIC, &m) >= 0); + assert_se(manager_startup(m, NULL, NULL, NULL) >= 0); + + assert_se(a = unit_new(m, sizeof(Service))); +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 17b9c6ab9a..023207bc60 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -2938,7 +2938,7 @@ static int parse_line( + { 'S', specifier_directory, UINT_TO_PTR(DIRECTORY_STATE) }, + { 't', specifier_directory, UINT_TO_PTR(DIRECTORY_RUNTIME) }, + +- COMMON_CREDS_SPECIFIERS(arg_user ? UNIT_FILE_USER : UNIT_FILE_SYSTEM), ++ COMMON_CREDS_SPECIFIERS(arg_user ? LOOKUP_SCOPE_USER : LOOKUP_SCOPE_SYSTEM), + COMMON_TMP_SPECIFIERS, + {} + }; diff --git a/SOURCES/0205-core-handle-lookup-paths-being-symlinks.patch b/SOURCES/0205-core-handle-lookup-paths-being-symlinks.patch new file mode 100644 index 0000000..295b41d --- /dev/null +++ b/SOURCES/0205-core-handle-lookup-paths-being-symlinks.patch @@ -0,0 +1,89 @@ +From dc017e5c51e61ddd96d2a94f35223ac7788c8454 Mon Sep 17 00:00:00 2001 +From: Andreas Rammhold +Date: Wed, 18 Aug 2021 19:10:08 +0200 +Subject: [PATCH] core: handle lookup paths being symlinks +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +With a recent change paths leaving the statically known lookup paths would be +treated differently then those that remained within those. That was done +(AFAIK) to consistently handle alias names. Unfortunately that means that on +some distributions, especially those where /etc/ consists mostly of symlinks, +would trigger that new detection for every single unit in /etc/systemd/system. +The reason for that is that the units directory itself is already a symlink. + +Rebased-by: Zbigniew Jędrzejewski-Szmek +(cherry picked from commit 66c38cd0536c50769eba6abccf383bbaceb268ca) + +Resolves: #2082131 +--- + src/basic/unit-file.c | 41 ++++++++++++++++++++++++++++++++++++++++- + 1 file changed, 40 insertions(+), 1 deletion(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 7c1ae515e1..83c29bb25f 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -388,6 +388,7 @@ int unit_file_build_name_map( + + _cleanup_hashmap_free_ Hashmap *ids = NULL, *names = NULL; + _cleanup_set_free_free_ Set *paths = NULL; ++ _cleanup_strv_free_ char **expanded_search_path = NULL; + uint64_t timestamp_hash; + int r; + +@@ -406,6 +407,44 @@ int unit_file_build_name_map( + return log_oom(); + } + ++ /* Go over all our search paths, chase their symlinks and store the result in the ++ * expanded_search_path list. ++ * ++ * This is important for cases where any of the unit directories itself are symlinks into other ++ * directories and would therefore cause all of the unit files to be recognized as linked units. ++ * ++ * This is important for distributions such as NixOS where most paths in /etc/ are symlinks to some ++ * other location on the filesystem (e.g. into /nix/store/). ++ * ++ * Search paths are ordered by priority (highest first), and we need to maintain this order. ++ * If a resolved path is already in the list, we don't need to include. ++ * ++ * Note that we build a list that contains both the original paths and the resolved symlinks: ++ * we need the latter for the case where the directory is symlinked, as described above, and ++ * the former for the case where some unit file alias is a dangling symlink that points to one ++ * of the "original" directories (and can't be followed). ++ */ ++ STRV_FOREACH(dir, lp->search_path) { ++ _cleanup_free_ char *resolved_dir = NULL; ++ ++ r = strv_extend(&expanded_search_path, *dir); ++ if (r < 0) ++ return log_oom(); ++ ++ r = chase_symlinks(*dir, NULL, 0, &resolved_dir, NULL); ++ if (r < 0) { ++ if (r != -ENOENT) ++ log_warning_errno(r, "Failed to resolve symlink %s, ignoring: %m", *dir); ++ continue; ++ } ++ ++ if (strv_contains(expanded_search_path, resolved_dir)) ++ continue; ++ ++ if (strv_consume(&expanded_search_path, TAKE_PTR(resolved_dir)) < 0) ++ return log_oom(); ++ } ++ + STRV_FOREACH(dir, lp->search_path) { + _cleanup_closedir_ DIR *d = NULL; + +@@ -504,7 +543,7 @@ int unit_file_build_name_map( + /* We don't explicitly check for alias loops here. unit_ids_map_get() which + * limits the number of hops should be used to access the map. */ + +- r = unit_file_resolve_symlink(lp->root_dir, lp->search_path, ++ r = unit_file_resolve_symlink(lp->root_dir, expanded_search_path, + *dir, dirfd(d), de->d_name, + /* resolve_destination_target= */ false, + &dst); diff --git a/SOURCES/0206-shared-install-use-correct-cleanup-function.patch b/SOURCES/0206-shared-install-use-correct-cleanup-function.patch new file mode 100644 index 0000000..5a0e3e3 --- /dev/null +++ b/SOURCES/0206-shared-install-use-correct-cleanup-function.patch @@ -0,0 +1,27 @@ +From dc7ddca892c329ef24b7e9098134f5cae50e09a0 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 3 May 2022 01:09:21 +0900 +Subject: [PATCH] shared/install: use correct cleanup function + +Fixes #23250. + +(cherry picked from commit 0b6bf4b674a63e9951dcffbd0b95de7377038690) + +Related: #2082131 +--- + src/shared/install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index fa7bbdd93a..96d64d32bb 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2804,7 +2804,7 @@ static int normalize_linked_files( + * but operates on real unit names. For each argument we we look up the actual path + * where the unit is found. This way linked units can be reenabled successfully. */ + +- _cleanup_free_ char **files = NULL, **names = NULL; ++ _cleanup_strv_free_ char **files = NULL, **names = NULL; + int r; + + STRV_FOREACH(a, names_or_paths) { diff --git a/SOURCES/0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch b/SOURCES/0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch new file mode 100644 index 0000000..1714906 --- /dev/null +++ b/SOURCES/0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch @@ -0,0 +1,109 @@ +From 07a2159c8dc575745c967499b068209e8926ea79 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 23 Mar 2022 17:34:12 +0100 +Subject: [PATCH] udev/net_id: avoid slot based names only for single function + devices + +If we have two or more devices that share the same slot but they are +also multifunction then it is OK to use the slot information even if it +is the same for all of them. Name conflict will be avoided because we +will append function number and form names like, ens1f1, ens1f2... + +(cherry picked from commit 66425daf2c68793adf24a48a26d58add8662e83f) + +Resolves: #2073003 +--- + man/systemd.net-naming-scheme.xml | 7 ++++++- + src/shared/netif-naming-scheme.h | 31 ++++++++++++++++--------------- + src/udev/udev-builtin-net_id.c | 11 +++++++++-- + 3 files changed, 31 insertions(+), 18 deletions(-) + +diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml +index 942ef572ff..73d08b681d 100644 +--- a/man/systemd.net-naming-scheme.xml ++++ b/man/systemd.net-naming-scheme.xml +@@ -406,7 +406,12 @@ + + rhel-9.0 + +- Same as naming scheme v250. ++ Since version v247 we no longer set ++ ID_NET_NAME_SLOT if we detect that a PCI device associated with a slot is a PCI ++ bridge as that would create naming conflict when there are more child devices on that bridge. Now, ++ this is relaxed and we will use slot information to generate the name based on it but only if ++ the PCI device has multiple functions. This is safe because distinct function number is a part of ++ the device name for multifunction devices. + + + +diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h +index f765db6ef2..5c86cb4545 100644 +--- a/src/shared/netif-naming-scheme.h ++++ b/src/shared/netif-naming-scheme.h +@@ -22,20 +22,21 @@ + * OS versions, but not fully stabilize them. */ + typedef enum NamingSchemeFlags { + /* First, the individual features */ +- NAMING_SR_IOV_V = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */ +- NAMING_NPAR_ARI = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */ +- NAMING_INFINIBAND = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */ +- NAMING_ZERO_ACPI_INDEX = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */ +- NAMING_ALLOW_RERENAMES = 1 << 4, /* Allow re-renaming of devices, see #9006 */ +- NAMING_STABLE_VIRTUAL_MACS = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */ +- NAMING_NETDEVSIM = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */ +- NAMING_LABEL_NOPREFIX = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */ +- NAMING_NSPAWN_LONG_HASH = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation */ +- NAMING_BRIDGE_NO_SLOT = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */ +- NAMING_SLOT_FUNCTION_ID = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */ +- NAMING_16BIT_INDEX = 1 << 11, /* Allow full 16-bit for the onboard index */ +- NAMING_REPLACE_STRICTLY = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */ +- NAMING_XEN_VIF = 1 << 13, /* GEnerate names for Xen netfront devices */ ++ NAMING_SR_IOV_V = 1 << 0, /* Use "v" suffix for SR-IOV, see 609948c7043a */ ++ NAMING_NPAR_ARI = 1 << 1, /* Use NPAR "ARI", see 6bc04997b6ea */ ++ NAMING_INFINIBAND = 1 << 2, /* Use "ib" prefix for infiniband, see 938d30aa98df */ ++ NAMING_ZERO_ACPI_INDEX = 1 << 3, /* Use zero acpi_index field, see d81186ef4f6a */ ++ NAMING_ALLOW_RERENAMES = 1 << 4, /* Allow re-renaming of devices, see #9006 */ ++ NAMING_STABLE_VIRTUAL_MACS = 1 << 5, /* Use device name to generate MAC, see 6d3646406560 */ ++ NAMING_NETDEVSIM = 1 << 6, /* Generate names for netdevsim devices, see eaa9d507d855 */ ++ NAMING_LABEL_NOPREFIX = 1 << 7, /* Don't prepend ID_NET_LABEL_ONBOARD with interface type prefix */ ++ NAMING_NSPAWN_LONG_HASH = 1 << 8, /* Shorten nspawn interfaces by including 24bit hash, instead of simple truncation */ ++ NAMING_BRIDGE_NO_SLOT = 1 << 9, /* Don't use PCI hotplug slot information if the corresponding device is a PCI bridge */ ++ NAMING_SLOT_FUNCTION_ID = 1 << 10, /* Use function_id if present to identify PCI hotplug slots */ ++ NAMING_16BIT_INDEX = 1 << 11, /* Allow full 16-bit for the onboard index */ ++ NAMING_REPLACE_STRICTLY = 1 << 12, /* Use udev_replace_ifname() for NAME= rule */ ++ NAMING_XEN_VIF = 1 << 13, /* Generate names for Xen netfront devices */ ++ NAMING_BRIDGE_MULTIFUNCTION_SLOT = 1 << 14, /* Use PCI hotplug slot information associated with bridge, but only if PCI device is multifunction */ + + /* And now the masks that combine the features above */ + NAMING_V238 = 0, +@@ -47,7 +48,7 @@ typedef enum NamingSchemeFlags { + NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT, + NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY, + NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF, +- NAMING_RHEL_9_0 = NAMING_V250, ++ NAMING_RHEL_9_0 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT, + + EXTRA_NET_NAMING_SCHEMES + +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 65e003eb15..673ed7a7ca 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -451,8 +451,15 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) { + * devices that will try to claim the same index and that would create name + * collision. */ + if (naming_scheme_has(NAMING_BRIDGE_NO_SLOT) && is_pci_bridge(hotplug_slot_dev)) { +- log_device_debug(dev, "Not using slot information because the PCI device is a bridge."); +- return 0; ++ if (naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT) && !is_pci_multifunction(names->pcidev)) { ++ log_device_debug(dev, "Not using slot information because the PCI device associated with the hotplug slot is a bridge and the PCI device has single function."); ++ return 0; ++ } ++ ++ if (!naming_scheme_has(NAMING_BRIDGE_MULTIFUNCTION_SLOT)) { ++ log_device_debug(dev, "Not using slot information because the PCI device is a bridge."); ++ return 0; ++ } + } + + break; diff --git a/SOURCES/0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch b/SOURCES/0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch new file mode 100644 index 0000000..b406c4a --- /dev/null +++ b/SOURCES/0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch @@ -0,0 +1,489 @@ +From 40806a5f552c8d223d1d7ff1878dcf57e4d817c5 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Wed, 1 Jun 2022 08:56:08 +0900 +Subject: [PATCH] test: import logind test from debian/ubuntu test suite + +(cherry picked from commit 9c94ab0f6ff22da4278a6e9a93ddc480607c55ac) + +Related: #2087652 +--- + test/TEST-35-LOGIN/Makefile | 1 + + test/TEST-35-LOGIN/test.sh | 10 + + test/test-functions | 8 + + test/units/testsuite-35.service | 10 + + test/units/testsuite-35.sh | 379 ++++++++++++++++++++++++++++++++ + 5 files changed, 408 insertions(+) + create mode 120000 test/TEST-35-LOGIN/Makefile + create mode 100755 test/TEST-35-LOGIN/test.sh + create mode 100644 test/units/testsuite-35.service + create mode 100755 test/units/testsuite-35.sh + +diff --git a/test/TEST-35-LOGIN/Makefile b/test/TEST-35-LOGIN/Makefile +new file mode 120000 +index 0000000000..e9f93b1104 +--- /dev/null ++++ b/test/TEST-35-LOGIN/Makefile +@@ -0,0 +1 @@ ++../TEST-01-BASIC/Makefile +\ No newline at end of file +diff --git a/test/TEST-35-LOGIN/test.sh b/test/TEST-35-LOGIN/test.sh +new file mode 100755 +index 0000000000..9762410fa3 +--- /dev/null ++++ b/test/TEST-35-LOGIN/test.sh +@@ -0,0 +1,10 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -e ++ ++TEST_DESCRIPTION="LOGIN" ++ ++# shellcheck source=test/test-functions ++. "${TEST_BASE_DIR:?}/test-functions" ++ ++do_test "$@" +diff --git a/test/test-functions b/test/test-functions +index 98efd047d7..d71e2a3328 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -165,10 +165,12 @@ BASICTOOLS=( + mv + nc + nproc ++ pkill + readlink + rev + rm + rmdir ++ rmmod + sed + seq + setfattr +@@ -193,6 +195,8 @@ BASICTOOLS=( + umount + uname + unshare ++ useradd ++ userdel + wc + xargs + xzcat +@@ -921,6 +925,8 @@ install_modules() { + instmods vfat + instmods nls_ascii =nls + instmods dummy ++ # for TEST-35-LOGIN ++ instmods scsi_debug uinput + + if get_bool "$LOOKS_LIKE_SUSE"; then + instmods ext4 +@@ -1702,6 +1708,8 @@ install_basic_tools() { + image_install -o sushell + # in Debian ldconfig is just a shell script wrapper around ldconfig.real + image_install -o ldconfig.real ++ # for TEST-35-LOGIN ++ image_install -o evemu-device evemu-event + } + + install_debug_tools() { +diff --git a/test/units/testsuite-35.service b/test/units/testsuite-35.service +new file mode 100644 +index 0000000000..556a57a384 +--- /dev/null ++++ b/test/units/testsuite-35.service +@@ -0,0 +1,10 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++[Unit] ++Description=TEST-35-LOGIN ++ ++[Service] ++ExecStartPre=rm -f /failed /testok ++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh ++StandardOutput=journal+console ++StandardError=journal+console ++Type=oneshot +diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh +new file mode 100755 +index 0000000000..0a7198c3fe +--- /dev/null ++++ b/test/units/testsuite-35.sh +@@ -0,0 +1,379 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -eux ++set -o pipefail ++ ++test_enable_debug() { ++ mkdir -p /run/systemd/system/systemd-logind.service.d ++ cat >/run/systemd/system/systemd-logind.service.d/debug.conf </run/systemd/logind.conf.d/kill-user-processes.conf <&2 ++ exit 1 ++ fi ++ ++ cat >/run/systemd/logind.conf.d/kill-user-processes.conf <&2 ++ exit 1 ++ fi ++ ++ rm -rf /run/systemd/logind.conf.d ++} ++ ++test_started() { ++ systemctl restart systemd-logind.service ++ ++ # should start at boot, not with D-BUS activation ++ LOGINDPID=$(systemctl show systemd-logind.service -p ExecMainPID --value) ++ ++ # loginctl should succeed ++ loginctl --no-pager ++} ++ ++# args: ++wait_suspend() { ++ timeout="$1" ++ while [[ $timeout -gt 0 && ! -e /run/suspend.flag ]]; do ++ sleep 1 ++ timeout=$((timeout - 1)) ++ done ++ if [[ ! -e /run/suspend.flag ]]; then ++ echo "closing lid did not cause suspend" >&2 ++ exit 1 ++ fi ++ rm /run/suspend.flag ++} ++ ++test_suspend_tear_down() { ++ set +e ++ ++ kill "$KILL_PID" ++} ++ ++test_suspend_on_lid() { ++ if systemd-detect-virt --quiet --container; then ++ echo "Skipping suspend test in container" ++ return ++ fi ++ if ! grep -s -q mem /sys/power/state; then ++ echo "suspend not supported on this testbed, skipping" ++ return ++ fi ++ if ! command -v evemu-device &>/dev/null; then ++ echo "command evemu-device not found, skipping" ++ return ++ fi ++ if ! command -v evemu-event &>/dev/null; then ++ echo "command evemu-event not found, skipping" ++ return ++ fi ++ ++ KILL_PID= ++ trap test_suspend_tear_down EXIT ++ ++ # create fake suspend ++ mkdir -p /run/systemd/system/systemd-suspend.service.d ++ cat >/run/systemd/system/systemd-suspend.service.d/override.conf </run/udev/rules.d/70-logindtest-lid.rules </run/lidswitch.evemu <&2 ++ exit 1 ++ fi ++ INPUT_NAME=${INPUT_NAME%/device/name} ++ LID_DEV=/dev/${INPUT_NAME#/sys/class/} ++ udevadm info --wait-for-initialization=10s "$LID_DEV" ++ udevadm settle ++ ++ # close lid ++ evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 1 ++ # need to wait for 30s suspend inhibition after boot ++ wait_suspend 31 ++ # open lid again ++ evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 0 ++ ++ # waiting for 30s inhibition time between suspends ++ sleep 30 ++ ++ # now closing lid should cause instant suspend ++ evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 1 ++ wait_suspend 2 ++ evemu-event "$LID_DEV" --sync --type 5 --code 0 --value 0 ++ ++ P=$(systemctl show systemd-logind.service -p ExecMainPID --value) ++ if [[ "$P" != "$LOGINDPID" ]]; then ++ echo "logind crashed" >&2 ++ exit 1 ++ fi ++ ++ test_suspend_tear_down ++ trap - EXIT ++} ++ ++test_shutdown() { ++ # scheduled shutdown with wall message ++ shutdown 2>&1 ++ sleep 5 ++ shutdown -c || : ++ # logind should still be running ++ P=$(systemctl show systemd-logind.service -p ExecMainPID --value) ++ if [[ "$P" != "$LOGINDPID" ]]; then ++ echo "logind crashed" >&2 ++ exit 1 ++ fi ++ ++ # scheduled shutdown without wall message ++ shutdown --no-wall 2>&1 ++ sleep 5 ++ shutdown -c --no-wall || true ++ P=$(systemctl show systemd-logind.service -p ExecMainPID --value) ++ if [[ "$P" != "$LOGINDPID" ]]; then ++ echo "logind crashed" >&2 ++ exit 1 ++ fi ++} ++ ++test_session_tear_down() { ++ set +e ++ ++ rm -f /run/udev/rules.d/70-logindtest-scsi_debug-user.rules ++ udevadm control --reload ++ ++ systemctl stop getty@tty2.service ++ rm -rf /run/systemd/system/getty@tty2.service.d ++ systemctl daemon-reload ++ ++ pkill -u logind-test-user ++ userdel logind-test-user ++ ++ rmmod scsi_debug ++} ++ ++check_session() { ++ loginctl ++ if [[ $(loginctl --no-legend | grep -c "logind-test-user") != 1 ]]; then ++ echo "no session or multile sessions for logind-test-user." >&2 ++ return 1 ++ fi ++ ++ SEAT=$(loginctl --no-legend | grep 'logind-test-user *seat' | awk '{ print $4 }') ++ if [[ -z "$SEAT" ]]; then ++ echo "no seat found for user logind-test-user" >&2 ++ return 1 ++ fi ++ ++ SESSION=$(loginctl --no-legend | grep "logind-test-user" | awk '{ print $1 }') ++ if [[ -z "$SESSION" ]]; then ++ echo "no session found for user logind-test-user" >&2 ++ return 1 ++ fi ++ ++ loginctl session-status "$SESSION" ++ loginctl session-status "$SESSION" | grep -q "Unit: session-${SESSION}\.scope" ++ LEADER_PID=$(loginctl session-status "$SESSION" | grep "Leader:" | awk '{ print $2 }') ++ if [[ -z "$LEADER_PID" ]]; then ++ echo "cannot found leader process for session $SESSION" >&2 ++ return 1 ++ fi ++ ++ # cgroup v1: "1:name=systemd:/user.slice/..."; unified hierarchy: "0::/user.slice" ++ if ! grep -q -E '(name=systemd|^0:):.*session.*scope' /proc/"$LEADER_PID"/cgroup; then ++ echo "FAIL: process $LEADER_PID is not in the session cgroup" >&2 ++ cat /proc/self/cgroup ++ return 1 ++ fi ++} ++ ++test_session() { ++ if systemd-detect-virt --quiet --container; then ++ echo " * Skipping ACL tests in container" ++ return ++ fi ++ ++ trap test_session_tear_down EXIT ++ ++ # add user ++ useradd -s /bin/bash logind-test-user ++ ++ # login with the test user to start a session ++ mkdir -p /run/systemd/system/getty@tty2.service.d ++ cat >/run/systemd/system/getty@tty2.service.d/override.conf <&2 ++ exit 1 ++ fi ++ ++ # we use scsi_debug to create new devices which we can put ACLs on ++ # tell udev about the tagging, so that logind can pick it up ++ mkdir -p /run/udev/rules.d ++ cat >/run/udev/rules.d/70-logindtest-scsi_debug-user.rules </dev/null); then ++ break ++ fi ++ done ++ if [[ ! -b "$dev" ]]; then ++ echo "cannot find suitable scsi block device" >&2 ++ exit 1 ++ fi ++ udevadm settle ++ udevadm info "$dev" ++ ++ # trigger logind and activate session ++ loginctl activate "$SESSION" ++ ++ # check ACL ++ sleep 1 ++ if ! getfacl -p "$dev" | grep -q "user:logind-test-user:rw-"; then ++ echo "$dev has no ACL for user logind-test-user" >&2 ++ getfacl -p "$dev" >&2 ++ exit 1 ++ fi ++ ++ # hotplug: new device appears while logind is running ++ rmmod scsi_debug ++ modprobe scsi_debug ++ for ((i=0;i<30;i++)); do ++ if (( i != 0)); then sleep 1; fi ++ if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then ++ break ++ fi ++ done ++ if [[ ! -b "$dev" ]]; then ++ echo "cannot find suitable scsi block device" >&2 ++ exit 1 ++ fi ++ udevadm settle ++ ++ # check ACL ++ sleep 1 ++ if ! getfacl -p "$dev" | grep -q "user:logind-test-user:rw-"; then ++ echo "$dev has no ACL for user logind-test-user" >&2 ++ getfacl -p "$dev" >&2 ++ exit 1 ++ fi ++ ++ test_session_tear_down ++ trap - EXIT ++} ++ ++: >/failed ++ ++test_enable_debug ++test_properties ++test_started ++test_suspend_on_lid ++test_shutdown ++test_session ++ ++touch /testok ++rm /failed diff --git a/SOURCES/0209-test-drop-redundant-IMAGE_NAME.patch b/SOURCES/0209-test-drop-redundant-IMAGE_NAME.patch new file mode 100644 index 0000000..0e46999 --- /dev/null +++ b/SOURCES/0209-test-drop-redundant-IMAGE_NAME.patch @@ -0,0 +1,52 @@ +From 41f1f6e87bd9bed458e5391587f1e1b671d383bd Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Fri, 10 Jun 2022 12:31:10 +0900 +Subject: [PATCH] test: drop redundant IMAGE_NAME= + +If it is not specified, then "default" will be used. + +(cherry picked from commit 3d52219390fa2d87938d99ec3bf71e10e101ded6) + +Related: #2087652 +--- + test/TEST-03-JOBS/test.sh | 1 - + test/TEST-17-UDEV/test.sh | 1 - + test/TEST-64-UDEV-STORAGE/test.sh | 1 - + 3 files changed, 3 deletions(-) + +diff --git a/test/TEST-03-JOBS/test.sh b/test/TEST-03-JOBS/test.sh +index f827f90865..6a8d3a8a11 100755 +--- a/test/TEST-03-JOBS/test.sh ++++ b/test/TEST-03-JOBS/test.sh +@@ -4,7 +4,6 @@ set -e + + TEST_DESCRIPTION="Job-related tests" + TEST_NO_QEMU=1 +-IMAGE_NAME="default" + + # shellcheck source=test/test-functions + . "${TEST_BASE_DIR:?}/test-functions" +diff --git a/test/TEST-17-UDEV/test.sh b/test/TEST-17-UDEV/test.sh +index 079ecfd629..9d91eee204 100755 +--- a/test/TEST-17-UDEV/test.sh ++++ b/test/TEST-17-UDEV/test.sh +@@ -3,7 +3,6 @@ + set -e + + TEST_DESCRIPTION="UDEV" +-IMAGE_NAME="default" + TEST_NO_NSPAWN=1 + + # shellcheck source=test/test-functions +diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh +index c360c8b661..2a5b5b2dd3 100755 +--- a/test/TEST-64-UDEV-STORAGE/test.sh ++++ b/test/TEST-64-UDEV-STORAGE/test.sh +@@ -9,7 +9,6 @@ + set -e + + TEST_DESCRIPTION="systemd-udev storage tests" +-IMAGE_NAME="default" + TEST_NO_NSPAWN=1 + # Save only journals of failing test cases by default (to conserve space) + TEST_SAVE_JOURNAL="${TEST_SAVE_JOURNAL:-fail}" diff --git a/SOURCES/0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch b/SOURCES/0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch new file mode 100644 index 0000000..5e6fad5 --- /dev/null +++ b/SOURCES/0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch @@ -0,0 +1,363 @@ +From 014a660c937c1c5ebfc05667466a16b44e446c60 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Fri, 10 Jun 2022 13:55:54 +0900 +Subject: [PATCH] test: import timedated test from debian/ubuntu test suite + +(cherry picked from commit 759ed0a2533da8840dea315d07f92e6bb0272cdd) + +Related: #2087652 +--- + test/TEST-45-TIMEDATE/Makefile | 1 + + test/TEST-45-TIMEDATE/test.sh | 10 ++ + test/units/assert.sh | 44 ++++++ + test/units/testsuite-45.service | 10 ++ + test/units/testsuite-45.sh | 246 ++++++++++++++++++++++++++++++++ + 5 files changed, 311 insertions(+) + create mode 120000 test/TEST-45-TIMEDATE/Makefile + create mode 100755 test/TEST-45-TIMEDATE/test.sh + create mode 100644 test/units/assert.sh + create mode 100644 test/units/testsuite-45.service + create mode 100755 test/units/testsuite-45.sh + +diff --git a/test/TEST-45-TIMEDATE/Makefile b/test/TEST-45-TIMEDATE/Makefile +new file mode 120000 +index 0000000000..e9f93b1104 +--- /dev/null ++++ b/test/TEST-45-TIMEDATE/Makefile +@@ -0,0 +1 @@ ++../TEST-01-BASIC/Makefile +\ No newline at end of file +diff --git a/test/TEST-45-TIMEDATE/test.sh b/test/TEST-45-TIMEDATE/test.sh +new file mode 100755 +index 0000000000..27edf4a3b9 +--- /dev/null ++++ b/test/TEST-45-TIMEDATE/test.sh +@@ -0,0 +1,10 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -e ++ ++TEST_DESCRIPTION="test timedated" ++ ++# shellcheck source=test/test-functions ++. "${TEST_BASE_DIR:?}/test-functions" ++ ++do_test "$@" +diff --git a/test/units/assert.sh b/test/units/assert.sh +new file mode 100644 +index 0000000000..db67dad268 +--- /dev/null ++++ b/test/units/assert.sh +@@ -0,0 +1,44 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++ ++# utility functions for shell tests ++ ++assert_true() { ++ local rc ++ ++ set +e ++ "$@" ++ rc=$? ++ set -e ++ if [[ "$rc" != "0" ]]; then ++ echo "FAIL: command '$*' failed with exit code $rc" >&2 ++ exit 1 ++ fi ++} ++ ++ ++assert_eq() { ++ if [[ "$1" != "$2" ]]; then ++ echo "FAIL: expected: '$2' actual: '$1'" >&2 ++ exit 1 ++ fi ++} ++ ++assert_in() { ++ if ! echo "$2" | grep -q "$1"; then ++ echo "FAIL: '$1' not found in:" >&2 ++ echo "$2" >&2 ++ exit 1 ++ fi ++} ++ ++assert_rc() { ++ local exp=$1 ++ local rc ++ shift ++ set +e ++ "$@" ++ rc=$? ++ set -e ++ assert_eq "$rc" "$exp" ++} +diff --git a/test/units/testsuite-45.service b/test/units/testsuite-45.service +new file mode 100644 +index 0000000000..79c0a6f117 +--- /dev/null ++++ b/test/units/testsuite-45.service +@@ -0,0 +1,10 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++[Unit] ++Description=TEST-45-TIMEDATE ++ ++[Service] ++ExecStartPre=rm -f /failed /testok ++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh ++StandardOutput=journal+console ++StandardError=journal+console ++Type=oneshot +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +new file mode 100755 +index 0000000000..ac7860dccd +--- /dev/null ++++ b/test/units/testsuite-45.sh +@@ -0,0 +1,246 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++ ++set -eux ++set -o pipefail ++ ++# shellcheck source=test/units/assert.sh ++. "$(dirname "$0")"/assert.sh ++ ++test_timezone() { ++ local ORIG_TZ= ++ ++ if [[ -L /etc/localtime ]]; then ++ ORIG_TZ=$(readlink /etc/localtime | sed 's#^.*zoneinfo/##') ++ echo "original tz: $ORIG_TZ" ++ fi ++ ++ echo 'timedatectl works' ++ assert_in "Local time:" "$(timedatectl --no-pager)" ++ ++ echo 'change timezone' ++ assert_eq "$(timedatectl --no-pager set-timezone Europe/Kiev 2>&1)" "" ++ assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "Europe/Kiev" ++ assert_in "Time.*zone: Europe/Kiev (EEST, +" "$(timedatectl --no-pager)" ++ ++ if [[ -n "$ORIG_TZ" ]]; then ++ echo 'reset timezone to original' ++ assert_eq "$(timedatectl --no-pager set-timezone "$ORIG_TZ" 2>&1)" "" ++ assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "$ORIG_TZ" ++ fi ++} ++ ++restore_adjtime() { ++ if [[ -e /etc/adjtime.bak ]]; then ++ mv /etc/adjtime.bak /etc/adjtime ++ else ++ rm /etc/adjtime ++ fi ++} ++ ++check_adjtime_not_exist() { ++ if [[ -e /etc/adjtime ]]; then ++ echo "/etc/adjtime unexpectedly exists." >&2 ++ exit 1 ++ fi ++} ++ ++test_adjtime() { ++ # test setting UTC vs. LOCAL in /etc/adjtime ++ if [[ -e /etc/adjtime ]]; then ++ mv /etc/adjtime /etc/adjtime.bak ++ fi ++ ++ trap restore_adjtime EXIT ++ ++ echo 'no adjtime file' ++ rm -f /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ ++ echo 'UTC set in adjtime file' ++ printf '0.0 0 0\n0\nUTC\n' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++UTC" ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ echo 'non-zero values in adjtime file' ++ printf '0.1 123 0\n0\nLOCAL\n' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ assert_eq "$(cat /etc/adjtime)" "0.1 123 0 ++0 ++UTC" ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.1 123 0 ++0 ++LOCAL" ++ ++ echo 'fourth line adjtime file' ++ printf '0.0 0 0\n0\nLOCAL\nsomethingelse\n' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++UTC ++somethingelse" ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL ++somethingelse" ++ ++ echo 'no final newline in adjtime file' ++ printf '0.0 0 0\n0\nUTC' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ printf '0.0 0 0\n0\nUTC' > /etc/adjtime ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ echo 'only one line in adjtime file' ++ printf '0.0 0 0\n' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ printf '0.0 0 0\n' > /etc/adjtime ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ echo 'only one line in adjtime file, no final newline' ++ printf '0.0 0 0' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ printf '0.0 0 0' > /etc/adjtime ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ echo 'only two lines in adjtime file' ++ printf '0.0 0 0\n0\n' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ printf '0.0 0 0\n0\n' > /etc/adjtime ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ echo 'only two lines in adjtime file, no final newline' ++ printf '0.0 0 0\n0' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ printf '0.0 0 0\n0' > /etc/adjtime ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ echo 'unknown value in 3rd line of adjtime file' ++ printf '0.0 0 0\n0\nFOO\n' > /etc/adjtime ++ timedatectl set-local-rtc 0 ++ check_adjtime_not_exist ++ printf '0.0 0 0\n0\nFOO\n' > /etc/adjtime ++ timedatectl set-local-rtc 1 ++ assert_eq "$(cat /etc/adjtime)" "0.0 0 0 ++0 ++LOCAL" ++ ++ restore_adjtime ++ trap - EXIT ++} ++ ++assert_ntp() { ++ assert_eq "$(busctl get-property org.freedesktop.timedate1 /org/freedesktop/timedate1 org.freedesktop.timedate1 NTP)" "b $1" ++} ++ ++start_mon() { ++ busctl monitor --match="type='signal',sender=org.freedesktop.timedate1,member='PropertiesChanged',path=/org/freedesktop/timedate1" >"$mon" & ++ MONPID=$! ++} ++ ++wait_mon() { ++ for ((i=0;i<10;i++)); do ++ if (( i != 0 )); then sleep 1; fi ++ if grep -q "$1" "$mon"; then break; fi ++ done ++ assert_in "$2" "$(cat "$mon")" ++ kill "$MONPID" ++ wait "$MONPID" 2>/dev/null || true ++} ++ ++test_ntp() { ++ # timesyncd has ConditionVirtualization=!container by default; drop/mock that for testing ++ if systemd-detect-virt --container --quiet; then ++ systemctl disable --quiet --now systemd-timesyncd ++ mkdir -p /run/systemd/system/systemd-timesyncd.service.d ++ cat >/run/systemd/system/systemd-timesyncd.service.d/container.conf </failed ++ ++test_timezone ++test_adjtime ++test_ntp ++ ++touch /testok ++rm /failed diff --git a/SOURCES/0211-test-introduce-assert_not_in-helper-function.patch b/SOURCES/0211-test-introduce-assert_not_in-helper-function.patch new file mode 100644 index 0000000..e712fb8 --- /dev/null +++ b/SOURCES/0211-test-introduce-assert_not_in-helper-function.patch @@ -0,0 +1,107 @@ +From e7b657694adbd03403f2ebbe089a6d5baa58d7d5 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:00:00 +0900 +Subject: [PATCH] test: introduce assert_not_in() helper function + +This also silence assertions, and replace grep with bash's regular +expression match. + +(cherry picked from commit d170b47535e2acc8abd1af85ff8685107fdd490f) + +Related: #2087652 +--- + test/units/assert.sh | 48 ++++++++++++++++++++++++-------------- + test/units/testsuite-45.sh | 2 +- + 2 files changed, 32 insertions(+), 18 deletions(-) + +diff --git a/test/units/assert.sh b/test/units/assert.sh +index db67dad268..66357ab688 100644 +--- a/test/units/assert.sh ++++ b/test/units/assert.sh +@@ -3,42 +3,56 @@ + + # utility functions for shell tests + +-assert_true() { ++assert_true() {( + local rc + +- set +e ++ set +ex ++ + "$@" + rc=$? +- set -e +- if [[ "$rc" != "0" ]]; then ++ if [[ $rc -ne 0 ]]; then + echo "FAIL: command '$*' failed with exit code $rc" >&2 + exit 1 + fi +-} ++)} ++ + ++assert_eq() {( ++ set +ex + +-assert_eq() { +- if [[ "$1" != "$2" ]]; then ++ if [[ "${1?}" != "${2?}" ]]; then + echo "FAIL: expected: '$2' actual: '$1'" >&2 + exit 1 + fi +-} ++)} ++ ++assert_in() {( ++ set +ex + +-assert_in() { +- if ! echo "$2" | grep -q "$1"; then ++ if ! [[ "${2?}" =~ ${1?} ]]; then + echo "FAIL: '$1' not found in:" >&2 + echo "$2" >&2 + exit 1 + fi +-} ++)} ++ ++assert_not_in() {( ++ set +ex ++ ++ if [[ "${2?}" =~ ${1?} ]]; then ++ echo "FAIL: '$1' found in:" >&2 ++ echo "$2" >&2 ++ exit 1 ++ fi ++)} ++ ++assert_rc() {( ++ local rc exp="${1?}" ++ ++ set +ex + +-assert_rc() { +- local exp=$1 +- local rc + shift +- set +e + "$@" + rc=$? +- set -e + assert_eq "$rc" "$exp" +-} ++)} +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +index ac7860dccd..d0d1ef2eb4 100755 +--- a/test/units/testsuite-45.sh ++++ b/test/units/testsuite-45.sh +@@ -21,7 +21,7 @@ test_timezone() { + echo 'change timezone' + assert_eq "$(timedatectl --no-pager set-timezone Europe/Kiev 2>&1)" "" + assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "Europe/Kiev" +- assert_in "Time.*zone: Europe/Kiev (EEST, +" "$(timedatectl --no-pager)" ++ assert_in "Time zone: Europe/Kiev \(EEST, \+0[0-9]00\)" "$(timedatectl)" + + if [[ -n "$ORIG_TZ" ]]; then + echo 'reset timezone to original' diff --git a/SOURCES/0212-test-drop-unnecessary-no-pager-option.patch b/SOURCES/0212-test-drop-unnecessary-no-pager-option.patch new file mode 100644 index 0000000..fc75c97 --- /dev/null +++ b/SOURCES/0212-test-drop-unnecessary-no-pager-option.patch @@ -0,0 +1,53 @@ +From 740dd8e0a0c503980894968006a43fa05039e299 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:01:00 +0900 +Subject: [PATCH] test: drop unnecessary --no-pager option + +(cherry picked from commit 8ed2103306fa6b3dcaf8d810e65e8957553ef752) + +Related: #2087652 +--- + test/units/testsuite-45.sh | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +index d0d1ef2eb4..2069d2437f 100755 +--- a/test/units/testsuite-45.sh ++++ b/test/units/testsuite-45.sh +@@ -25,7 +25,7 @@ test_timezone() { + + if [[ -n "$ORIG_TZ" ]]; then + echo 'reset timezone to original' +- assert_eq "$(timedatectl --no-pager set-timezone "$ORIG_TZ" 2>&1)" "" ++ assert_eq "$(timedatectl set-timezone "$ORIG_TZ" 2>&1)" "" + assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "$ORIG_TZ" + fi + } +@@ -206,11 +206,11 @@ EOF + timedatectl set-ntp false + for ((i=0;i<10;i++)); do + if (( i != 0 )); then sleep 1; fi +- if [[ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then ++ if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then + break; + fi + done +- assert_eq "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" "ActiveState=inactive" ++ assert_eq "$(systemctl show systemd-timesyncd --property ActiveState)" "ActiveState=inactive" + assert_ntp "false" + assert_rc 3 systemctl is-active --quiet systemd-timesyncd + +@@ -221,11 +221,11 @@ EOF + assert_ntp "true" + for ((i=0;i<10;i++)); do + if (( i != 0 )); then sleep 1; fi +- if [[ "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then ++ if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then + break; + fi + done +- assert_eq "$(systemctl --no-pager show systemd-timesyncd --property ActiveState)" "ActiveState=active" ++ assert_eq "$(systemctl show systemd-timesyncd --property ActiveState)" "ActiveState=active" + assert_rc 0 systemctl is-active --quiet systemd-timesyncd + + echo 're-disable NTP' diff --git a/SOURCES/0213-test-support-debian-ubuntu-specific-timezone-config-.patch b/SOURCES/0213-test-support-debian-ubuntu-specific-timezone-config-.patch new file mode 100644 index 0000000..a82f54a --- /dev/null +++ b/SOURCES/0213-test-support-debian-ubuntu-specific-timezone-config-.patch @@ -0,0 +1,64 @@ +From ce027f67d29066f188891c94447e50c12168a693 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:02:00 +0900 +Subject: [PATCH] test: support debian/ubuntu specific timezone config file + +(cherry picked from commit aab61a8c990a54703ae70ca951d0502860010267) + +Related: #2087652 +--- + test/units/testsuite-45.sh | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +index 2069d2437f..d0f9dd9461 100755 +--- a/test/units/testsuite-45.sh ++++ b/test/units/testsuite-45.sh +@@ -7,9 +7,24 @@ set -o pipefail + # shellcheck source=test/units/assert.sh + . "$(dirname "$0")"/assert.sh + ++restore_timezone() { ++ if [[ -f /tmp/timezone.bak ]]; then ++ mv /tmp/timezone.bak /etc/timezone ++ else ++ rm -f /etc/timezone ++ fi ++} ++ + test_timezone() { + local ORIG_TZ= + ++ # Debian/Ubuntu specific file ++ if [[ -f /etc/timezone ]]; then ++ mv /etc/timezone /tmp/timezone.bak ++ fi ++ ++ trap restore_timezone EXIT ++ + if [[ -L /etc/localtime ]]; then + ORIG_TZ=$(readlink /etc/localtime | sed 's#^.*zoneinfo/##') + echo "original tz: $ORIG_TZ" +@@ -21,13 +36,22 @@ test_timezone() { + echo 'change timezone' + assert_eq "$(timedatectl --no-pager set-timezone Europe/Kiev 2>&1)" "" + assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "Europe/Kiev" ++ if [[ -f /etc/timezone ]]; then ++ assert_eq "$(cat /etc/timezone)" "Europe/Kiev" ++ fi + assert_in "Time zone: Europe/Kiev \(EEST, \+0[0-9]00\)" "$(timedatectl)" + + if [[ -n "$ORIG_TZ" ]]; then + echo 'reset timezone to original' + assert_eq "$(timedatectl set-timezone "$ORIG_TZ" 2>&1)" "" + assert_eq "$(readlink /etc/localtime | sed 's#^.*zoneinfo/##')" "$ORIG_TZ" ++ if [[ -f /etc/timezone ]]; then ++ assert_eq "$(cat /etc/timezone)" "$ORIG_TZ" ++ fi + fi ++ ++ restore_timezone ++ trap - EXIT + } + + restore_adjtime() { diff --git a/SOURCES/0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch b/SOURCES/0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch new file mode 100644 index 0000000..86206a1 --- /dev/null +++ b/SOURCES/0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch @@ -0,0 +1,117 @@ +From b9724ced388bef0a53be49c4ce45db2c8352f186 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:03:00 +0900 +Subject: [PATCH] test: import hostnamed tests from debian/ubuntu test suite + +(cherry picked from commit 39f4546199d6394014cf79b76b9ff22d3c149c54) + +Related: #2087652 +--- + test/TEST-71-HOSTNAME/Makefile | 1 + + test/TEST-71-HOSTNAME/test.sh | 10 +++++++ + test/units/testsuite-71.service | 10 +++++++ + test/units/testsuite-71.sh | 52 +++++++++++++++++++++++++++++++++ + 4 files changed, 73 insertions(+) + create mode 120000 test/TEST-71-HOSTNAME/Makefile + create mode 100755 test/TEST-71-HOSTNAME/test.sh + create mode 100644 test/units/testsuite-71.service + create mode 100755 test/units/testsuite-71.sh + +diff --git a/test/TEST-71-HOSTNAME/Makefile b/test/TEST-71-HOSTNAME/Makefile +new file mode 120000 +index 0000000000..e9f93b1104 +--- /dev/null ++++ b/test/TEST-71-HOSTNAME/Makefile +@@ -0,0 +1 @@ ++../TEST-01-BASIC/Makefile +\ No newline at end of file +diff --git a/test/TEST-71-HOSTNAME/test.sh b/test/TEST-71-HOSTNAME/test.sh +new file mode 100755 +index 0000000000..7b3d2d12d4 +--- /dev/null ++++ b/test/TEST-71-HOSTNAME/test.sh +@@ -0,0 +1,10 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -e ++ ++TEST_DESCRIPTION="test hostnamed" ++ ++# shellcheck source=test/test-functions ++. "${TEST_BASE_DIR:?}/test-functions" ++ ++do_test "$@" +diff --git a/test/units/testsuite-71.service b/test/units/testsuite-71.service +new file mode 100644 +index 0000000000..019e8bff24 +--- /dev/null ++++ b/test/units/testsuite-71.service +@@ -0,0 +1,10 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++[Unit] ++Description=TEST-71-HOSTNAME ++ ++[Service] ++ExecStartPre=rm -f /failed /testok ++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh ++StandardOutput=journal+console ++StandardError=journal+console ++Type=oneshot +diff --git a/test/units/testsuite-71.sh b/test/units/testsuite-71.sh +new file mode 100755 +index 0000000000..34fcaad961 +--- /dev/null ++++ b/test/units/testsuite-71.sh +@@ -0,0 +1,52 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++ ++set -eux ++set -o pipefail ++ ++# shellcheck source=test/units/assert.sh ++. "$(dirname "$0")"/assert.sh ++ ++restore_hostname() { ++ if [[ -e /tmp/hostname.bak ]]; then ++ mv /tmp/hostname.bak /etc/hostname ++ else ++ rm -f /etc/hostname ++ fi ++} ++ ++test_hostname() { ++ local orig= ++ ++ if [[ -f /etc/hostname ]]; then ++ cp /etc/hostname /tmp/hostname.bak ++ orig=$(cat /etc/hostname) ++ fi ++ ++ trap restore_hostname RETURN ++ ++ # should activate daemon and work ++ if [[ -n "$orig" ]]; then ++ assert_in "Static hostname: $orig" "$(hostnamectl)" ++ fi ++ assert_in "Kernel: $(uname -s) $(uname -r)" "$(hostnamectl)" ++ ++ # change hostname ++ assert_rc 0 hostnamectl set-hostname testhost ++ assert_eq "$(cat /etc/hostname)" "testhost" ++ assert_in "Static hostname: testhost" "$(hostnamectl)" ++ ++ if [[ -n "$orig" ]]; then ++ # reset to original ++ assert_rc 0 hostnamectl set-hostname "$orig" ++ assert_eq "$(cat /etc/hostname)" "$orig" ++ assert_in "Static hostname: $orig" "$(hostnamectl)" ++ fi ++} ++ ++: >/failed ++ ++test_hostname ++ ++touch /testok ++rm /failed diff --git a/SOURCES/0215-locale-util-fix-memleak-on-failure.patch b/SOURCES/0215-locale-util-fix-memleak-on-failure.patch new file mode 100644 index 0000000..13a03f5 --- /dev/null +++ b/SOURCES/0215-locale-util-fix-memleak-on-failure.patch @@ -0,0 +1,44 @@ +From 97c96647418ffbadf3d964d76a5f54a9c54535c1 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:04:00 +0900 +Subject: [PATCH] locale-util: fix memleak on failure + +(cherry picked from commit 065058e63b566e21af737150ecd12bff57b97124) + +Related: #2087652 +--- + src/basic/locale-util.c | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c +index 7f1a2f15f7..abbebc7666 100644 +--- a/src/basic/locale-util.c ++++ b/src/basic/locale-util.c +@@ -156,7 +156,7 @@ static int add_locales_from_archive(Set *locales) { + return r; + } + +-static int add_locales_from_libdir (Set *locales) { ++static int add_locales_from_libdir(Set *locales) { + _cleanup_closedir_ DIR *dir = NULL; + int r; + +@@ -183,7 +183,7 @@ static int add_locales_from_libdir (Set *locales) { + } + + int get_locales(char ***ret) { +- _cleanup_set_free_ Set *locales = NULL; ++ _cleanup_set_free_free_ Set *locales = NULL; + _cleanup_strv_free_ char **l = NULL; + int r; + +@@ -203,6 +203,9 @@ int get_locales(char ***ret) { + if (!l) + return -ENOMEM; + ++ /* Now, all elements are owned by strv 'l'. Hence, do not call set_free_free(). */ ++ locales = set_free(locales); ++ + r = getenv_bool("SYSTEMD_LIST_NON_UTF8_LOCALES"); + if (r == -ENXIO || r == 0) { + char **a, **b; diff --git a/SOURCES/0216-locale-util-check-if-enumerated-locales-are-valid.patch b/SOURCES/0216-locale-util-check-if-enumerated-locales-are-valid.patch new file mode 100644 index 0000000..039d97c --- /dev/null +++ b/SOURCES/0216-locale-util-check-if-enumerated-locales-are-valid.patch @@ -0,0 +1,32 @@ +From c10efc8164dcdf8596315ce98f60405f8c2e17c0 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:05:00 +0900 +Subject: [PATCH] locale-util: check if enumerated locales are valid + +(cherry picked from commit a2f7937747f12634d93049f645cdae88f89ff233) + +Related: #2087652 +--- + src/basic/locale-util.c | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c +index abbebc7666..bd36cdd1cd 100644 +--- a/src/basic/locale-util.c ++++ b/src/basic/locale-util.c +@@ -199,6 +199,15 @@ int get_locales(char ***ret) { + if (r < 0) + return r; + ++ char *locale; ++ SET_FOREACH(locale, locales) { ++ r = locale_is_installed(locale); ++ if (r < 0) ++ return r; ++ if (r == 0) ++ free(set_remove(locales, locale)); ++ } ++ + l = set_get_strv(locales); + if (!l) + return -ENOMEM; diff --git a/SOURCES/0217-locale-util-align-locale-entries.patch b/SOURCES/0217-locale-util-align-locale-entries.patch new file mode 100644 index 0000000..4e167dd --- /dev/null +++ b/SOURCES/0217-locale-util-align-locale-entries.patch @@ -0,0 +1,49 @@ +From 1fb9fa1c16f46ce830324173dd0920eddf13c9d6 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:06:00 +0900 +Subject: [PATCH] locale-util: align locale entries + +(cherry picked from commit d2e96a4f87f814f3d5c8be986a4d4f616bfd67f4) + +Related: #2087652 +--- + src/basic/locale-util.c | 26 +++++++++++++------------- + 1 file changed, 13 insertions(+), 13 deletions(-) + +diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c +index bd36cdd1cd..8098369db5 100644 +--- a/src/basic/locale-util.c ++++ b/src/basic/locale-util.c +@@ -336,19 +336,19 @@ void locale_variables_free(char *l[_VARIABLE_LC_MAX]) { + } + + static const char * const locale_variable_table[_VARIABLE_LC_MAX] = { +- [VARIABLE_LANG] = "LANG", +- [VARIABLE_LANGUAGE] = "LANGUAGE", +- [VARIABLE_LC_CTYPE] = "LC_CTYPE", +- [VARIABLE_LC_NUMERIC] = "LC_NUMERIC", +- [VARIABLE_LC_TIME] = "LC_TIME", +- [VARIABLE_LC_COLLATE] = "LC_COLLATE", +- [VARIABLE_LC_MONETARY] = "LC_MONETARY", +- [VARIABLE_LC_MESSAGES] = "LC_MESSAGES", +- [VARIABLE_LC_PAPER] = "LC_PAPER", +- [VARIABLE_LC_NAME] = "LC_NAME", +- [VARIABLE_LC_ADDRESS] = "LC_ADDRESS", +- [VARIABLE_LC_TELEPHONE] = "LC_TELEPHONE", +- [VARIABLE_LC_MEASUREMENT] = "LC_MEASUREMENT", ++ [VARIABLE_LANG] = "LANG", ++ [VARIABLE_LANGUAGE] = "LANGUAGE", ++ [VARIABLE_LC_CTYPE] = "LC_CTYPE", ++ [VARIABLE_LC_NUMERIC] = "LC_NUMERIC", ++ [VARIABLE_LC_TIME] = "LC_TIME", ++ [VARIABLE_LC_COLLATE] = "LC_COLLATE", ++ [VARIABLE_LC_MONETARY] = "LC_MONETARY", ++ [VARIABLE_LC_MESSAGES] = "LC_MESSAGES", ++ [VARIABLE_LC_PAPER] = "LC_PAPER", ++ [VARIABLE_LC_NAME] = "LC_NAME", ++ [VARIABLE_LC_ADDRESS] = "LC_ADDRESS", ++ [VARIABLE_LC_TELEPHONE] = "LC_TELEPHONE", ++ [VARIABLE_LC_MEASUREMENT] = "LC_MEASUREMENT", + [VARIABLE_LC_IDENTIFICATION] = "LC_IDENTIFICATION" + }; + diff --git a/SOURCES/0218-core-inline-an-iterator-variable.patch b/SOURCES/0218-core-inline-an-iterator-variable.patch new file mode 100644 index 0000000..ec4a4cd --- /dev/null +++ b/SOURCES/0218-core-inline-an-iterator-variable.patch @@ -0,0 +1,33 @@ +From bc5efb385f238fc7b9cbf552c61269fd680e2c94 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 7 Apr 2022 11:22:08 +0200 +Subject: [PATCH] core: inline an iterator variable + +(cherry picked from commit 32adc3a7cab85ce543d6895d644a52c6965a274c) + +Related: #2087652 +--- + src/core/locale-setup.c | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c +index 59ddb9c487..716febbefa 100644 +--- a/src/core/locale-setup.c ++++ b/src/core/locale-setup.c +@@ -16,7 +16,6 @@ + int locale_setup(char ***environment) { + _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {}; + _cleanup_strv_free_ char **add = NULL; +- LocaleVariable i; + int r; + + r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX, +@@ -58,7 +57,7 @@ int locale_setup(char ***environment) { + log_warning_errno(r, "Failed to read /etc/locale.conf: %m"); + } + +- for (i = 0; i < _VARIABLE_LC_MAX; i++) { ++ for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++) { + char *s; + + if (!variables[i]) diff --git a/SOURCES/0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch b/SOURCES/0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch new file mode 100644 index 0000000..b303053 --- /dev/null +++ b/SOURCES/0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch @@ -0,0 +1,884 @@ +From cdcbd56d4eacba3b3ee4d8b0c38d6509a307a2b7 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:07:00 +0900 +Subject: [PATCH] locale-setup: merge locale handling in PID1 and localed + +Related: #2087652 +--- + src/basic/locale-util.c | 11 ++ + src/basic/locale-util.h | 1 + + src/core/locale-setup.c | 95 -------------- + src/core/locale-setup.h | 4 - + src/core/meson.build | 2 - + src/locale/keymap-util.c | 102 +-------------- + src/locale/keymap-util.h | 7 +- + src/locale/localectl.c | 47 +++---- + src/locale/localed.c | 87 +++---------- + src/shared/locale-setup.c | 256 ++++++++++++++++++++++++++++++++++++++ + src/shared/locale-setup.h | 28 +++++ + src/shared/meson.build | 2 + + 12 files changed, 333 insertions(+), 309 deletions(-) + delete mode 100644 src/core/locale-setup.c + delete mode 100644 src/core/locale-setup.h + create mode 100644 src/shared/locale-setup.c + create mode 100644 src/shared/locale-setup.h + +diff --git a/src/basic/locale-util.c b/src/basic/locale-util.c +index 8098369db5..21f0982bb5 100644 +--- a/src/basic/locale-util.c ++++ b/src/basic/locale-util.c +@@ -335,6 +335,17 @@ void locale_variables_free(char *l[_VARIABLE_LC_MAX]) { + l[i] = mfree(l[i]); + } + ++void locale_variables_simplify(char *l[_VARIABLE_LC_MAX]) { ++ assert(l); ++ ++ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) { ++ if (p == VARIABLE_LANG) ++ continue; ++ if (isempty(l[p]) || streq_ptr(l[VARIABLE_LANG], l[p])) ++ l[p] = mfree(l[p]); ++ } ++} ++ + static const char * const locale_variable_table[_VARIABLE_LC_MAX] = { + [VARIABLE_LANG] = "LANG", + [VARIABLE_LANGUAGE] = "LANGUAGE", +diff --git a/src/basic/locale-util.h b/src/basic/locale-util.h +index bab927146b..8990cb6a75 100644 +--- a/src/basic/locale-util.h ++++ b/src/basic/locale-util.h +@@ -53,3 +53,4 @@ void locale_variables_free(char* l[_VARIABLE_LC_MAX]); + static inline void locale_variables_freep(char*(*l)[_VARIABLE_LC_MAX]) { + locale_variables_free(*l); + } ++void locale_variables_simplify(char *l[_VARIABLE_LC_MAX]); +diff --git a/src/core/locale-setup.c b/src/core/locale-setup.c +deleted file mode 100644 +index 716febbefa..0000000000 +--- a/src/core/locale-setup.c ++++ /dev/null +@@ -1,95 +0,0 @@ +-/* SPDX-License-Identifier: LGPL-2.1-or-later */ +- +-#include +-#include +- +-#include "env-file.h" +-#include "env-util.h" +-#include "locale-setup.h" +-#include "locale-util.h" +-#include "proc-cmdline.h" +-#include "string-util.h" +-#include "strv.h" +-#include "util.h" +-#include "virt.h" +- +-int locale_setup(char ***environment) { +- _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {}; +- _cleanup_strv_free_ char **add = NULL; +- int r; +- +- r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX, +- "locale.LANG", &variables[VARIABLE_LANG], +- "locale.LANGUAGE", &variables[VARIABLE_LANGUAGE], +- "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], +- "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], +- "locale.LC_TIME", &variables[VARIABLE_LC_TIME], +- "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], +- "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], +- "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], +- "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], +- "locale.LC_NAME", &variables[VARIABLE_LC_NAME], +- "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], +- "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], +- "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], +- "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]); +- if (r < 0 && r != -ENOENT) +- log_warning_errno(r, "Failed to read /proc/cmdline: %m"); +- +- /* Hmm, nothing set on the kernel cmd line? Then let's try /etc/locale.conf */ +- if (r <= 0) { +- r = parse_env_file(NULL, "/etc/locale.conf", +- "LANG", &variables[VARIABLE_LANG], +- "LANGUAGE", &variables[VARIABLE_LANGUAGE], +- "LC_CTYPE", &variables[VARIABLE_LC_CTYPE], +- "LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], +- "LC_TIME", &variables[VARIABLE_LC_TIME], +- "LC_COLLATE", &variables[VARIABLE_LC_COLLATE], +- "LC_MONETARY", &variables[VARIABLE_LC_MONETARY], +- "LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], +- "LC_PAPER", &variables[VARIABLE_LC_PAPER], +- "LC_NAME", &variables[VARIABLE_LC_NAME], +- "LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], +- "LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], +- "LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], +- "LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]); +- if (r < 0 && r != -ENOENT) +- log_warning_errno(r, "Failed to read /etc/locale.conf: %m"); +- } +- +- for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++) { +- char *s; +- +- if (!variables[i]) +- continue; +- +- s = strjoin(locale_variable_to_string(i), "=", variables[i]); +- if (!s) +- return -ENOMEM; +- +- if (strv_consume(&add, s) < 0) +- return -ENOMEM; +- } +- +- if (strv_isempty(add)) { +- /* If no locale is configured then default to compile-time default. */ +- +- add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE); +- if (!add) +- return -ENOMEM; +- } +- +- if (strv_isempty(*environment)) +- strv_free_and_replace(*environment, add); +- else { +- char **merged; +- +- merged = strv_env_merge(*environment, add); +- if (!merged) +- return -ENOMEM; +- +- strv_free_and_replace(*environment, merged); +- } +- +- return 0; +-} +diff --git a/src/core/locale-setup.h b/src/core/locale-setup.h +deleted file mode 100644 +index d554ad3060..0000000000 +--- a/src/core/locale-setup.h ++++ /dev/null +@@ -1,4 +0,0 @@ +-/* SPDX-License-Identifier: LGPL-2.1-or-later */ +-#pragma once +- +-int locale_setup(char ***environment); +diff --git a/src/core/meson.build b/src/core/meson.build +index 97ac431763..7704478d43 100644 +--- a/src/core/meson.build ++++ b/src/core/meson.build +@@ -83,8 +83,6 @@ libcore_sources = ''' + load-dropin.h + load-fragment.c + load-fragment.h +- locale-setup.c +- locale-setup.h + manager-dump.c + manager-dump.h + manager-serialize.c +diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c +index 10d2ed7aec..a3af396ebe 100644 +--- a/src/locale/keymap-util.c ++++ b/src/locale/keymap-util.c +@@ -65,13 +65,8 @@ static void context_free_vconsole(Context *c) { + c->vc_keymap_toggle = mfree(c->vc_keymap_toggle); + } + +-static void context_free_locale(Context *c) { +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) +- c->locale[p] = mfree(c->locale[p]); +-} +- + void context_clear(Context *c) { +- context_free_locale(c); ++ locale_context_clear(&c->locale_context); + context_free_x11(c); + context_free_vconsole(c); + +@@ -82,15 +77,8 @@ void context_clear(Context *c) { + bus_verify_polkit_async_registry_free(c->polkit_registry); + }; + +-void locale_simplify(char *locale[_VARIABLE_LC_MAX]) { +- for (LocaleVariable p = VARIABLE_LANG+1; p < _VARIABLE_LC_MAX; p++) +- if (isempty(locale[p]) || streq_ptr(locale[VARIABLE_LANG], locale[p])) +- locale[p] = mfree(locale[p]); +-} +- + int locale_read_data(Context *c, sd_bus_message *m) { +- struct stat st; +- int r; ++ assert(c); + + /* Do not try to re-read the file within single bus operation. */ + if (m) { +@@ -101,57 +89,7 @@ int locale_read_data(Context *c, sd_bus_message *m) { + c->locale_cache = sd_bus_message_ref(m); + } + +- r = stat("/etc/locale.conf", &st); +- if (r < 0 && errno != ENOENT) +- return -errno; +- +- if (r >= 0) { +- usec_t t; +- +- /* If mtime is not changed, then we do not need to re-read the file. */ +- t = timespec_load(&st.st_mtim); +- if (c->locale_mtime != USEC_INFINITY && t == c->locale_mtime) +- return 0; +- +- c->locale_mtime = t; +- context_free_locale(c); +- +- r = parse_env_file(NULL, "/etc/locale.conf", +- "LANG", &c->locale[VARIABLE_LANG], +- "LANGUAGE", &c->locale[VARIABLE_LANGUAGE], +- "LC_CTYPE", &c->locale[VARIABLE_LC_CTYPE], +- "LC_NUMERIC", &c->locale[VARIABLE_LC_NUMERIC], +- "LC_TIME", &c->locale[VARIABLE_LC_TIME], +- "LC_COLLATE", &c->locale[VARIABLE_LC_COLLATE], +- "LC_MONETARY", &c->locale[VARIABLE_LC_MONETARY], +- "LC_MESSAGES", &c->locale[VARIABLE_LC_MESSAGES], +- "LC_PAPER", &c->locale[VARIABLE_LC_PAPER], +- "LC_NAME", &c->locale[VARIABLE_LC_NAME], +- "LC_ADDRESS", &c->locale[VARIABLE_LC_ADDRESS], +- "LC_TELEPHONE", &c->locale[VARIABLE_LC_TELEPHONE], +- "LC_MEASUREMENT", &c->locale[VARIABLE_LC_MEASUREMENT], +- "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]); +- if (r < 0) +- return r; +- } else { +- c->locale_mtime = USEC_INFINITY; +- context_free_locale(c); +- +- /* Fill in what we got passed from systemd. */ +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) { +- const char *name; +- +- name = locale_variable_to_string(p); +- assert(name); +- +- r = free_and_strdup(&c->locale[p], empty_to_null(getenv(name))); +- if (r < 0) +- return r; +- } +- } +- +- locale_simplify(c->locale); +- return 0; ++ return locale_context_load(&c->locale_context, LOCALE_LOAD_LOCALE_CONF | LOCALE_LOAD_ENVIRONMENT | LOCALE_LOAD_SIMPLIFY); + } + + int vconsole_read_data(Context *c, sd_bus_message *m) { +@@ -285,40 +223,6 @@ int x11_read_data(Context *c, sd_bus_message *m) { + return 0; + } + +-int locale_write_data(Context *c, char ***settings) { +- _cleanup_strv_free_ char **l = NULL; +- struct stat st; +- int r; +- +- /* Set values will be returned as strv in *settings on success. */ +- +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) +- if (!isempty(c->locale[p])) { +- r = strv_env_assign(&l, locale_variable_to_string(p), c->locale[p]); +- if (r < 0) +- return r; +- } +- +- if (strv_isempty(l)) { +- if (unlink("/etc/locale.conf") < 0) +- return errno == ENOENT ? 0 : -errno; +- +- c->locale_mtime = USEC_INFINITY; +- return 0; +- } +- +- r = write_env_file_label("/etc/locale.conf", l); +- if (r < 0) +- return r; +- +- *settings = TAKE_PTR(l); +- +- if (stat("/etc/locale.conf", &st) >= 0) +- c->locale_mtime = timespec_load(&st.st_mtim); +- +- return 0; +-} +- + int vconsole_write_data(Context *c) { + _cleanup_strv_free_ char **l = NULL; + struct stat st; +diff --git a/src/locale/keymap-util.h b/src/locale/keymap-util.h +index c087dbcbbe..5470d1bb9b 100644 +--- a/src/locale/keymap-util.h ++++ b/src/locale/keymap-util.h +@@ -4,13 +4,12 @@ + #include "sd-bus.h" + + #include "hashmap.h" +-#include "locale-util.h" ++#include "locale-setup.h" + #include "time-util.h" + + typedef struct Context { + sd_bus_message *locale_cache; +- usec_t locale_mtime; +- char *locale[_VARIABLE_LC_MAX]; ++ LocaleContext locale_context; + + sd_bus_message *x11_cache; + usec_t x11_mtime; +@@ -40,8 +39,6 @@ int vconsole_convert_to_x11(Context *c); + int vconsole_write_data(Context *c); + int x11_convert_to_vconsole(Context *c); + int x11_write_data(Context *c); +-void locale_simplify(char *locale[_VARIABLE_LC_MAX]); +-int locale_write_data(Context *c, char ***settings); + + bool locale_gen_check_available(void); + int locale_gen_enable_locale(const char *locale); +diff --git a/src/locale/localectl.c b/src/locale/localectl.c +index 661d54c27d..6bfb564f97 100644 +--- a/src/locale/localectl.c ++++ b/src/locale/localectl.c +@@ -12,7 +12,7 @@ + #include "fd-util.h" + #include "fileio.h" + #include "kbd-util.h" +-#include "locale-util.h" ++#include "locale-setup.h" + #include "main-func.h" + #include "memory-util.h" + #include "pager.h" +@@ -52,44 +52,25 @@ static void status_info_clear(StatusInfo *info) { + } + + static void print_overridden_variables(void) { +- _cleanup_(locale_variables_freep) char *variables[_VARIABLE_LC_MAX] = {}; +- bool print_warning = true; ++ _cleanup_(locale_context_clear) LocaleContext c = { .mtime = USEC_INFINITY }; ++ _cleanup_strv_free_ char **env = NULL; + int r; + + if (arg_transport != BUS_TRANSPORT_LOCAL) + return; + +- r = proc_cmdline_get_key_many( +- PROC_CMDLINE_STRIP_RD_PREFIX, +- "locale.LANG", &variables[VARIABLE_LANG], +- "locale.LANGUAGE", &variables[VARIABLE_LANGUAGE], +- "locale.LC_CTYPE", &variables[VARIABLE_LC_CTYPE], +- "locale.LC_NUMERIC", &variables[VARIABLE_LC_NUMERIC], +- "locale.LC_TIME", &variables[VARIABLE_LC_TIME], +- "locale.LC_COLLATE", &variables[VARIABLE_LC_COLLATE], +- "locale.LC_MONETARY", &variables[VARIABLE_LC_MONETARY], +- "locale.LC_MESSAGES", &variables[VARIABLE_LC_MESSAGES], +- "locale.LC_PAPER", &variables[VARIABLE_LC_PAPER], +- "locale.LC_NAME", &variables[VARIABLE_LC_NAME], +- "locale.LC_ADDRESS", &variables[VARIABLE_LC_ADDRESS], +- "locale.LC_TELEPHONE", &variables[VARIABLE_LC_TELEPHONE], +- "locale.LC_MEASUREMENT", &variables[VARIABLE_LC_MEASUREMENT], +- "locale.LC_IDENTIFICATION", &variables[VARIABLE_LC_IDENTIFICATION]); +- if (r < 0 && r != -ENOENT) { +- log_warning_errno(r, "Failed to read /proc/cmdline: %m"); +- return; +- } +- +- for (LocaleVariable j = 0; j < _VARIABLE_LC_MAX; j++) +- if (variables[j]) { +- if (print_warning) { +- log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.\n" +- " Command Line: %s=%s", locale_variable_to_string(j), variables[j]); ++ (void) locale_context_load(&c, LOCALE_LOAD_PROC_CMDLINE); + +- print_warning = false; +- } else +- log_warning(" %s=%s", locale_variable_to_string(j), variables[j]); +- } ++ r = locale_context_build_env(&c, &env, NULL); ++ if (r < 0) ++ return (void) log_warning_errno(r, "Failed to build locale settings from kernel command line, ignoring: %m"); ++ ++ STRV_FOREACH(p, env) ++ if (p == env) ++ log_warning("Warning: Settings on kernel command line override system locale settings in /etc/locale.conf.\n" ++ " Command Line: %s", *p); ++ else ++ log_warning(" %s", *p); + } + + static void print_status_info(StatusInfo *i) { +diff --git a/src/locale/localed.c b/src/locale/localed.c +index 89bf9c6fba..9718c5b95f 100644 +--- a/src/locale/localed.c ++++ b/src/locale/localed.c +@@ -21,7 +21,6 @@ + #include "dlfcn-util.h" + #include "kbd-util.h" + #include "keymap-util.h" +-#include "locale-util.h" + #include "macro.h" + #include "main-func.h" + #include "missing_capability.h" +@@ -33,44 +32,13 @@ + #include "strv.h" + #include "user-util.h" + +-static int locale_update_system_manager(Context *c, sd_bus *bus) { +- _cleanup_free_ char **l_unset = NULL; +- _cleanup_strv_free_ char **l_set = NULL; ++static int locale_update_system_manager(sd_bus *bus, char **l_set, char **l_unset) { + _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL; + _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL; +- size_t c_set = 0, c_unset = 0; + int r; + + assert(bus); + +- l_unset = new0(char*, _VARIABLE_LC_MAX); +- if (!l_unset) +- return log_oom(); +- +- l_set = new0(char*, _VARIABLE_LC_MAX); +- if (!l_set) +- return log_oom(); +- +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) { +- const char *name; +- +- name = locale_variable_to_string(p); +- assert(name); +- +- if (isempty(c->locale[p])) +- l_unset[c_set++] = (char*) name; +- else { +- char *s; +- +- s = strjoin(name, "=", c->locale[p]); +- if (!s) +- return log_oom(); +- +- l_set[c_unset++] = s; +- } +- } +- +- assert(c_set + c_unset == _VARIABLE_LC_MAX); + r = sd_bus_message_new_method_call(bus, &m, + "org.freedesktop.systemd1", + "/org/freedesktop/systemd1", +@@ -188,21 +156,9 @@ static int property_get_locale( + if (!l) + return -ENOMEM; + +- for (LocaleVariable p = 0, q = 0; p < _VARIABLE_LC_MAX; p++) { +- char *t; +- const char *name; +- +- name = locale_variable_to_string(p); +- assert(name); +- +- if (isempty(c->locale[p])) +- continue; +- +- if (asprintf(&t, "%s=%s", name, c->locale[p]) < 0) +- return -ENOMEM; +- +- l[q++] = t; +- } ++ r = locale_context_build_env(&c->locale_context, &l, NULL); ++ if (r < 0) ++ return r; + + return sd_bus_message_append_strv(reply, l); + } +@@ -342,9 +298,8 @@ static int locale_gen_process_locale(char *new_locale[static _VARIABLE_LC_MAX], + + static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *error) { + _cleanup_(locale_variables_freep) char *new_locale[_VARIABLE_LC_MAX] = {}; +- _cleanup_strv_free_ char **settings = NULL, **l = NULL; ++ _cleanup_strv_free_ char **l = NULL, **l_set = NULL, **l_unset = NULL; + Context *c = userdata; +- bool modified = false; + int interactive, r; + bool use_localegen; + +@@ -402,22 +357,13 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er + } + + /* Merge with the current settings */ +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) +- if (!isempty(c->locale[p]) && isempty(new_locale[p])) { +- new_locale[p] = strdup(c->locale[p]); +- if (!new_locale[p]) +- return -ENOMEM; +- } +- +- locale_simplify(new_locale); ++ r = locale_context_merge(&c->locale_context, new_locale); ++ if (r < 0) ++ return r; + +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) +- if (!streq_ptr(c->locale[p], new_locale[p])) { +- modified = true; +- break; +- } ++ locale_variables_simplify(new_locale); + +- if (!modified) { ++ if (locale_context_equal(&c->locale_context, new_locale)) { + log_debug("Locale settings were not modified."); + return sd_bus_reply_method_return(m, NULL); + } +@@ -443,22 +389,21 @@ static int method_set_locale(sd_bus_message *m, void *userdata, sd_bus_error *er + return r; + } + +- for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) +- free_and_replace(c->locale[p], new_locale[p]); ++ locale_context_take(&c->locale_context, new_locale); + + /* Write locale configuration */ +- r = locale_write_data(c, &settings); ++ r = locale_context_save(&c->locale_context, &l_set, &l_unset); + if (r < 0) { + log_error_errno(r, "Failed to set locale: %m"); + return sd_bus_error_set_errnof(error, r, "Failed to set locale: %m"); + } + +- (void) locale_update_system_manager(c, sd_bus_message_get_bus(m)); ++ (void) locale_update_system_manager(sd_bus_message_get_bus(m), l_set, l_unset); + +- if (settings) { ++ if (!strv_isempty(l_set)) { + _cleanup_free_ char *line = NULL; + +- line = strv_join(settings, ", "); ++ line = strv_join(l_set, ", "); + log_info("Changed locale to %s.", strnull(line)); + } else + log_info("Changed locale to unset."); +@@ -827,7 +772,7 @@ static int connect_bus(Context *c, sd_event *event, sd_bus **_bus) { + + static int run(int argc, char *argv[]) { + _cleanup_(context_clear) Context context = { +- .locale_mtime = USEC_INFINITY, ++ .locale_context.mtime = USEC_INFINITY, + .vc_mtime = USEC_INFINITY, + .x11_mtime = USEC_INFINITY, + }; +diff --git a/src/shared/locale-setup.c b/src/shared/locale-setup.c +new file mode 100644 +index 0000000000..b8c6647e7c +--- /dev/null ++++ b/src/shared/locale-setup.c +@@ -0,0 +1,256 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++ ++#include ++#include ++ ++#include "env-file-label.h" ++#include "env-file.h" ++#include "env-util.h" ++#include "locale-setup.h" ++#include "proc-cmdline.h" ++#include "strv.h" ++ ++void locale_context_clear(LocaleContext *c) { ++ assert(c); ++ ++ c->mtime = USEC_INFINITY; ++ ++ for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++) ++ c->locale[i] = mfree(c->locale[i]); ++} ++ ++int locale_context_load(LocaleContext *c, LocaleLoadFlag flag) { ++ int r; ++ ++ assert(c); ++ ++ if (FLAGS_SET(flag, LOCALE_LOAD_PROC_CMDLINE)) { ++ locale_context_clear(c); ++ ++ r = proc_cmdline_get_key_many(PROC_CMDLINE_STRIP_RD_PREFIX, ++ "locale.LANG", &c->locale[VARIABLE_LANG], ++ "locale.LANGUAGE", &c->locale[VARIABLE_LANGUAGE], ++ "locale.LC_CTYPE", &c->locale[VARIABLE_LC_CTYPE], ++ "locale.LC_NUMERIC", &c->locale[VARIABLE_LC_NUMERIC], ++ "locale.LC_TIME", &c->locale[VARIABLE_LC_TIME], ++ "locale.LC_COLLATE", &c->locale[VARIABLE_LC_COLLATE], ++ "locale.LC_MONETARY", &c->locale[VARIABLE_LC_MONETARY], ++ "locale.LC_MESSAGES", &c->locale[VARIABLE_LC_MESSAGES], ++ "locale.LC_PAPER", &c->locale[VARIABLE_LC_PAPER], ++ "locale.LC_NAME", &c->locale[VARIABLE_LC_NAME], ++ "locale.LC_ADDRESS", &c->locale[VARIABLE_LC_ADDRESS], ++ "locale.LC_TELEPHONE", &c->locale[VARIABLE_LC_TELEPHONE], ++ "locale.LC_MEASUREMENT", &c->locale[VARIABLE_LC_MEASUREMENT], ++ "locale.LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]); ++ if (r < 0 && r != -ENOENT) ++ log_debug_errno(r, "Failed to read /proc/cmdline, ignoring: %m"); ++ if (r > 0) ++ goto finalize; ++ } ++ ++ if (FLAGS_SET(flag, LOCALE_LOAD_LOCALE_CONF)) { ++ struct stat st; ++ usec_t t; ++ ++ r = stat("/etc/locale.conf", &st); ++ if (r < 0 && errno != ENOENT) ++ return log_debug_errno(errno, "Failed to stat /etc/locale.conf: %m"); ++ ++ if (r >= 0) { ++ /* If mtime is not changed, then we do not need to re-read the file. */ ++ t = timespec_load(&st.st_mtim); ++ if (c->mtime != USEC_INFINITY && t == c->mtime) ++ return 0; ++ ++ locale_context_clear(c); ++ c->mtime = t; ++ ++ r = parse_env_file(NULL, "/etc/locale.conf", ++ "LANG", &c->locale[VARIABLE_LANG], ++ "LANGUAGE", &c->locale[VARIABLE_LANGUAGE], ++ "LC_CTYPE", &c->locale[VARIABLE_LC_CTYPE], ++ "LC_NUMERIC", &c->locale[VARIABLE_LC_NUMERIC], ++ "LC_TIME", &c->locale[VARIABLE_LC_TIME], ++ "LC_COLLATE", &c->locale[VARIABLE_LC_COLLATE], ++ "LC_MONETARY", &c->locale[VARIABLE_LC_MONETARY], ++ "LC_MESSAGES", &c->locale[VARIABLE_LC_MESSAGES], ++ "LC_PAPER", &c->locale[VARIABLE_LC_PAPER], ++ "LC_NAME", &c->locale[VARIABLE_LC_NAME], ++ "LC_ADDRESS", &c->locale[VARIABLE_LC_ADDRESS], ++ "LC_TELEPHONE", &c->locale[VARIABLE_LC_TELEPHONE], ++ "LC_MEASUREMENT", &c->locale[VARIABLE_LC_MEASUREMENT], ++ "LC_IDENTIFICATION", &c->locale[VARIABLE_LC_IDENTIFICATION]); ++ if (r < 0) ++ return log_debug_errno(r, "Failed to read /etc/locale.conf: %m"); ++ ++ goto finalize; ++ } ++ } ++ ++ if (FLAGS_SET(flag, LOCALE_LOAD_ENVIRONMENT)) { ++ locale_context_clear(c); ++ ++ /* Fill in what we got passed from systemd. */ ++ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) { ++ const char *name = ASSERT_PTR(locale_variable_to_string(p)); ++ ++ r = free_and_strdup(&c->locale[p], empty_to_null(getenv(name))); ++ if (r < 0) ++ return log_oom_debug(); ++ } ++ ++ goto finalize; ++ } ++ ++ /* Nothing loaded. */ ++ locale_context_clear(c); ++ return 0; ++ ++finalize: ++ if (FLAGS_SET(flag, LOCALE_LOAD_SIMPLIFY)) ++ locale_variables_simplify(c->locale); ++ ++ return 0; ++} ++ ++int locale_context_build_env(const LocaleContext *c, char ***ret_set, char ***ret_unset) { ++ _cleanup_strv_free_ char **set = NULL, **unset = NULL; ++ int r; ++ ++ assert(c); ++ ++ if (!ret_set && !ret_unset) ++ return 0; ++ ++ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) { ++ const char *name = ASSERT_PTR(locale_variable_to_string(p)); ++ ++ if (isempty(c->locale[p])) { ++ if (!ret_unset) ++ continue; ++ r = strv_extend(&unset, name); ++ } else { ++ if (!ret_set) ++ continue; ++ r = strv_env_assign(&set, name, c->locale[p]); ++ } ++ if (r < 0) ++ return r; ++ } ++ ++ if (ret_set) ++ *ret_set = TAKE_PTR(set); ++ if (ret_unset) ++ *ret_unset = TAKE_PTR(unset); ++ return 0; ++} ++ ++int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset) { ++ _cleanup_strv_free_ char **set = NULL, **unset = NULL; ++ struct stat st; ++ int r; ++ ++ assert(c); ++ ++ /* Set values will be returned as strv in *ret on success. */ ++ ++ r = locale_context_build_env(c, &set, ret_unset ? &unset : NULL); ++ if (r < 0) ++ return r; ++ ++ if (strv_isempty(set)) { ++ if (unlink("/etc/locale.conf") < 0) ++ return errno == ENOENT ? 0 : -errno; ++ ++ c->mtime = USEC_INFINITY; ++ if (ret_set) ++ *ret_set = NULL; ++ if (ret_unset) ++ *ret_unset = NULL; ++ return 0; ++ } ++ ++ r = write_env_file_label("/etc/locale.conf", set); ++ if (r < 0) ++ return r; ++ ++ if (stat("/etc/locale.conf", &st) >= 0) ++ c->mtime = timespec_load(&st.st_mtim); ++ ++ if (ret_set) ++ *ret_set = TAKE_PTR(set); ++ if (ret_unset) ++ *ret_unset = TAKE_PTR(unset); ++ return 0; ++} ++ ++int locale_context_merge(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]) { ++ assert(c); ++ assert(l); ++ ++ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) ++ if (!isempty(c->locale[p]) && isempty(l[p])) { ++ l[p] = strdup(c->locale[p]); ++ if (!l[p]) ++ return -ENOMEM; ++ } ++ ++ return 0; ++} ++ ++void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]) { ++ assert(c); ++ assert(l); ++ ++ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) ++ free_and_replace(c->locale[p], l[p]); ++} ++ ++bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]) { ++ assert(c); ++ assert(l); ++ ++ for (LocaleVariable p = 0; p < _VARIABLE_LC_MAX; p++) ++ if (!streq_ptr(c->locale[p], l[p])) ++ return false; ++ ++ return true; ++} ++ ++int locale_setup(char ***environment) { ++ _cleanup_(locale_context_clear) LocaleContext c = { .mtime = USEC_INFINITY }; ++ _cleanup_strv_free_ char **add = NULL; ++ int r; ++ ++ assert(environment); ++ ++ r = locale_context_load(&c, LOCALE_LOAD_PROC_CMDLINE | LOCALE_LOAD_LOCALE_CONF); ++ if (r < 0) ++ return r; ++ ++ r = locale_context_build_env(&c, &add, NULL); ++ if (r < 0) ++ return r; ++ ++ if (strv_isempty(add)) { ++ /* If no locale is configured then default to compile-time default. */ ++ ++ add = strv_new("LANG=" SYSTEMD_DEFAULT_LOCALE); ++ if (!add) ++ return -ENOMEM; ++ } ++ ++ if (strv_isempty(*environment)) ++ strv_free_and_replace(*environment, add); ++ else { ++ char **merged; ++ ++ merged = strv_env_merge(*environment, add); ++ if (!merged) ++ return -ENOMEM; ++ ++ strv_free_and_replace(*environment, merged); ++ } ++ ++ return 0; ++} +diff --git a/src/shared/locale-setup.h b/src/shared/locale-setup.h +new file mode 100644 +index 0000000000..ec3fc8c364 +--- /dev/null ++++ b/src/shared/locale-setup.h +@@ -0,0 +1,28 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++#pragma once ++ ++#include "locale-util.h" ++#include "time-util.h" ++ ++typedef struct LocaleContext { ++ usec_t mtime; ++ char *locale[_VARIABLE_LC_MAX]; ++} LocaleContext; ++ ++typedef enum LocaleLoadFlag { ++ LOCALE_LOAD_PROC_CMDLINE = 1 << 0, ++ LOCALE_LOAD_LOCALE_CONF = 1 << 1, ++ LOCALE_LOAD_ENVIRONMENT = 1 << 2, ++ LOCALE_LOAD_SIMPLIFY = 1 << 3, ++} LocaleLoadFlag; ++ ++void locale_context_clear(LocaleContext *c); ++int locale_context_load(LocaleContext *c, LocaleLoadFlag flag); ++int locale_context_build_env(const LocaleContext *c, char ***ret_set, char ***ret_unset); ++int locale_context_save(LocaleContext *c, char ***ret_set, char ***ret_unset); ++ ++int locale_context_merge(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]); ++void locale_context_take(LocaleContext *c, char *l[_VARIABLE_LC_MAX]); ++bool locale_context_equal(const LocaleContext *c, char *l[_VARIABLE_LC_MAX]); ++ ++int locale_setup(char ***environment); +diff --git a/src/shared/meson.build b/src/shared/meson.build +index 006310a917..62365682cf 100644 +--- a/src/shared/meson.build ++++ b/src/shared/meson.build +@@ -195,6 +195,8 @@ shared_sources = files(''' + linux/ethtool.h + local-addresses.c + local-addresses.h ++ locale-setup.c ++ locale-setup.h + lockfile-util.c + lockfile-util.h + log-link.h diff --git a/SOURCES/0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch b/SOURCES/0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch new file mode 100644 index 0000000..10a8057 --- /dev/null +++ b/SOURCES/0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch @@ -0,0 +1,98 @@ +From 8cfe7b6243660a5f1b43fe7217a678317284c430 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:08:00 +0900 +Subject: [PATCH] locale: rename keymap-util.[ch] -> localed-util.[ch] + +As the file contains not only keymap related functions. + +(cherry picked from commit 3e5203b3eb2b06ef346eef13d64430542bbfb5c4) + +Related: #2087652 +--- + src/locale/{keymap-util.c => localed-util.c} | 3 +-- + src/locale/{keymap-util.h => localed-util.h} | 0 + src/locale/localed.c | 2 +- + src/locale/meson.build | 10 +++++----- + src/locale/{test-keymap-util.c => test-localed-util.c} | 2 +- + 5 files changed, 8 insertions(+), 9 deletions(-) + rename src/locale/{keymap-util.c => localed-util.c} (99%) + rename src/locale/{keymap-util.h => localed-util.h} (100%) + rename src/locale/{test-keymap-util.c => test-localed-util.c} (99%) + +diff --git a/src/locale/keymap-util.c b/src/locale/localed-util.c +similarity index 99% +rename from src/locale/keymap-util.c +rename to src/locale/localed-util.c +index a3af396ebe..f4f8e5d168 100644 +--- a/src/locale/keymap-util.c ++++ b/src/locale/localed-util.c +@@ -15,8 +15,7 @@ + #include "fileio.h" + #include "fs-util.h" + #include "kbd-util.h" +-#include "keymap-util.h" +-#include "locale-util.h" ++#include "localed-util.h" + #include "macro.h" + #include "mkdir-label.h" + #include "nulstr-util.h" +diff --git a/src/locale/keymap-util.h b/src/locale/localed-util.h +similarity index 100% +rename from src/locale/keymap-util.h +rename to src/locale/localed-util.h +diff --git a/src/locale/localed.c b/src/locale/localed.c +index 9718c5b95f..2c324efb14 100644 +--- a/src/locale/localed.c ++++ b/src/locale/localed.c +@@ -20,7 +20,7 @@ + #include "def.h" + #include "dlfcn-util.h" + #include "kbd-util.h" +-#include "keymap-util.h" ++#include "localed-util.h" + #include "macro.h" + #include "main-func.h" + #include "missing_capability.h" +diff --git a/src/locale/meson.build b/src/locale/meson.build +index 0ccf71583d..2d8c48cf3a 100644 +--- a/src/locale/meson.build ++++ b/src/locale/meson.build +@@ -1,9 +1,9 @@ + # SPDX-License-Identifier: LGPL-2.1-or-later + + systemd_localed_sources = files(''' ++ localed-util.c ++ localed-util.h + localed.c +- keymap-util.c +- keymap-util.h + '''.split()) + + localectl_sources = files('localectl.c') +@@ -30,7 +30,7 @@ if conf.get('ENABLE_LOCALED') == 1 + endif + + tests += [ +- [files('test-keymap-util.c', +- 'keymap-util.c', +- 'keymap-util.h')], ++ [files('test-localed-util.c', ++ 'localed-util.c', ++ 'localed-util.h')], + ] +diff --git a/src/locale/test-keymap-util.c b/src/locale/test-localed-util.c +similarity index 99% +rename from src/locale/test-keymap-util.c +rename to src/locale/test-localed-util.c +index f726e8e524..f658d271dc 100644 +--- a/src/locale/test-keymap-util.c ++++ b/src/locale/test-localed-util.c +@@ -1,7 +1,7 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" +-#include "keymap-util.h" ++#include "localed-util.h" + #include "log.h" + #include "string-util.h" + #include "tests.h" diff --git a/SOURCES/0221-test-add-one-more-path-to-search-keymaps.patch b/SOURCES/0221-test-add-one-more-path-to-search-keymaps.patch new file mode 100644 index 0000000..a0d36d0 --- /dev/null +++ b/SOURCES/0221-test-add-one-more-path-to-search-keymaps.patch @@ -0,0 +1,85 @@ +From 380a3b2b2d38f08ac84d3ac521b205960059d99c Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:10:00 +0900 +Subject: [PATCH] test: add one more path to search keymaps + +Now it also supports split-usr. + +(cherry picked from commit 569c6fd1b7c7946fa853d558fcbb23e4a45f957f) + +Related: #2087652 +--- + test/test-functions | 59 ++++++++++++++++++++++++++++++--------------- + 1 file changed, 40 insertions(+), 19 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index d71e2a3328..01fc90fbf5 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1844,26 +1844,47 @@ install_pam() { + + # shellcheck disable=SC2120 + install_keymaps() { +- dinfo "Install keymaps" +- # The first three paths may be deprecated. +- # It seems now the last two paths are used by many distributions. +- for i in \ +- /usr/lib/kbd/keymaps/include/* \ +- /usr/lib/kbd/keymaps/i386/include/* \ +- /usr/lib/kbd/keymaps/i386/qwerty/us.* \ +- /usr/lib/kbd/keymaps/legacy/include/* \ +- /usr/lib/kbd/keymaps/legacy/i386/qwerty/us.*; do +- [[ -f "$i" ]] || continue +- inst "$i" +- done ++ local i p ++ local -a prefix=( ++ "/usr" ++ ) + +- # When it takes any argument, then install more keymaps. +- if [[ $# -gt 1 ]]; then +- for i in \ +- /usr/lib/kbd/keymaps/i386/*/* \ +- /usr/lib/kbd/keymaps/legacy/i386/*/*; do +- [[ -f "$i" ]] || continue +- inst "$i" ++ dinfo "Install console keymaps" ++ ++ if command -v meson >/dev/null \ ++ && [[ "$(meson configure "${BUILD_DIR:?}" | grep 'split-usr' | awk '{ print $2 }')" == "true" ]] \ ++ || [[ ! -L /lib ]]; then ++ prefix+=( ++ "" ++ ) ++ fi ++ ++ if (( $# == 0 )); then ++ for p in "${prefix[@]}"; do ++ # The first three paths may be deprecated. ++ # It seems now the last three paths are used by many distributions. ++ for i in \ ++ "$p"/lib/kbd/keymaps/include/* \ ++ "$p"/lib/kbd/keymaps/i386/include/* \ ++ "$p"/lib/kbd/keymaps/i386/qwerty/us.* \ ++ "$p"/lib/kbd/keymaps/legacy/include/* \ ++ "$p"/lib/kbd/keymaps/legacy/i386/qwerty/us.* \ ++ "$p"/lib/kbd/keymaps/xkb/us*; do ++ [[ -f "$i" ]] || continue ++ inst "$i" ++ done ++ done ++ else ++ # When it takes any argument, then install more keymaps. ++ for p in "${prefix[@]}"; do ++ for i in \ ++ "$p"/lib/kbd/keymaps/include/* \ ++ "$p"/lib/kbd/keymaps/i386/*/* \ ++ "$p"/lib/kbd/keymaps/legacy/i386/*/* \ ++ "$p"/lib/kbd/keymaps/xkb/*; do ++ [[ -f "$i" ]] || continue ++ inst "$i" ++ done + done + fi + } diff --git a/SOURCES/0222-test-introduce-inst_recursive-helper-function.patch b/SOURCES/0222-test-introduce-inst_recursive-helper-function.patch new file mode 100644 index 0000000..54cd4fb --- /dev/null +++ b/SOURCES/0222-test-introduce-inst_recursive-helper-function.patch @@ -0,0 +1,37 @@ +From a8e7b3e863bc34f4b6aa0a61be1706dcc65392bc Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:11:00 +0900 +Subject: [PATCH] test: introduce inst_recursive() helper function + +(cherry picked from commit da0465dc95388afc15598357452afef85035c639) + +Related: #2087652 +--- + test/test-functions | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/test/test-functions b/test/test-functions +index 01fc90fbf5..4a6436a74b 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2555,6 +2555,20 @@ inst_any() { + return 1 + } + ++inst_recursive() { ++ local p item ++ ++ for p in "$@"; do ++ while read -r item; do ++ if [[ -d "$item" ]]; then ++ inst_dir "$item" ++ elif [[ -f "$item" ]]; then ++ inst_simple "$item" ++ fi ++ done < <(find "$p" 2>/dev/null) ++ done ++} ++ + # image_install [-o ] [ ... ] + # Install to the test image + # -o optionally install the and don't fail, if it is not there diff --git a/SOURCES/0223-hmac-sha256-move-size-define-to-sha256.h.patch b/SOURCES/0223-hmac-sha256-move-size-define-to-sha256.h.patch new file mode 100644 index 0000000..5bfe290 --- /dev/null +++ b/SOURCES/0223-hmac-sha256-move-size-define-to-sha256.h.patch @@ -0,0 +1,39 @@ +From f7b73ede98fe971ba28def1af4f3e4ab1fc20c6c Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Sat, 12 Mar 2022 00:51:21 +0100 +Subject: [PATCH] hmac/sha256: move size define to sha256.h + +(cherry picked from commit e560cf4f71bf237019d982603af3d6be86394788) + +Related: #2087652 +--- + src/basic/hmac.h | 2 +- + src/fundamental/sha256.h | 2 ++ + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/basic/hmac.h b/src/basic/hmac.h +index a5682c439f..e58c1838a3 100644 +--- a/src/basic/hmac.h ++++ b/src/basic/hmac.h +@@ -4,7 +4,7 @@ + #include + #include + +-#define SHA256_DIGEST_SIZE 32 ++#include "sha256.h" + + /* Unoptimized implementation based on FIPS 198. 'res' has to be allocated by + * the caller. Prefer external OpenSSL functions, and use this only when +diff --git a/src/fundamental/sha256.h b/src/fundamental/sha256.h +index abc4167628..e53197f2ef 100644 +--- a/src/fundamental/sha256.h ++++ b/src/fundamental/sha256.h +@@ -8,6 +8,8 @@ + + #include "types-fundamental.h" + ++#define SHA256_DIGEST_SIZE 32 ++ + struct sha256_ctx { + uint32_t H[8]; + diff --git a/SOURCES/0224-tpm2-support-policies-with-PIN.patch b/SOURCES/0224-tpm2-support-policies-with-PIN.patch new file mode 100644 index 0000000..9f56c08 --- /dev/null +++ b/SOURCES/0224-tpm2-support-policies-with-PIN.patch @@ -0,0 +1,322 @@ +From 98997b288819f4dac7b2ca19c199d71e733bfa92 Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Wed, 16 Feb 2022 22:13:42 +0100 +Subject: [PATCH] tpm2: support policies with PIN + +Modify TPM2 authentication policy to optionally include an authValue, i.e. +a password/PIN. We use the "PIN" terminology since it's used by other +systems such as Windows, even though the PIN is not necessarily numeric. + +The pin is hashed via SHA256 to allow for arbitrary length PINs. + +v2: fix tpm2_seal in sd-repart +v3: applied review feedback +(cherry picked from commit 2f5a892aa0d70aa4f1f10c8dba495ad52bc02bc3) + +Related: #2087652 +--- + src/cryptenroll/cryptenroll-tpm2.c | 4 +- + src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c | 2 +- + src/cryptsetup/cryptsetup-tpm2.c | 2 +- + src/partition/repart.c | 2 +- + src/shared/creds-util.c | 2 + + src/shared/tpm2-util.c | 76 ++++++++++++++++++- + src/shared/tpm2-util.h | 8 +- + 7 files changed, 85 insertions(+), 11 deletions(-) + +diff --git a/src/cryptenroll/cryptenroll-tpm2.c b/src/cryptenroll/cryptenroll-tpm2.c +index 801014af11..f5f6b87d0f 100644 +--- a/src/cryptenroll/cryptenroll-tpm2.c ++++ b/src/cryptenroll/cryptenroll-tpm2.c +@@ -80,7 +80,7 @@ int enroll_tpm2(struct crypt_device *cd, + + assert_se(node = crypt_get_device_name(cd)); + +- r = tpm2_seal(device, pcr_mask, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg); ++ r = tpm2_seal(device, pcr_mask, NULL, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg); + if (r < 0) + return r; + +@@ -97,7 +97,7 @@ int enroll_tpm2(struct crypt_device *cd, + + /* Quick verification that everything is in order, we are not in a hurry after all. */ + log_debug("Unsealing for verification..."); +- r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, &secret2, &secret2_size); ++ r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, NULL, &secret2, &secret2_size); + if (r < 0) + return r; + +diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c +index 3d39dfa884..de189c7bed 100644 +--- a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c ++++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c +@@ -41,7 +41,7 @@ int acquire_luks2_key( + pcr_mask, pcr_bank, + primary_alg, + key_data, key_data_size, +- policy_hash, policy_hash_size, ++ policy_hash, policy_hash_size, NULL, + ret_decrypted_key, ret_decrypted_key_size); + } + +diff --git a/src/cryptsetup/cryptsetup-tpm2.c b/src/cryptsetup/cryptsetup-tpm2.c +index cb139518a7..05d76a684d 100644 +--- a/src/cryptsetup/cryptsetup-tpm2.c ++++ b/src/cryptsetup/cryptsetup-tpm2.c +@@ -64,7 +64,7 @@ int acquire_tpm2_key( + blob = loaded_blob; + } + +- return tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, policy_hash, policy_hash_size, ret_decrypted_key, ret_decrypted_key_size); ++ return tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, policy_hash, policy_hash_size, NULL, ret_decrypted_key, ret_decrypted_key_size); + } + + int find_tpm2_auto_data( +diff --git a/src/partition/repart.c b/src/partition/repart.c +index 2f70796e58..adfec0b9f3 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -2655,7 +2655,7 @@ static int partition_encrypt( + uint16_t pcr_bank, primary_alg; + int keyslot; + +- r = tpm2_seal(arg_tpm2_device, arg_tpm2_pcr_mask, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg); ++ r = tpm2_seal(arg_tpm2_device, arg_tpm2_pcr_mask, NULL, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg); + if (r < 0) + return log_error_errno(r, "Failed to seal to TPM2: %m"); + +diff --git a/src/shared/creds-util.c b/src/shared/creds-util.c +index 4d0681bc10..c4dcc396ac 100644 +--- a/src/shared/creds-util.c ++++ b/src/shared/creds-util.c +@@ -534,6 +534,7 @@ int encrypt_credential_and_warn( + + r = tpm2_seal(tpm2_device, + tpm2_pcr_mask, ++ NULL, + &tpm2_key, + &tpm2_key_size, + &tpm2_blob, +@@ -803,6 +804,7 @@ int decrypt_credential_and_warn( + le32toh(t->blob_size), + t->policy_hash_and_blob + le32toh(t->blob_size), + le32toh(t->policy_hash_size), ++ NULL, + &tpm2_key, + &tpm2_key_size); + if (r < 0) +diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c +index 70a2929432..aca7b69ab5 100644 +--- a/src/shared/tpm2-util.c ++++ b/src/shared/tpm2-util.c +@@ -14,6 +14,7 @@ + #include "hexdecoct.h" + #include "memory-util.h" + #include "random-util.h" ++#include "sha256.h" + #include "time-util.h" + + static void *libtss2_esys_dl = NULL; +@@ -30,10 +31,12 @@ TSS2_RC (*sym_Esys_GetRandom)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1, ESYS_ + TSS2_RC (*sym_Esys_Initialize)(ESYS_CONTEXT **esys_context, TSS2_TCTI_CONTEXT *tcti, TSS2_ABI_VERSION *abiVersion) = NULL; + TSS2_RC (*sym_Esys_Load)(ESYS_CONTEXT *esysContext, ESYS_TR parentHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_PRIVATE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR *objectHandle) = NULL; + TSS2_RC (*sym_Esys_PCR_Read)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1,ESYS_TR shandle2, ESYS_TR shandle3, const TPML_PCR_SELECTION *pcrSelectionIn, UINT32 *pcrUpdateCounter, TPML_PCR_SELECTION **pcrSelectionOut, TPML_DIGEST **pcrValues); ++TSS2_RC (*sym_Esys_PolicyAuthValue)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3) = NULL; + TSS2_RC (*sym_Esys_PolicyGetDigest)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_DIGEST **policyDigest) = NULL; + TSS2_RC (*sym_Esys_PolicyPCR)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *pcrDigest, const TPML_PCR_SELECTION *pcrs) = NULL; + TSS2_RC (*sym_Esys_StartAuthSession)(ESYS_CONTEXT *esysContext, ESYS_TR tpmKey, ESYS_TR bind, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_NONCE *nonceCaller, TPM2_SE sessionType, const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH authHash, ESYS_TR *sessionHandle) = NULL; + TSS2_RC (*sym_Esys_Startup)(ESYS_CONTEXT *esysContext, TPM2_SU startupType) = NULL; ++TSS2_RC (*sym_Esys_TR_SetAuth)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_AUTH const *authValue) = NULL; + TSS2_RC (*sym_Esys_Unseal)(ESYS_CONTEXT *esysContext, ESYS_TR itemHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_SENSITIVE_DATA **outData) = NULL; + + const char* (*sym_Tss2_RC_Decode)(TSS2_RC rc) = NULL; +@@ -58,10 +61,12 @@ int dlopen_tpm2(void) { + DLSYM_ARG(Esys_Initialize), + DLSYM_ARG(Esys_Load), + DLSYM_ARG(Esys_PCR_Read), ++ DLSYM_ARG(Esys_PolicyAuthValue), + DLSYM_ARG(Esys_PolicyGetDigest), + DLSYM_ARG(Esys_PolicyPCR), + DLSYM_ARG(Esys_StartAuthSession), + DLSYM_ARG(Esys_Startup), ++ DLSYM_ARG(Esys_TR_SetAuth), + DLSYM_ARG(Esys_Unseal)); + if (r < 0) + return r; +@@ -594,6 +599,7 @@ static int tpm2_make_pcr_session( + ESYS_CONTEXT *c, + uint32_t pcr_mask, + uint16_t pcr_bank, /* If UINT16_MAX, pick best bank automatically, otherwise specify bank explicitly. */ ++ bool use_pin, + ESYS_TR *ret_session, + TPM2B_DIGEST **ret_policy_digest, + TPMI_ALG_HASH *ret_pcr_bank) { +@@ -669,6 +675,21 @@ static int tpm2_make_pcr_session( + goto finish; + } + ++ if (use_pin) { ++ rc = sym_Esys_PolicyAuthValue( ++ c, ++ session, ++ ESYS_TR_NONE, ++ ESYS_TR_NONE, ++ ESYS_TR_NONE); ++ if (rc != TSS2_RC_SUCCESS) { ++ r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), ++ "Failed to add authValue policy to TPM: %s", ++ sym_Tss2_RC_Decode(rc)); ++ goto finish; ++ } ++ } ++ + if (DEBUG_LOGGING || ret_policy_digest) { + log_debug("Acquiring policy digest."); + +@@ -717,9 +738,22 @@ finish: + return r; + } + ++static void hash_pin(const char *pin, size_t len, uint8_t ret_digest[static SHA256_DIGEST_SIZE]) { ++ struct sha256_ctx hash; ++ ++ assert(pin); ++ ++ sha256_init_ctx(&hash); ++ sha256_process_bytes(pin, len, &hash); ++ sha256_finish_ctx(&hash, ret_digest); ++ ++ explicit_bzero_safe(&hash, sizeof(hash)); ++} ++ + int tpm2_seal( + const char *device, + uint32_t pcr_mask, ++ const char *pin, + void **ret_secret, + size_t *ret_secret_size, + void **ret_blob, +@@ -782,7 +816,8 @@ int tpm2_seal( + if (r < 0) + return r; + +- r = tpm2_make_pcr_session(c.esys_context, pcr_mask, UINT16_MAX, NULL, &policy_digest, &pcr_bank); ++ r = tpm2_make_pcr_session(c.esys_context, pcr_mask, UINT16_MAX, !!pin, NULL, &policy_digest, ++ &pcr_bank); + if (r < 0) + goto finish; + +@@ -813,6 +848,10 @@ int tpm2_seal( + .size = sizeof(hmac_sensitive.sensitive), + .sensitive.data.size = 32, + }; ++ if (pin) { ++ hash_pin(pin, strlen(pin), hmac_sensitive.sensitive.userAuth.buffer); ++ hmac_sensitive.sensitive.userAuth.size = SHA256_DIGEST_SIZE; ++ } + assert(sizeof(hmac_sensitive.sensitive.data.buffer) >= hmac_sensitive.sensitive.data.size); + + (void) tpm2_credit_random(c.esys_context); +@@ -910,6 +949,7 @@ int tpm2_seal( + r = 0; + + finish: ++ explicit_bzero_safe(&hmac_sensitive, sizeof(hmac_sensitive)); + primary = flush_context_verbose(c.esys_context, primary); + return r; + } +@@ -923,6 +963,7 @@ int tpm2_unseal( + size_t blob_size, + const void *known_policy_hash, + size_t known_policy_hash_size, ++ const char *pin, + void **ret_secret, + size_t *ret_secret_size) { + +@@ -978,7 +1019,7 @@ int tpm2_unseal( + if (r < 0) + return r; + +- r = tpm2_make_pcr_session(c.esys_context, pcr_mask, pcr_bank, &session, &policy_digest, NULL); ++ r = tpm2_make_pcr_session(c.esys_context, pcr_mask, pcr_bank, !!pin, &session, &policy_digest, NULL); + if (r < 0) + goto finish; + +@@ -1005,11 +1046,38 @@ int tpm2_unseal( + &public, + &hmac_key); + if (rc != TSS2_RC_SUCCESS) { +- r = log_error_errno(SYNTHETIC_ERRNO(ENOTRECOVERABLE), +- "Failed to load HMAC key in TPM: %s", sym_Tss2_RC_Decode(rc)); ++ /* If we're in dictionary attack lockout mode, we should see a lockout error here, which we ++ * need to translate for the caller. */ ++ if (rc == TPM2_RC_LOCKOUT) ++ r = log_error_errno( ++ SYNTHETIC_ERRNO(ENOLCK), ++ "TPM2 device is in dictionary attack lockout mode."); ++ else ++ r = log_error_errno( ++ SYNTHETIC_ERRNO(ENOTRECOVERABLE), ++ "Failed to load HMAC key in TPM: %s", ++ sym_Tss2_RC_Decode(rc)); + goto finish; + } + ++ if (pin) { ++ TPM2B_AUTH auth = { ++ .size = SHA256_DIGEST_SIZE ++ }; ++ ++ hash_pin(pin, strlen(pin), auth.buffer); ++ ++ rc = sym_Esys_TR_SetAuth(c.esys_context, hmac_key, &auth); ++ explicit_bzero_safe(&auth, sizeof(auth)); ++ if (rc != TSS2_RC_SUCCESS) { ++ r = log_error_errno( ++ SYNTHETIC_ERRNO(ENOTRECOVERABLE), ++ "Failed to load PIN in TPM: %s", ++ sym_Tss2_RC_Decode(rc)); ++ goto finish; ++ } ++ } ++ + log_debug("Unsealing HMAC key."); + + rc = sym_Esys_Unseal( +diff --git a/src/shared/tpm2-util.h b/src/shared/tpm2-util.h +index cb57a847e2..784e9fd11e 100644 +--- a/src/shared/tpm2-util.h ++++ b/src/shared/tpm2-util.h +@@ -1,6 +1,8 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + #pragma once + ++#include ++ + #include "json.h" + #include "macro.h" + +@@ -20,10 +22,12 @@ extern TSS2_RC (*sym_Esys_GetRandom)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1 + extern TSS2_RC (*sym_Esys_Initialize)(ESYS_CONTEXT **esys_context, TSS2_TCTI_CONTEXT *tcti, TSS2_ABI_VERSION *abiVersion); + extern TSS2_RC (*sym_Esys_Load)(ESYS_CONTEXT *esysContext, ESYS_TR parentHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_PRIVATE *inPrivate, const TPM2B_PUBLIC *inPublic, ESYS_TR *objectHandle); + extern TSS2_RC (*sym_Esys_PCR_Read)(ESYS_CONTEXT *esysContext, ESYS_TR shandle1,ESYS_TR shandle2, ESYS_TR shandle3, const TPML_PCR_SELECTION *pcrSelectionIn, UINT32 *pcrUpdateCounter, TPML_PCR_SELECTION **pcrSelectionOut, TPML_DIGEST **pcrValues); ++extern TSS2_RC (*sym_Esys_PolicyAuthValue)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3); + extern TSS2_RC (*sym_Esys_PolicyGetDigest)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_DIGEST **policyDigest); + extern TSS2_RC (*sym_Esys_PolicyPCR)(ESYS_CONTEXT *esysContext, ESYS_TR policySession, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_DIGEST *pcrDigest, const TPML_PCR_SELECTION *pcrs); + extern TSS2_RC (*sym_Esys_StartAuthSession)(ESYS_CONTEXT *esysContext, ESYS_TR tpmKey, ESYS_TR bind, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, const TPM2B_NONCE *nonceCaller, TPM2_SE sessionType, const TPMT_SYM_DEF *symmetric, TPMI_ALG_HASH authHash, ESYS_TR *sessionHandle); + extern TSS2_RC (*sym_Esys_Startup)(ESYS_CONTEXT *esysContext, TPM2_SU startupType); ++extern TSS2_RC (*sym_Esys_TR_SetAuth)(ESYS_CONTEXT *esysContext, ESYS_TR handle, TPM2B_AUTH const *authValue); + extern TSS2_RC (*sym_Esys_Unseal)(ESYS_CONTEXT *esysContext, ESYS_TR itemHandle, ESYS_TR shandle1, ESYS_TR shandle2, ESYS_TR shandle3, TPM2B_SENSITIVE_DATA **outData); + + extern const char* (*sym_Tss2_RC_Decode)(TSS2_RC rc); +@@ -35,8 +39,8 @@ extern TSS2_RC (*sym_Tss2_MU_TPM2B_PUBLIC_Unmarshal)(uint8_t const buffer[], siz + + int dlopen_tpm2(void); + +-int tpm2_seal(const char *device, uint32_t pcr_mask, void **ret_secret, size_t *ret_secret_size, void **ret_blob, size_t *ret_blob_size, void **ret_pcr_hash, size_t *ret_pcr_hash_size, uint16_t *ret_pcr_bank, uint16_t *ret_primary_alg); +-int tpm2_unseal(const char *device, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *pcr_hash, size_t pcr_hash_size, void **ret_secret, size_t *ret_secret_size); ++int tpm2_seal(const char *device, uint32_t pcr_mask, const char *pin, void **ret_secret, size_t *ret_secret_size, void **ret_blob, size_t *ret_blob_size, void **ret_pcr_hash, size_t *ret_pcr_hash_size, uint16_t *ret_pcr_bank, uint16_t *ret_primary_alg); ++int tpm2_unseal(const char *device, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *pcr_hash, size_t pcr_hash_size, const char *pin, void **ret_secret, size_t *ret_secret_size); + + #endif + diff --git a/SOURCES/0225-cryptenroll-add-support-for-TPM2-pin.patch b/SOURCES/0225-cryptenroll-add-support-for-TPM2-pin.patch new file mode 100644 index 0000000..4115ec9 --- /dev/null +++ b/SOURCES/0225-cryptenroll-add-support-for-TPM2-pin.patch @@ -0,0 +1,296 @@ +From 9aecba3db5d381dd915e90931c63513141988d92 Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Fri, 18 Feb 2022 11:51:25 +0100 +Subject: [PATCH] cryptenroll: add support for TPM2 pin + +Add support for PIN enrollment with TPM2. A new "tpm2-pin" field is +introduced into metadata to signal that the policy needs to include a +PIN. + +v2: fix tpm2_make_luks2_json in sd-repart +(cherry picked from commit 6c7a1681052c37ef354a000355c4c0d676113a1a) + +Related: #2087652 +--- + src/cryptenroll/cryptenroll-tpm2.c | 85 ++++++++++++++++++++++++++++-- + src/cryptenroll/cryptenroll-tpm2.h | 4 +- + src/cryptenroll/cryptenroll.c | 15 +++++- + src/partition/repart.c | 2 +- + src/shared/tpm2-util.c | 5 +- + src/shared/tpm2-util.h | 6 ++- + 6 files changed, 107 insertions(+), 10 deletions(-) + +diff --git a/src/cryptenroll/cryptenroll-tpm2.c b/src/cryptenroll/cryptenroll-tpm2.c +index f5f6b87d0f..e8c64dd753 100644 +--- a/src/cryptenroll/cryptenroll-tpm2.c ++++ b/src/cryptenroll/cryptenroll-tpm2.c +@@ -1,7 +1,9 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" ++#include "ask-password-api.h" + #include "cryptenroll-tpm2.h" ++#include "env-util.h" + #include "hexdecoct.h" + #include "json.h" + #include "memory-util.h" +@@ -58,11 +60,78 @@ static int search_policy_hash( + return -ENOENT; /* Not found */ + } + ++static int get_pin(char **ret_pin_str, TPM2Flags *ret_flags) { ++ _cleanup_free_ char *pin_str = NULL; ++ int r; ++ TPM2Flags flags = 0; ++ ++ assert(ret_pin_str); ++ assert(ret_flags); ++ ++ r = getenv_steal_erase("NEWPIN", &pin_str); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire PIN from environment: %m"); ++ if (r > 0) ++ flags |= TPM2_FLAGS_USE_PIN; ++ else { ++ for (size_t i = 5;; i--) { ++ _cleanup_strv_free_erase_ char **pin = NULL, **pin2 = NULL; ++ ++ if (i <= 0) ++ return log_error_errno( ++ SYNTHETIC_ERRNO(ENOKEY), "Too many attempts, giving up."); ++ ++ pin = strv_free_erase(pin); ++ r = ask_password_auto( ++ "Please enter TPM2 PIN:", ++ "drive-harddisk", ++ NULL, ++ "tpm2-pin", ++ "cryptenroll.tpm2-pin", ++ USEC_INFINITY, ++ 0, ++ &pin); ++ if (r < 0) ++ return log_error_errno(r, "Failed to ask for user pin: %m"); ++ assert(strv_length(pin) == 1); ++ ++ r = ask_password_auto( ++ "Please enter TPM2 PIN (repeat):", ++ "drive-harddisk", ++ NULL, ++ "tpm2-pin", ++ "cryptenroll.tpm2-pin", ++ USEC_INFINITY, ++ 0, ++ &pin2); ++ if (r < 0) ++ return log_error_errno(r, "Failed to ask for user pin: %m"); ++ assert(strv_length(pin) == 1); ++ ++ if (strv_equal(pin, pin2)) { ++ pin_str = strdup(*pin); ++ if (!pin_str) ++ return log_oom(); ++ flags |= TPM2_FLAGS_USE_PIN; ++ break; ++ } ++ ++ log_error("PINs didn't match, please try again!"); ++ } ++ } ++ ++ *ret_flags = flags; ++ *ret_pin_str = TAKE_PTR(pin_str); ++ ++ return 0; ++} ++ + int enroll_tpm2(struct crypt_device *cd, + const void *volume_key, + size_t volume_key_size, + const char *device, +- uint32_t pcr_mask) { ++ uint32_t pcr_mask, ++ bool use_pin) { + + _cleanup_(erase_and_freep) void *secret = NULL, *secret2 = NULL; + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; +@@ -71,7 +140,9 @@ int enroll_tpm2(struct crypt_device *cd, + _cleanup_free_ void *blob = NULL, *hash = NULL; + uint16_t pcr_bank, primary_alg; + const char *node; ++ _cleanup_(erase_and_freep) char *pin_str = NULL; + int r, keyslot; ++ TPM2Flags flags = 0; + + assert(cd); + assert(volume_key); +@@ -80,7 +151,13 @@ int enroll_tpm2(struct crypt_device *cd, + + assert_se(node = crypt_get_device_name(cd)); + +- r = tpm2_seal(device, pcr_mask, NULL, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg); ++ if (use_pin) { ++ r = get_pin(&pin_str, &flags); ++ if (r < 0) ++ return r; ++ } ++ ++ r = tpm2_seal(device, pcr_mask, pin_str, &secret, &secret_size, &blob, &blob_size, &hash, &hash_size, &pcr_bank, &primary_alg); + if (r < 0) + return r; + +@@ -97,7 +174,7 @@ int enroll_tpm2(struct crypt_device *cd, + + /* Quick verification that everything is in order, we are not in a hurry after all. */ + log_debug("Unsealing for verification..."); +- r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, NULL, &secret2, &secret2_size); ++ r = tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, pin_str, &secret2, &secret2_size); + if (r < 0) + return r; + +@@ -123,7 +200,7 @@ int enroll_tpm2(struct crypt_device *cd, + if (keyslot < 0) + return log_error_errno(keyslot, "Failed to add new TPM2 key to %s: %m", node); + +- r = tpm2_make_luks2_json(keyslot, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, &v); ++ r = tpm2_make_luks2_json(keyslot, pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, flags, &v); + if (r < 0) + return log_error_errno(r, "Failed to prepare TPM2 JSON token object: %m"); + +diff --git a/src/cryptenroll/cryptenroll-tpm2.h b/src/cryptenroll/cryptenroll-tpm2.h +index d5dd1b0003..742f49b8d5 100644 +--- a/src/cryptenroll/cryptenroll-tpm2.h ++++ b/src/cryptenroll/cryptenroll-tpm2.h +@@ -7,9 +7,9 @@ + #include "log.h" + + #if HAVE_TPM2 +-int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask); ++int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask, bool use_pin); + #else +-static inline int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask) { ++static inline int enroll_tpm2(struct crypt_device *cd, const void *volume_key, size_t volume_key_size, const char *device, uint32_t pcr_mask, bool use_pin) { + return log_debug_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), + "TPM2 key enrollment not supported."); + } +diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c +index 7f397f197f..ed19f3f8f4 100644 +--- a/src/cryptenroll/cryptenroll.c ++++ b/src/cryptenroll/cryptenroll.c +@@ -32,6 +32,7 @@ static char *arg_pkcs11_token_uri = NULL; + static char *arg_fido2_device = NULL; + static char *arg_tpm2_device = NULL; + static uint32_t arg_tpm2_pcr_mask = UINT32_MAX; ++static bool arg_tpm2_pin = false; + static char *arg_node = NULL; + static int *arg_wipe_slots = NULL; + static size_t arg_n_wipe_slots = 0; +@@ -100,6 +101,8 @@ static int help(void) { + " Enroll a TPM2 device\n" + " --tpm2-pcrs=PCR1+PCR2+PCR3+…\n" + " Specify TPM2 PCRs to seal against\n" ++ " --tpm2-with-pin=BOOL\n" ++ " Whether to require entering a PIN to unlock the volume\n" + " --wipe-slot=SLOT1,SLOT2,…\n" + " Wipe specified slots\n" + "\nSee the %s for details.\n", +@@ -121,6 +124,7 @@ static int parse_argv(int argc, char *argv[]) { + ARG_FIDO2_DEVICE, + ARG_TPM2_DEVICE, + ARG_TPM2_PCRS, ++ ARG_TPM2_PIN, + ARG_WIPE_SLOT, + ARG_FIDO2_WITH_PIN, + ARG_FIDO2_WITH_UP, +@@ -139,6 +143,7 @@ static int parse_argv(int argc, char *argv[]) { + { "fido2-with-user-verification", required_argument, NULL, ARG_FIDO2_WITH_UV }, + { "tpm2-device", required_argument, NULL, ARG_TPM2_DEVICE }, + { "tpm2-pcrs", required_argument, NULL, ARG_TPM2_PCRS }, ++ { "tpm2-with-pin", required_argument, NULL, ARG_TPM2_PIN }, + { "wipe-slot", required_argument, NULL, ARG_WIPE_SLOT }, + {} + }; +@@ -301,6 +306,14 @@ static int parse_argv(int argc, char *argv[]) { + break; + } + ++ case ARG_TPM2_PIN: { ++ r = parse_boolean_argument("--tpm2-with-pin=", optarg, &arg_tpm2_pin); ++ if (r < 0) ++ return r; ++ ++ break; ++ } ++ + case ARG_WIPE_SLOT: { + const char *p = optarg; + +@@ -563,7 +576,7 @@ static int run(int argc, char *argv[]) { + break; + + case ENROLL_TPM2: +- slot = enroll_tpm2(cd, vk, vks, arg_tpm2_device, arg_tpm2_pcr_mask); ++ slot = enroll_tpm2(cd, vk, vks, arg_tpm2_device, arg_tpm2_pcr_mask, arg_tpm2_pin); + break; + + case _ENROLL_TYPE_INVALID: +diff --git a/src/partition/repart.c b/src/partition/repart.c +index adfec0b9f3..67e379be55 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -2677,7 +2677,7 @@ static int partition_encrypt( + if (keyslot < 0) + return log_error_errno(keyslot, "Failed to add new TPM2 key to %s: %m", node); + +- r = tpm2_make_luks2_json(keyslot, arg_tpm2_pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, &v); ++ r = tpm2_make_luks2_json(keyslot, arg_tpm2_pcr_mask, pcr_bank, primary_alg, blob, blob_size, hash, hash_size, 0, &v); + if (r < 0) + return log_error_errno(r, "Failed to prepare TPM2 JSON token object: %m"); + +diff --git a/src/shared/tpm2-util.c b/src/shared/tpm2-util.c +index aca7b69ab5..44fe899acd 100644 +--- a/src/shared/tpm2-util.c ++++ b/src/shared/tpm2-util.c +@@ -1291,6 +1291,7 @@ int tpm2_make_luks2_json( + size_t blob_size, + const void *policy_hash, + size_t policy_hash_size, ++ TPM2Flags flags, + JsonVariant **ret) { + + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *a = NULL; +@@ -1331,7 +1332,9 @@ int tpm2_make_luks2_json( + JSON_BUILD_PAIR("tpm2-pcrs", JSON_BUILD_VARIANT(a)), + JSON_BUILD_PAIR_CONDITION(!!tpm2_pcr_bank_to_string(pcr_bank), "tpm2-pcr-bank", JSON_BUILD_STRING(tpm2_pcr_bank_to_string(pcr_bank))), + JSON_BUILD_PAIR_CONDITION(!!tpm2_primary_alg_to_string(primary_alg), "tpm2-primary-alg", JSON_BUILD_STRING(tpm2_primary_alg_to_string(primary_alg))), +- JSON_BUILD_PAIR("tpm2-policy-hash", JSON_BUILD_HEX(policy_hash, policy_hash_size)))); ++ JSON_BUILD_PAIR("tpm2-policy-hash", JSON_BUILD_HEX(policy_hash, policy_hash_size)), ++ JSON_BUILD_PAIR("tpm2-pin", JSON_BUILD_BOOLEAN(flags & TPM2_FLAGS_USE_PIN))) ++ ); + if (r < 0) + return r; + +diff --git a/src/shared/tpm2-util.h b/src/shared/tpm2-util.h +index 784e9fd11e..5a9bcf8c24 100644 +--- a/src/shared/tpm2-util.h ++++ b/src/shared/tpm2-util.h +@@ -6,6 +6,10 @@ + #include "json.h" + #include "macro.h" + ++typedef enum TPM2Flags { ++ TPM2_FLAGS_USE_PIN = 1 << 0, ++} TPM2Flags; ++ + #if HAVE_TPM2 + + #include +@@ -49,7 +53,7 @@ int tpm2_find_device_auto(int log_level, char **ret); + + int tpm2_parse_pcrs(const char *s, uint32_t *ret); + +-int tpm2_make_luks2_json(int keyslot, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, JsonVariant **ret); ++int tpm2_make_luks2_json(int keyslot, uint32_t pcr_mask, uint16_t pcr_bank, uint16_t primary_alg, const void *blob, size_t blob_size, const void *policy_hash, size_t policy_hash_size, TPM2Flags flags, JsonVariant **ret); + + #define TPM2_PCRS_MAX 24 + diff --git a/SOURCES/0226-cryptsetup-add-support-for-TPM2-pin.patch b/SOURCES/0226-cryptsetup-add-support-for-TPM2-pin.patch new file mode 100644 index 0000000..94a7c3c --- /dev/null +++ b/SOURCES/0226-cryptsetup-add-support-for-TPM2-pin.patch @@ -0,0 +1,292 @@ +From 2418e9c1409ba04ddff516a83d83b2daa3417832 Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Fri, 18 Feb 2022 11:56:02 +0100 +Subject: [PATCH] cryptsetup: add support for TPM2 pin + +Extend cryptsetup for TPM2 pin entry, similar to FIDO2. + +(cherry picked from commit bea344a1a426e615ba87b66b6d3ff4b265c57a95) + +Related: #2087652 +--- + src/cryptsetup/cryptsetup-tpm2.c | 108 ++++++++++++++++++++++++++++++- + src/cryptsetup/cryptsetup-tpm2.h | 16 ++++- + src/cryptsetup/cryptsetup.c | 16 ++++- + 3 files changed, 135 insertions(+), 5 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup-tpm2.c b/src/cryptsetup/cryptsetup-tpm2.c +index 05d76a684d..b84d64def8 100644 +--- a/src/cryptsetup/cryptsetup-tpm2.c ++++ b/src/cryptsetup/cryptsetup-tpm2.c +@@ -1,7 +1,9 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" ++#include "ask-password-api.h" + #include "cryptsetup-tpm2.h" ++#include "env-util.h" + #include "fileio.h" + #include "hexdecoct.h" + #include "json.h" +@@ -9,6 +11,47 @@ + #include "random-util.h" + #include "tpm2-util.h" + ++static int get_pin(usec_t until, AskPasswordFlags ask_password_flags, bool headless, char **ret_pin_str) { ++ _cleanup_free_ char *pin_str = NULL; ++ _cleanup_strv_free_erase_ char **pin = NULL; ++ int r; ++ ++ assert(ret_pin_str); ++ ++ r = getenv_steal_erase("PIN", &pin_str); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire PIN from environment: %m"); ++ if (!r) { ++ if (headless) ++ return log_error_errno( ++ SYNTHETIC_ERRNO(ENOPKG), ++ "PIN querying disabled via 'headless' option. " ++ "Use the '$PIN' environment variable."); ++ ++ pin = strv_free_erase(pin); ++ r = ask_password_auto( ++ "Please enter TPM2 PIN:", ++ "drive-harddisk", ++ NULL, ++ "tpm2-pin", ++ "cryptsetup.tpm2-pin", ++ until, ++ ask_password_flags, ++ &pin); ++ if (r < 0) ++ return log_error_errno(r, "Failed to ask for user pin: %m"); ++ assert(strv_length(pin) == 1); ++ ++ pin_str = strdup(pin[0]); ++ if (!pin_str) ++ return log_oom(); ++ } ++ ++ *ret_pin_str = TAKE_PTR(pin_str); ++ ++ return r; ++} ++ + int acquire_tpm2_key( + const char *volume_name, + const char *device, +@@ -22,6 +65,10 @@ int acquire_tpm2_key( + size_t key_data_size, + const void *policy_hash, + size_t policy_hash_size, ++ TPM2Flags flags, ++ usec_t until, ++ bool headless, ++ AskPasswordFlags ask_password_flags, + void **ret_decrypted_key, + size_t *ret_decrypted_key_size) { + +@@ -64,7 +111,51 @@ int acquire_tpm2_key( + blob = loaded_blob; + } + +- return tpm2_unseal(device, pcr_mask, pcr_bank, primary_alg, blob, blob_size, policy_hash, policy_hash_size, NULL, ret_decrypted_key, ret_decrypted_key_size); ++ if (!(flags & TPM2_FLAGS_USE_PIN)) ++ return tpm2_unseal( ++ device, ++ pcr_mask, ++ pcr_bank, ++ primary_alg, ++ blob, ++ blob_size, ++ policy_hash, ++ policy_hash_size, ++ NULL, ++ ret_decrypted_key, ++ ret_decrypted_key_size); ++ ++ for (int i = 5;; i--) { ++ _cleanup_(erase_and_freep) char *pin_str = NULL; ++ ++ if (i <= 0) ++ return -EACCES; ++ ++ r = get_pin(until, ask_password_flags, headless, &pin_str); ++ if (r < 0) ++ return r; ++ ++ r = tpm2_unseal( ++ device, ++ pcr_mask, ++ pcr_bank, ++ primary_alg, ++ blob, ++ blob_size, ++ policy_hash, ++ policy_hash_size, ++ pin_str, ++ ret_decrypted_key, ++ ret_decrypted_key_size); ++ /* We get this error in case there is an authentication policy mismatch. This should ++ * not happen, but this avoids confusing behavior, just in case. */ ++ if (IN_SET(r, -EPERM, -ENOLCK)) ++ return r; ++ if (r < 0) ++ continue; ++ ++ return r; ++ } + } + + int find_tpm2_auto_data( +@@ -79,11 +170,13 @@ int find_tpm2_auto_data( + void **ret_policy_hash, + size_t *ret_policy_hash_size, + int *ret_keyslot, +- int *ret_token) { ++ int *ret_token, ++ TPM2Flags *ret_flags) { + + _cleanup_free_ void *blob = NULL, *policy_hash = NULL; + size_t blob_size = 0, policy_hash_size = 0; + int r, keyslot = -1, token = -1; ++ TPM2Flags flags = 0; + uint32_t pcr_mask = 0; + uint16_t pcr_bank = UINT16_MAX; /* default: pick automatically */ + uint16_t primary_alg = TPM2_ALG_ECC; /* ECC was the only supported algorithm in systemd < 250, use that as implied default, for compatibility */ +@@ -196,6 +289,16 @@ int find_tpm2_auto_data( + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), + "Invalid base64 data in 'tpm2-policy-hash' field."); + ++ w = json_variant_by_key(v, "tpm2-pin"); ++ if (w) { ++ if (!json_variant_is_boolean(w)) ++ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), ++ "TPM2 PIN policy is not a boolean."); ++ ++ if (json_variant_boolean(w)) ++ flags |= TPM2_FLAGS_USE_PIN; ++ } ++ + break; + } + +@@ -215,6 +318,7 @@ int find_tpm2_auto_data( + *ret_token = token; + *ret_pcr_bank = pcr_bank; + *ret_primary_alg = primary_alg; ++ *ret_flags = flags; + + return 0; + } +diff --git a/src/cryptsetup/cryptsetup-tpm2.h b/src/cryptsetup/cryptsetup-tpm2.h +index bd04620462..ab16d0a18f 100644 +--- a/src/cryptsetup/cryptsetup-tpm2.h ++++ b/src/cryptsetup/cryptsetup-tpm2.h +@@ -3,9 +3,11 @@ + + #include + ++#include "ask-password-api.h" + #include "cryptsetup-util.h" + #include "log.h" + #include "time-util.h" ++#include "tpm2-util.h" + + #if HAVE_TPM2 + +@@ -22,6 +24,10 @@ int acquire_tpm2_key( + size_t key_data_size, + const void *policy_hash, + size_t policy_hash_size, ++ TPM2Flags flags, ++ usec_t until, ++ bool headless, ++ AskPasswordFlags ask_password_flags, + void **ret_decrypted_key, + size_t *ret_decrypted_key_size); + +@@ -37,7 +43,8 @@ int find_tpm2_auto_data( + void **ret_policy_hash, + size_t *ret_policy_hash_size, + int *ret_keyslot, +- int *ret_token); ++ int *ret_token, ++ TPM2Flags *ret_flags); + + #else + +@@ -54,6 +61,10 @@ static inline int acquire_tpm2_key( + size_t key_data_size, + const void *policy_hash, + size_t policy_hash_size, ++ TPM2Flags flags, ++ usec_t until, ++ bool headless, ++ AskPasswordFlags ask_password_flags, + void **ret_decrypted_key, + size_t *ret_decrypted_key_size) { + +@@ -73,7 +84,8 @@ static inline int find_tpm2_auto_data( + void **ret_policy_hash, + size_t *ret_policy_hash_size, + int *ret_keyslot, +- int *ret_token) { ++ int *ret_token, ++ TPM2Flags *ret_flags) { + + return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), + "TPM2 support not available."); +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index dddd976dc8..ede0f7ed0b 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -1301,9 +1301,15 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2( + key_file, arg_keyfile_size, arg_keyfile_offset, + key_data, key_data_size, + NULL, 0, /* we don't know the policy hash */ ++ 0, /* PIN is currently unhandled in this case */ ++ until, ++ arg_headless, ++ arg_ask_password_flags, + &decrypted_key, &decrypted_key_size); + if (r >= 0) + break; ++ if (IN_SET(r, -EACCES, -ENOLCK)) ++ return log_error_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 PIN unlock failed, falling back to traditional unlocking."); + if (ERRNO_IS_NOT_SUPPORTED(r)) /* TPM2 support not compiled in? */ + return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 support not available, falling back to traditional unlocking."); + if (r != -EAGAIN) /* EAGAIN means: no tpm2 chip found */ +@@ -1335,6 +1341,7 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2( + for (;;) { + uint32_t pcr_mask; + uint16_t pcr_bank, primary_alg; ++ TPM2Flags tpm2_flags; + + r = find_tpm2_auto_data( + cd, +@@ -1346,7 +1353,8 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2( + &blob, &blob_size, + &policy_hash, &policy_hash_size, + &keyslot, +- &token); ++ &token, ++ &tpm2_flags); + if (r == -ENXIO) + /* No further TPM2 tokens found in the LUKS2 header. */ + return log_debug_errno(SYNTHETIC_ERRNO(EAGAIN), +@@ -1369,7 +1377,13 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2( + NULL, 0, 0, /* no key file */ + blob, blob_size, + policy_hash, policy_hash_size, ++ tpm2_flags, ++ until, ++ arg_headless, ++ arg_ask_password_flags, + &decrypted_key, &decrypted_key_size); ++ if (IN_SET(r, -EACCES, -ENOLCK)) ++ return log_error_errno(SYNTHETIC_ERRNO(EAGAIN), "TPM2 PIN unlock failed, falling back to traditional unlocking."); + if (r != -EPERM) + break; + diff --git a/SOURCES/0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch b/SOURCES/0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch new file mode 100644 index 0000000..4ac80fe --- /dev/null +++ b/SOURCES/0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch @@ -0,0 +1,218 @@ +From 1b7d251ab836ba703913eda149f05bd03559c483 Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Fri, 18 Feb 2022 12:00:12 +0100 +Subject: [PATCH] cryptsetup: add libcryptsetup TPM2 PIN support + +This is unfinished: we don't have any way to actually query for PINs +interactively this way. It is similar to FIDO2 and PKCS#11 in this +regard. + +Nonetheless, this code is capable of validating and dumping tokens, so +it is already useful as-is. + +(cherry picked from commit 1f895adac287b5f1b6b854caa586093616ccc172) + +Related: #2087652 +--- + .../cryptsetup-token-systemd-tpm2.c | 18 +++++++++-- + src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c | 32 +++++++++++++++++-- + src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h | 6 +++- + 3 files changed, 51 insertions(+), 5 deletions(-) + +diff --git a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c +index e2d28a5dda..23df974999 100644 +--- a/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c ++++ b/src/cryptsetup/cryptsetup-tokens/cryptsetup-token-systemd-tpm2.c +@@ -6,8 +6,10 @@ + #include "cryptsetup-token.h" + #include "cryptsetup-token-util.h" + #include "hexdecoct.h" ++#include "json.h" + #include "luks2-tpm2.h" + #include "memory-util.h" ++#include "strv.h" + #include "tpm2-util.h" + #include "version.h" + +@@ -78,7 +80,8 @@ _public_ int cryptsetup_token_open( + if (usrptr) + params = *(systemd_tpm2_plugin_params *)usrptr; + +- r = parse_luks2_tpm2_data(json, params.search_pcr_mask, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash); ++ TPM2Flags flags = 0; ++ r = parse_luks2_tpm2_data(json, params.search_pcr_mask, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash, &flags); + if (r < 0) + return log_debug_open_error(cd, r); + +@@ -101,6 +104,7 @@ _public_ int cryptsetup_token_open( + blob_size, + policy_hash, + policy_hash_size, ++ flags, + &decrypted_key, + &decrypted_key_size); + if (r < 0) +@@ -135,6 +139,7 @@ _public_ void cryptsetup_token_dump( + const char *json /* validated 'systemd-tpm2' token if cryptsetup_token_validate is defined */) { + + int r; ++ TPM2Flags flags = 0; + uint32_t pcr_mask; + uint16_t pcr_bank, primary_alg; + size_t decoded_blob_size; +@@ -144,7 +149,7 @@ _public_ void cryptsetup_token_dump( + + assert(json); + +- r = parse_luks2_tpm2_data(json, UINT32_MAX, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash); ++ r = parse_luks2_tpm2_data(json, UINT32_MAX, &pcr_mask, &pcr_bank, &primary_alg, &base64_blob, &hex_policy_hash, &flags); + if (r < 0) + return (void) crypt_log_debug_errno(cd, r, "Failed to parse " TOKEN_NAME " metadata: %m."); + +@@ -171,6 +176,7 @@ _public_ void cryptsetup_token_dump( + crypt_log(cd, "\ttpm2-primary-alg: %s\n", strna(tpm2_primary_alg_to_string(primary_alg))); + crypt_log(cd, "\ttpm2-blob: %s\n", blob_str); + crypt_log(cd, "\ttpm2-policy-hash:" CRYPT_DUMP_LINE_SEP "%s\n", policy_hash_str); ++ crypt_log(cd, "\ttpm2-pin: %s\n", true_false(flags & TPM2_FLAGS_USE_PIN)); + } + + /* +@@ -268,5 +274,13 @@ _public_ int cryptsetup_token_validate( + if (r < 0) + return crypt_log_debug_errno(cd, r, "Invalid base64 data in 'tpm2-policy-hash' field: %m"); + ++ w = json_variant_by_key(v, "tpm2-pin"); ++ if (w) { ++ if (!json_variant_is_boolean(w)) { ++ crypt_log_debug(cd, "TPM2 PIN policy is not a boolean."); ++ return 1; ++ } ++ } ++ + return 0; + } +diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c +index de189c7bed..0d6e4bc0f8 100644 +--- a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c ++++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.c +@@ -1,11 +1,15 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include "alloc-util.h" ++#include "ask-password-api.h" ++#include "env-util.h" + #include "hexdecoct.h" + #include "json.h" ++#include "log.h" + #include "luks2-tpm2.h" + #include "parse-util.h" + #include "random-util.h" ++#include "strv.h" + #include "tpm2-util.h" + + int acquire_luks2_key( +@@ -17,10 +21,12 @@ int acquire_luks2_key( + size_t key_data_size, + const void *policy_hash, + size_t policy_hash_size, ++ TPM2Flags flags, + void **ret_decrypted_key, + size_t *ret_decrypted_key_size) { + + _cleanup_free_ char *auto_device = NULL; ++ _cleanup_(erase_and_freep) char *pin_str = NULL; + int r; + + assert(ret_decrypted_key); +@@ -36,12 +42,22 @@ int acquire_luks2_key( + device = auto_device; + } + ++ r = getenv_steal_erase("PIN", &pin_str); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire PIN from environment: %m"); ++ if (!r) { ++ /* PIN entry is not supported by plugin, let it fallback, possibly to sd-cryptsetup's ++ * internal handling. */ ++ if (flags & TPM2_FLAGS_USE_PIN) ++ return -EOPNOTSUPP; ++ } ++ + return tpm2_unseal( + device, + pcr_mask, pcr_bank, + primary_alg, + key_data, key_data_size, +- policy_hash, policy_hash_size, NULL, ++ policy_hash, policy_hash_size, pin_str, + ret_decrypted_key, ret_decrypted_key_size); + } + +@@ -53,7 +69,8 @@ int parse_luks2_tpm2_data( + uint16_t *ret_pcr_bank, + uint16_t *ret_primary_alg, + char **ret_base64_blob, +- char **ret_hex_policy_hash) { ++ char **ret_hex_policy_hash, ++ TPM2Flags *ret_flags) { + + int r; + JsonVariant *w, *e; +@@ -61,6 +78,7 @@ int parse_luks2_tpm2_data( + uint16_t pcr_bank = UINT16_MAX, primary_alg = TPM2_ALG_ECC; + _cleanup_free_ char *base64_blob = NULL, *hex_policy_hash = NULL; + _cleanup_(json_variant_unrefp) JsonVariant *v = NULL; ++ TPM2Flags flags = 0; + + assert(json); + assert(ret_pcr_mask); +@@ -138,11 +156,21 @@ int parse_luks2_tpm2_data( + if (!hex_policy_hash) + return -ENOMEM; + ++ w = json_variant_by_key(v, "tpm2-pin"); ++ if (w) { ++ if (!json_variant_is_boolean(w)) ++ return -EINVAL; ++ ++ if (json_variant_boolean(w)) ++ flags |= TPM2_FLAGS_USE_PIN; ++ } ++ + *ret_pcr_mask = pcr_mask; + *ret_pcr_bank = pcr_bank; + *ret_primary_alg = primary_alg; + *ret_base64_blob = TAKE_PTR(base64_blob); + *ret_hex_policy_hash = TAKE_PTR(hex_policy_hash); ++ *ret_flags = flags; + + return 0; + } +diff --git a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h +index 0c93ea82cc..34c93216ee 100644 +--- a/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h ++++ b/src/cryptsetup/cryptsetup-tokens/luks2-tpm2.h +@@ -2,6 +2,8 @@ + + #pragma once + ++#include "tpm2-util.h" ++ + struct crypt_device; + + int acquire_luks2_key( +@@ -13,6 +15,7 @@ int acquire_luks2_key( + size_t key_data_size, + const void *policy_hash, + size_t policy_hash_size, ++ TPM2Flags flags, + void **ret_decrypted_key, + size_t *ret_decrypted_key_size); + +@@ -23,4 +26,5 @@ int parse_luks2_tpm2_data( + uint16_t *ret_pcr_bank, + uint16_t *ret_primary_alg, + char **ret_base64_blob, +- char **ret_hex_policy_hash); ++ char **ret_hex_policy_hash, ++ TPM2Flags *ret_flags); diff --git a/SOURCES/0228-cryptenroll-add-TPM2-PIN-documentation.patch b/SOURCES/0228-cryptenroll-add-TPM2-PIN-documentation.patch new file mode 100644 index 0000000..6490007 --- /dev/null +++ b/SOURCES/0228-cryptenroll-add-TPM2-PIN-documentation.patch @@ -0,0 +1,41 @@ +From ae4da9f80eb84469b0fbb3e02bfe95751d4513dd Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Fri, 18 Feb 2022 12:51:00 +0100 +Subject: [PATCH] cryptenroll: add TPM2 PIN documentation + +(cherry picked from commit caeb5604f9fd8e7aa43c7a1c853f8a7597240b17) + +Related: #2087652 +--- + man/systemd-cryptenroll.xml | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/man/systemd-cryptenroll.xml b/man/systemd-cryptenroll.xml +index d5fdb54cdd..58a4626768 100644 +--- a/man/systemd-cryptenroll.xml ++++ b/man/systemd-cryptenroll.xml +@@ -299,6 +299,24 @@ + signatures likely will validate against pre-existing certificates. + + ++ ++ BOOL ++ ++ When enrolling a TPM2 device, controls whether to require the user to enter a PIN ++ when unlocking the volume in addition to PCR binding, based on TPM2 policy authentication. Defaults ++ to no. Despite being called PIN, any character can be used, not just numbers. ++ ++ ++ Note that incorrect PIN entry when unlocking increments the ++ TPM dictionary attack lockout mechanism, and may lock out users for a prolonged time, depending on ++ its configuration. The lockout mechanism is a global property of the TPM, ++ systemd-cryptenroll does not control or configure the lockout mechanism. You may ++ use tpm2-tss tools to inspect or configure the dictionary attack lockout, with ++ tpm2_getcap1 and ++ tpm2_dictionarylockout1 ++ commands, respectively. ++ ++ + + SLOT + diff --git a/SOURCES/0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch b/SOURCES/0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch new file mode 100644 index 0000000..536fbc8 --- /dev/null +++ b/SOURCES/0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch @@ -0,0 +1,74 @@ +From d3615420322bf3c9666fe5580317ed0aec20fe62 Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Fri, 18 Feb 2022 21:13:41 +0100 +Subject: [PATCH] cryptsetup: add manual TPM2 PIN configuration + +Handle the case where TPM2 metadata is not available and explicitly +provided in crypttab. This adds a new "tpm2-pin" option to crypttab +options for this purpose. + +(cherry picked from commit 4005d41ef0d007021deb0536800fc782ff670420) + +Related: #2087652 +--- + man/crypttab.xml | 8 ++++++++ + src/cryptsetup/cryptsetup.c | 13 ++++++++++++- + 2 files changed, 20 insertions(+), 1 deletion(-) + +diff --git a/man/crypttab.xml b/man/crypttab.xml +index ac5c6ef666..22411166a8 100644 +--- a/man/crypttab.xml ++++ b/man/crypttab.xml +@@ -677,6 +677,14 @@ + of the current PCR state. + + ++ ++ ++ ++ Takes a boolean argument, defaults to false. Controls whether ++ TPM2 volume unlocking is bound to a PIN in addition to PCRs. Similarly, this option is only useful ++ when TPM2 enrollment metadata is not available. ++ ++ + + + +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index ede0f7ed0b..fc1f37730f 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -82,6 +82,7 @@ static char *arg_fido2_rp_id = NULL; + static char *arg_tpm2_device = NULL; + static bool arg_tpm2_device_auto = false; + static uint32_t arg_tpm2_pcr_mask = UINT32_MAX; ++static bool arg_tpm2_pin = false; + static bool arg_headless = false; + static usec_t arg_token_timeout_usec = 30*USEC_PER_SEC; + +@@ -387,6 +388,16 @@ static int parse_one_option(const char *option) { + arg_tpm2_pcr_mask |= mask; + } + ++ } else if ((val = startswith(option, "tpm2-pin="))) { ++ ++ r = parse_boolean(val); ++ if (r < 0) { ++ log_error_errno(r, "Failed to parse %s, ignoring: %m", option); ++ return 0; ++ } ++ ++ arg_tpm2_pin = r; ++ + } else if ((val = startswith(option, "try-empty-password="))) { + + r = parse_boolean(val); +@@ -1301,7 +1312,7 @@ static int attach_luks_or_plain_or_bitlk_by_tpm2( + key_file, arg_keyfile_size, arg_keyfile_offset, + key_data, key_data_size, + NULL, 0, /* we don't know the policy hash */ +- 0, /* PIN is currently unhandled in this case */ ++ arg_tpm2_pin, + until, + arg_headless, + arg_ask_password_flags, diff --git a/SOURCES/0230-cryptenroll-add-tests-for-TPM2-unlocking.patch b/SOURCES/0230-cryptenroll-add-tests-for-TPM2-unlocking.patch new file mode 100644 index 0000000..9e73f69 --- /dev/null +++ b/SOURCES/0230-cryptenroll-add-tests-for-TPM2-unlocking.patch @@ -0,0 +1,166 @@ +From 6a31abd9fdfe9b08c169b315dd3bc18abbe200b0 Mon Sep 17 00:00:00 2001 +From: Grigori Goronzy +Date: Thu, 24 Feb 2022 01:28:29 +0100 +Subject: [PATCH] cryptenroll: add tests for TPM2 unlocking + +Add tests for enrolling and unlocking. Various cases are tested: + +- Default PCR 7 policy w/o PIN, good and bad cases (wrong PCR) +- PCR 7 + PIN policy, good and bad cases (wrong PCR, wrong PIN) +- Non-default PCR 0+7 policy w/o PIN, good and bad cases (wrong PCR 0) + +v2: rename test, fix tss2 library installation, fix CI failures +v3: fix ppc64, load module +(cherry picked from commit fd8b9248206734b655de503f8bb16c2d154934ed)Q + +Related: #2087652 +--- + test/TEST-70-TPM2/Makefile | 6 +++++ + test/TEST-70-TPM2/test.sh | 40 +++++++++++++++++++++++++++ + test/test-functions | 2 +- + test/units/testsuite-70.service | 7 +++++ + test/units/testsuite-70.sh | 48 +++++++++++++++++++++++++++++++++ + 5 files changed, 102 insertions(+), 1 deletion(-) + create mode 100644 test/TEST-70-TPM2/Makefile + create mode 100755 test/TEST-70-TPM2/test.sh + create mode 100644 test/units/testsuite-70.service + create mode 100755 test/units/testsuite-70.sh + +diff --git a/test/TEST-70-TPM2/Makefile b/test/TEST-70-TPM2/Makefile +new file mode 100644 +index 0000000000..9f65d4ca4f +--- /dev/null ++++ b/test/TEST-70-TPM2/Makefile +@@ -0,0 +1,6 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++ ++all setup run clean clean-again: ++ @TEST_BASE_DIR=../ ./test.sh --$@ ++ ++.PHONY: all setup run clean clean-again +diff --git a/test/TEST-70-TPM2/test.sh b/test/TEST-70-TPM2/test.sh +new file mode 100755 +index 0000000000..d716614bcf +--- /dev/null ++++ b/test/TEST-70-TPM2/test.sh +@@ -0,0 +1,40 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -e ++ ++TEST_DESCRIPTION="cryptenroll/cryptsetup with TPM2 devices" ++IMAGE_NAME="tpm2" ++TEST_NO_NSPAWN=1 ++TEST_REQUIRE_INSTALL_TESTS=0 ++ ++# shellcheck source=test/test-functions ++. "${TEST_BASE_DIR:?}/test-functions" ++ ++command -v swtpm >/dev/null 2>&1 || exit 0 ++command -v tpm2_pcrextend >/dev/null 2>&1 || exit 0 ++ ++test_append_files() { ++ ( ++ local workspace="${1:?}" ++ ++ instmods tpm tpm_tis tpm_ibmvtpm ++ install_dmevent ++ generate_module_dependencies ++ inst_binary tpm2_pcrextend ++ ) ++} ++ ++machine="$(uname -m)" ++tpmdevice="tpm-tis" ++if [ "$machine" = "ppc64le" ]; then ++ # tpm-spapr support was introduced in qemu 5.0.0. Skip test for old qemu versions. ++ qemu_min_version "5.0.0" || exit 0 ++ tpmdevice="tpm-spapr" ++fi ++ ++tpmstate=$(mktemp -d) ++swtpm socket --tpm2 --tpmstate dir="$tpmstate" --ctrl type=unixio,path="$tpmstate/sock" & ++trap 'kill %%; rm -rf $tpmstate' SIGINT EXIT ++QEMU_OPTIONS="-chardev socket,id=chrtpm,path=$tpmstate/sock -tpmdev emulator,id=tpm0,chardev=chrtpm -device $tpmdevice,tpmdev=tpm0" ++ ++do_test "$@" +diff --git a/test/test-functions b/test/test-functions +index 4a6436a74b..050fefaf1b 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1198,7 +1198,7 @@ install_missing_libraries() { + local lib path + # A number of dependencies is now optional via dlopen, so the install + # script will not pick them up, since it looks at linkage. +- for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu libfido2 libbpf libelf libdw; do ++ for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw; do + ddebug "Searching for $lib via pkg-config" + if pkg-config --exists "$lib"; then + path="$(pkg-config --variable=libdir "$lib")" +diff --git a/test/units/testsuite-70.service b/test/units/testsuite-70.service +new file mode 100644 +index 0000000000..c13c2d51a3 +--- /dev/null ++++ b/test/units/testsuite-70.service +@@ -0,0 +1,7 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++[Unit] ++Description=TEST-70-TPM2 ++ ++[Service] ++Type=oneshot ++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +diff --git a/test/units/testsuite-70.sh b/test/units/testsuite-70.sh +new file mode 100755 +index 0000000000..f395ef4e5e +--- /dev/null ++++ b/test/units/testsuite-70.sh +@@ -0,0 +1,48 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -ex ++ ++export SYSTEMD_LOG_LEVEL=debug ++ ++ ++# Prepare fresh disk image ++img="/var/tmp/test.img" ++dd if=/dev/zero of=$img bs=1024k count=20 status=none ++echo -n passphrase >/tmp/passphrase ++cryptsetup luksFormat -q --use-urandom $img /tmp/passphrase ++ ++# Enroll unlock with default PCR policy ++env PASSWORD=passphrase systemd-cryptenroll --tpm2-device=auto $img ++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 ++/usr/lib/systemd/systemd-cryptsetup detach test-volume ++ ++# Check with wrong PCR ++tpm2_pcrextend 7:sha256=0000000000000000000000000000000000000000000000000000000000000000 ++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && { echo 'unexpected success'; exit 1; } ++ ++# Enroll unlock with PCR+PIN policy ++systemd-cryptenroll --wipe-slot=tpm2 $img ++env PASSWORD=passphrase NEWPIN=123456 systemd-cryptenroll --tpm2-device=auto --tpm2-with-pin=true $img ++env PIN=123456 /usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 ++/usr/lib/systemd/systemd-cryptsetup detach test-volume ++ ++# Check failure with wrong PIN ++env PIN=123457 /usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && { echo 'unexpected success'; exit 1; } ++ ++# Check failure with wrong PCR (and correct PIN) ++tpm2_pcrextend 7:sha256=0000000000000000000000000000000000000000000000000000000000000000 ++env PIN=123456 /usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && { echo 'unexpected success'; exit 1; } ++ ++# Enroll unlock with PCR 0+7 ++systemd-cryptenroll --wipe-slot=tpm2 $img ++env PASSWORD=passphrase systemd-cryptenroll --tpm2-device=auto --tpm2-pcrs=0+7 $img ++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 ++/usr/lib/systemd/systemd-cryptsetup detach test-volume ++ ++# Check with wrong PCR 0 ++tpm2_pcrextend 0:sha256=0000000000000000000000000000000000000000000000000000000000000000 ++/usr/lib/systemd/systemd-cryptsetup attach test-volume $img - tpm2-device=auto,headless=1 && exit 1 ++ ++echo OK >/testok ++ ++exit 0 diff --git a/SOURCES/0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch b/SOURCES/0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch new file mode 100644 index 0000000..d748e40 --- /dev/null +++ b/SOURCES/0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch @@ -0,0 +1,434 @@ +From 75e45d84d9391e29d49f6ec05272c3fb9a92bbd8 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Sat, 19 Feb 2022 00:08:39 +0100 +Subject: [PATCH] env-util: replace unsetenv_erase() by new + getenv_steal_erase() helper + +The new helper combines a bunch of steps every invocation of +unsetenv_erase() did so far: getenv() + strdup() + unsetenv_erase(). +Let's unify this into one helper that is harder to use incorrectly. It's +in inspired by TAKE_PTR() in a way: get the env var out and invalidate +where it was before. + +(cherry picked from commit e99ca1474145f7fad38bb0255d344f4ad7717ef5) + +Related: #2087652 +--- + src/basic/env-util.c | 27 ++++++++++--- + src/basic/env-util.h | 2 + + src/cryptenroll/cryptenroll-password.c | 15 ++----- + src/cryptenroll/cryptenroll.c | 20 ++++------ + src/cryptsetup/cryptsetup-fido2.c | 12 +++--- + src/cryptsetup/cryptsetup.c | 15 ++++--- + src/home/homectl.c | 55 ++++++++++++-------------- + src/shared/pkcs11-util.c | 11 +++--- + src/test/test-env-util.c | 16 +++++--- + 9 files changed, 89 insertions(+), 84 deletions(-) + +diff --git a/src/basic/env-util.c b/src/basic/env-util.c +index 455f5d76f5..b60c9f9fdc 100644 +--- a/src/basic/env-util.c ++++ b/src/basic/env-util.c +@@ -857,19 +857,36 @@ int getenv_path_list(const char *name, char ***ret_paths) { + return 1; + } + +-int unsetenv_erase(const char *name) { +- char *p; ++int getenv_steal_erase(const char *name, char **ret) { ++ _cleanup_(erase_and_freep) char *a = NULL; ++ char *e; + + assert(name); + +- p = getenv(name); +- if (!p) ++ /* Reads an environment variable, makes a copy of it, erases its memory in the environment block and removes ++ * it from there. Usecase: reading passwords from the env block (which is a bad idea, but useful for ++ * testing, and given that people are likely going to misuse this, be thorough) */ ++ ++ e = getenv(name); ++ if (!e) { ++ if (ret) ++ *ret = NULL; + return 0; ++ } + +- string_erase(p); ++ if (ret) { ++ a = strdup(e); ++ if (!a) ++ return -ENOMEM; ++ } ++ ++ string_erase(e); + + if (unsetenv(name) < 0) + return -errno; + ++ if (ret) ++ *ret = TAKE_PTR(a); ++ + return 1; + } +diff --git a/src/basic/env-util.h b/src/basic/env-util.h +index 38bfc8a3f2..e4084af9a5 100644 +--- a/src/basic/env-util.h ++++ b/src/basic/env-util.h +@@ -70,3 +70,5 @@ int setenv_systemd_exec_pid(bool update_only); + int getenv_path_list(const char *name, char ***ret_paths); + + int unsetenv_erase(const char *name); ++ ++int getenv_steal_erase(const char *name, char **ret); +diff --git a/src/cryptenroll/cryptenroll-password.c b/src/cryptenroll/cryptenroll-password.c +index 1775912d8e..9b7c8b5400 100644 +--- a/src/cryptenroll/cryptenroll-password.c ++++ b/src/cryptenroll/cryptenroll-password.c +@@ -17,20 +17,13 @@ int enroll_password( + _cleanup_free_ char *error = NULL; + const char *node; + int r, keyslot; +- char *e; + + assert_se(node = crypt_get_device_name(cd)); + +- e = getenv("NEWPASSWORD"); +- if (e) { +- +- new_password = strdup(e); +- if (!new_password) +- return log_oom(); +- +- assert_se(unsetenv_erase("NEWPASSWORD") >= 0); +- +- } else { ++ r = getenv_steal_erase("NEWPASSWORD", &new_password); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire password from environment: %m"); ++ if (r == 0) { + _cleanup_free_ char *disk_path = NULL; + unsigned i = 5; + const char *id; +diff --git a/src/cryptenroll/cryptenroll.c b/src/cryptenroll/cryptenroll.c +index ed19f3f8f4..2e11ffe291 100644 +--- a/src/cryptenroll/cryptenroll.c ++++ b/src/cryptenroll/cryptenroll.c +@@ -422,8 +422,8 @@ static int prepare_luks( + size_t *ret_volume_key_size) { + + _cleanup_(crypt_freep) struct crypt_device *cd = NULL; ++ _cleanup_(erase_and_freep) char *envpw = NULL; + _cleanup_(erase_and_freep) void *vk = NULL; +- char *e = NULL; + size_t vks; + int r; + +@@ -458,23 +458,17 @@ static int prepare_luks( + if (!vk) + return log_oom(); + +- e = getenv("PASSWORD"); +- if (e) { +- _cleanup_(erase_and_freep) char *password = NULL; +- +- password = strdup(e); +- if (!password) +- return log_oom(); +- +- assert_se(unsetenv_erase("PASSWORD") >= 0); +- ++ r = getenv_steal_erase("PASSWORD", &envpw); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire password from environment: %m"); ++ if (r > 0) { + r = crypt_volume_key_get( + cd, + CRYPT_ANY_SLOT, + vk, + &vks, +- password, +- strlen(password)); ++ envpw, ++ strlen(envpw)); + if (r < 0) + return log_error_errno(r, "Password from environment variable $PASSWORD did not work."); + } else { +diff --git a/src/cryptsetup/cryptsetup-fido2.c b/src/cryptsetup/cryptsetup-fido2.c +index 35d5dbe007..74053b8ce3 100644 +--- a/src/cryptsetup/cryptsetup-fido2.c ++++ b/src/cryptsetup/cryptsetup-fido2.c +@@ -30,12 +30,12 @@ int acquire_fido2_key( + size_t *ret_decrypted_key_size, + AskPasswordFlags ask_password_flags) { + ++ _cleanup_(erase_and_freep) char *envpw = NULL; + _cleanup_strv_free_erase_ char **pins = NULL; + _cleanup_free_ void *loaded_salt = NULL; + bool device_exists = false; + const char *salt; + size_t salt_size; +- char *e; + int r; + + ask_password_flags |= ASK_PASSWORD_PUSH_CACHE | ASK_PASSWORD_ACCEPT_CACHED; +@@ -66,13 +66,13 @@ int acquire_fido2_key( + salt = loaded_salt; + } + +- e = getenv("PIN"); +- if (e) { +- pins = strv_new(e); ++ r = getenv_steal_erase("PIN", &envpw); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire password from environment: %m"); ++ if (r > 0) { ++ pins = strv_new(envpw); + if (!pins) + return log_oom(); +- +- assert_se(unsetenv_erase("PIN") >= 0); + } + + for (;;) { +diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c +index fc1f37730f..692e1d137b 100644 +--- a/src/cryptsetup/cryptsetup.c ++++ b/src/cryptsetup/cryptsetup.c +@@ -829,20 +829,19 @@ static bool libcryptsetup_plugins_support(void) { + + #if HAVE_LIBCRYPTSETUP_PLUGINS + static int acquire_pins_from_env_variable(char ***ret_pins) { +- char *e; ++ _cleanup_(erase_and_freep) char *envpin = NULL; + _cleanup_strv_free_erase_ char **pins = NULL; ++ int r; + + assert(ret_pins); + +- e = getenv("PIN"); +- if (e) { +- pins = strv_new(e); ++ r = getenv_steal_erase("PIN", &envpin); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire PIN from environment: %m"); ++ if (r > 0) { ++ pins = strv_new(envpin); + if (!pins) + return log_oom(); +- +- string_erase(e); +- if (unsetenv("PIN") < 0) +- return log_error_errno(errno, "Failed to unset $PIN: %m"); + } + + *ret_pins = TAKE_PTR(pins); +diff --git a/src/home/homectl.c b/src/home/homectl.c +index 4aeaaf6b9a..f0d1dac6ab 100644 +--- a/src/home/homectl.c ++++ b/src/home/homectl.c +@@ -201,24 +201,25 @@ static int acquire_existing_password( + AskPasswordFlags flags) { + + _cleanup_(strv_free_erasep) char **password = NULL; ++ _cleanup_(erase_and_freep) char *envpw = NULL; + _cleanup_free_ char *question = NULL; +- char *e; + int r; + + assert(user_name); + assert(hr); + +- e = getenv("PASSWORD"); +- if (e) { ++ r = getenv_steal_erase("PASSWORD", &envpw); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire password from environment: %m"); ++ if (r > 0) { + /* People really shouldn't use environment variables for passing passwords. We support this + * only for testing purposes, and do not document the behaviour, so that people won't + * actually use this outside of testing. */ + +- r = user_record_set_password(hr, STRV_MAKE(e), true); ++ r = user_record_set_password(hr, STRV_MAKE(envpw), true); + if (r < 0) + return log_error_errno(r, "Failed to store password: %m"); + +- assert_se(unsetenv_erase("PASSWORD") >= 0); + return 1; + } + +@@ -261,24 +262,25 @@ static int acquire_recovery_key( + AskPasswordFlags flags) { + + _cleanup_(strv_free_erasep) char **recovery_key = NULL; ++ _cleanup_(erase_and_freep) char *envpw = NULL; + _cleanup_free_ char *question = NULL; +- char *e; + int r; + + assert(user_name); + assert(hr); + +- e = getenv("RECOVERY_KEY"); +- if (e) { ++ r = getenv_steal_erase("PASSWORD", &envpw); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire password from environment: %m"); ++ if (r > 0) { + /* People really shouldn't use environment variables for passing secrets. We support this + * only for testing purposes, and do not document the behaviour, so that people won't + * actually use this outside of testing. */ + +- r = user_record_set_password(hr, STRV_MAKE(e), true); /* recovery keys are stored in the record exactly like regular passwords! */ ++ r = user_record_set_password(hr, STRV_MAKE(envpw), true); /* recovery keys are stored in the record exactly like regular passwords! */ + if (r < 0) + return log_error_errno(r, "Failed to store recovery key: %m"); + +- assert_se(unsetenv_erase("RECOVERY_KEY") >= 0); + return 1; + } + +@@ -318,20 +320,21 @@ static int acquire_token_pin( + AskPasswordFlags flags) { + + _cleanup_(strv_free_erasep) char **pin = NULL; ++ _cleanup_(erase_and_freep) char *envpin = NULL; + _cleanup_free_ char *question = NULL; +- char *e; + int r; + + assert(user_name); + assert(hr); + +- e = getenv("PIN"); +- if (e) { +- r = user_record_set_token_pin(hr, STRV_MAKE(e), false); ++ r = getenv_steal_erase("PIN", &envpin); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire PIN from environment: %m"); ++ if (r > 0) { ++ r = user_record_set_token_pin(hr, STRV_MAKE(envpin), false); + if (r < 0) + return log_error_errno(r, "Failed to store token PIN: %m"); + +- assert_se(unsetenv_erase("PIN") >= 0); + return 1; + } + +@@ -1147,33 +1150,25 @@ static int acquire_new_password( + bool suggest, + char **ret) { + ++ _cleanup_(erase_and_freep) char *envpw = NULL; + unsigned i = 5; +- char *e; + int r; + + assert(user_name); + assert(hr); + +- e = getenv("NEWPASSWORD"); +- if (e) { +- _cleanup_(erase_and_freep) char *copy = NULL; +- ++ r = getenv_steal_erase("NEWPASSWORD", &envpw); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire password from environment: %m"); ++ if (r > 0) { + /* As above, this is not for use, just for testing */ + +- if (ret) { +- copy = strdup(e); +- if (!copy) +- return log_oom(); +- } +- +- r = user_record_set_password(hr, STRV_MAKE(e), /* prepend = */ true); ++ r = user_record_set_password(hr, STRV_MAKE(envpw), /* prepend = */ true); + if (r < 0) + return log_error_errno(r, "Failed to store password: %m"); + +- assert_se(unsetenv_erase("NEWPASSWORD") >= 0); +- + if (ret) +- *ret = TAKE_PTR(copy); ++ *ret = TAKE_PTR(envpw); + + return 0; + } +diff --git a/src/shared/pkcs11-util.c b/src/shared/pkcs11-util.c +index 4f9ec1fbd6..80feeb1fae 100644 +--- a/src/shared/pkcs11-util.c ++++ b/src/shared/pkcs11-util.c +@@ -275,15 +275,16 @@ int pkcs11_token_login( + + for (unsigned tries = 0; tries < 3; tries++) { + _cleanup_strv_free_erase_ char **passwords = NULL; +- char *e; ++ _cleanup_(erase_and_freep) char *envpin = NULL; + +- e = getenv("PIN"); +- if (e) { +- passwords = strv_new(e); ++ r = getenv_steal_erase("PIN", &envpin); ++ if (r < 0) ++ return log_error_errno(r, "Failed to acquire PIN from environment: %m"); ++ if (r > 0) { ++ passwords = strv_new(envpin); + if (!passwords) + return log_oom(); + +- assert_se(unsetenv_erase("PIN") >= 0); + } else if (headless) + return log_error_errno(SYNTHETIC_ERRNO(ENOPKG), "PIN querying disabled via 'headless' option. Use the 'PIN' environment variable."); + else { +diff --git a/src/test/test-env-util.c b/src/test/test-env-util.c +index 4d5f39b5b7..cc37d96327 100644 +--- a/src/test/test-env-util.c ++++ b/src/test/test-env-util.c +@@ -406,16 +406,16 @@ TEST(setenv_systemd_exec_pid) { + assert_se(set_unset_env("SYSTEMD_EXEC_PID", saved, 1) >= 0); + } + +-TEST(unsetenv_erase) { ++TEST(getenv_steal_erase) { + int r; + +- r = safe_fork("(sd-unsetenverase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL); ++ r = safe_fork("(sd-getenvstealerase)", FORK_DEATHSIG|FORK_LOG|FORK_WAIT, NULL); + if (r == 0) { + _cleanup_strv_free_ char **l = NULL; + + /* child */ + +- assert_se(unsetenv_erase("thisenvvardefinitelywontexist") == 0); ++ assert_se(getenv_steal_erase("thisenvvardefinitelywontexist", NULL) == 0); + + l = strv_new("FOO=BAR", "QUUX=PIFF", "ONE=TWO", "A=B"); + assert_se(strv_length(l) == 4); +@@ -423,7 +423,7 @@ TEST(unsetenv_erase) { + environ = l; + + STRV_FOREACH(e, environ) { +- _cleanup_free_ char *n = NULL; ++ _cleanup_free_ char *n = NULL, *copy1 = NULL, *copy2 = NULL; + char *eq; + + eq = strchr(*e, '='); +@@ -433,9 +433,13 @@ TEST(unsetenv_erase) { + n = strndup(*e, eq - *e); + assert_se(n); + +- assert_se(streq_ptr(getenv(n), eq + 1)); ++ copy1 = strdup(eq + 1); ++ assert_se(copy1); ++ ++ assert_se(streq_ptr(getenv(n), copy1)); + assert_se(getenv(n) == eq + 1); +- assert_se(unsetenv_erase(n) > 0); ++ assert_se(getenv_steal_erase(n, ©2) > 0); ++ assert_se(streq_ptr(copy1, copy2)); + assert_se(isempty(eq + 1)); + assert_se(!getenv(n)); + } diff --git a/SOURCES/0232-test-install-libxkbcommon-and-x11-keymaps.patch b/SOURCES/0232-test-install-libxkbcommon-and-x11-keymaps.patch new file mode 100644 index 0000000..c6dea04 --- /dev/null +++ b/SOURCES/0232-test-install-libxkbcommon-and-x11-keymaps.patch @@ -0,0 +1,63 @@ +From 6bf4cd485735ecff5c0ccfb6b36bf1b2f310997a Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:12:00 +0900 +Subject: [PATCH] test: install libxkbcommon and x11 keymaps + +(cherry picked from commit 1136175c7fd4898c6fdc59c1f729386cf994265c) + +Related: #2087652 +--- + test/test-functions | 19 ++++++++++++++++++- + 1 file changed, 18 insertions(+), 1 deletion(-) + +diff --git a/test/test-functions b/test/test-functions +index 050fefaf1b..644c3a8613 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -685,6 +685,7 @@ setup_basic_environment() { + install_dbus + install_fonts + install_keymaps ++ install_x11_keymaps + install_terminfo + install_execs + install_fs_tools +@@ -1198,7 +1199,7 @@ install_missing_libraries() { + local lib path + # A number of dependencies is now optional via dlopen, so the install + # script will not pick them up, since it looks at linkage. +- for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw; do ++ for lib in libcryptsetup libidn libidn2 pwquality libqrencode tss2-esys tss2-rc tss2-mu tss2-tcti-device libfido2 libbpf libelf libdw xkbcommon; do + ddebug "Searching for $lib via pkg-config" + if pkg-config --exists "$lib"; then + path="$(pkg-config --variable=libdir "$lib")" +@@ -1214,6 +1215,10 @@ install_missing_libraries() { + # (eg: libcryptsetup), so just ignore them + inst_libs "${path}/${lib}.so" || true + inst_library "${path}/${lib}.so" || true ++ ++ if [[ "$lib" == "libxkbcommon" ]]; then ++ install_x11_keymaps full ++ fi + else + ddebug "$lib.pc not found, skipping" + continue +@@ -1889,6 +1894,18 @@ install_keymaps() { + fi + } + ++install_x11_keymaps() { ++ dinfo "Install x11 keymaps" ++ ++ if (( $# == 0 )); then ++ # Install only keymap list. ++ inst /usr/share/X11/xkb/rules/base.lst ++ else ++ # When it takes any argument, then install all keymaps. ++ inst_recursive /usr/share/X11/xkb ++ fi ++} ++ + install_zoneinfo() { + dinfo "Install time zones" + inst_any /usr/share/zoneinfo/Asia/Seoul diff --git a/SOURCES/0233-test-install-C.UTF-8-and-English-locales.patch b/SOURCES/0233-test-install-C.UTF-8-and-English-locales.patch new file mode 100644 index 0000000..c9c6064 --- /dev/null +++ b/SOURCES/0233-test-install-C.UTF-8-and-English-locales.patch @@ -0,0 +1,54 @@ +From 9e35f5e32eeacdeeb0d2b520320b08daafc11c72 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:13:00 +0900 +Subject: [PATCH] test: install C.UTF-8 and English locales + +(cherry picked from commit 4ce68ea9b3707fde8c4be20e164fc2a41197fdda) + +Related: #2087652 +--- + test/test-functions | 24 ++++++++++++++++++++++++ + 1 file changed, 24 insertions(+) + +diff --git a/test/test-functions b/test/test-functions +index 644c3a8613..cab3e3c015 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -684,6 +684,7 @@ setup_basic_environment() { + install_pam + install_dbus + install_fonts ++ install_locales + install_keymaps + install_x11_keymaps + install_terminfo +@@ -1847,6 +1848,29 @@ install_pam() { + done + } + ++install_locales() { ++ # install only C.UTF-8 and English locales ++ dinfo "Install locales" ++ ++ if command -v meson >/dev/null \ ++ && (meson configure "${BUILD_DIR:?}" | grep 'localegen-path */') \ ++ || get_bool "$LOOKS_LIKE_DEBIAN"; then ++ # locale-gen support ++ image_install -o locale-gen localedef ++ inst /etc/locale.gen || : ++ inst /usr/share/i18n/SUPPORTED || : ++ inst_recursive /usr/share/i18n/charmaps ++ inst_recursive /usr/share/i18n/locales ++ inst_recursive /usr/share/locale/en ++ inst_recursive /usr/share/locale/en_* ++ fi ++ ++ inst_recursive /usr/lib/locale/C.utf8 ++ inst_recursive /usr/lib/locale/C.UTF-8 ++ inst_recursive /usr/lib/locale/en_*.utf8 ++ inst_recursive /usr/lib/locale/en_*.UTF-8 ++} ++ + # shellcheck disable=SC2120 + install_keymaps() { + local i p diff --git a/SOURCES/0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch b/SOURCES/0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch new file mode 100644 index 0000000..a74682a --- /dev/null +++ b/SOURCES/0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch @@ -0,0 +1,456 @@ +From 85e06430f03fe3078d5443d80ce53721fa88b285 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 09:14:00 +0900 +Subject: [PATCH] test: import localed tests from debian/ubuntu test suite + +(cherry picked from commit 47ba157cc083dcc5e5d7dcbdc1e27db0d6dced3e) + +Related: #2087652 +--- + test/TEST-73-LOCALE/Makefile | 1 + + test/TEST-73-LOCALE/test.sh | 10 + + test/units/testsuite-73.service | 10 + + test/units/testsuite-73.sh | 391 ++++++++++++++++++++++++++++++++ + 4 files changed, 412 insertions(+) + create mode 120000 test/TEST-73-LOCALE/Makefile + create mode 100755 test/TEST-73-LOCALE/test.sh + create mode 100644 test/units/testsuite-73.service + create mode 100755 test/units/testsuite-73.sh + +diff --git a/test/TEST-73-LOCALE/Makefile b/test/TEST-73-LOCALE/Makefile +new file mode 120000 +index 0000000000..e9f93b1104 +--- /dev/null ++++ b/test/TEST-73-LOCALE/Makefile +@@ -0,0 +1 @@ ++../TEST-01-BASIC/Makefile +\ No newline at end of file +diff --git a/test/TEST-73-LOCALE/test.sh b/test/TEST-73-LOCALE/test.sh +new file mode 100755 +index 0000000000..a33ddaba86 +--- /dev/null ++++ b/test/TEST-73-LOCALE/test.sh +@@ -0,0 +1,10 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -e ++ ++TEST_DESCRIPTION="test localed" ++ ++# shellcheck source=test/test-functions ++. "${TEST_BASE_DIR:?}/test-functions" ++ ++do_test "$@" +diff --git a/test/units/testsuite-73.service b/test/units/testsuite-73.service +new file mode 100644 +index 0000000000..bee8c4215d +--- /dev/null ++++ b/test/units/testsuite-73.service +@@ -0,0 +1,10 @@ ++# SPDX-License-Identifier: LGPL-2.1-or-later ++[Unit] ++Description=TEST-73-LOCALE ++ ++[Service] ++ExecStartPre=rm -f /failed /testok ++ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh ++StandardOutput=journal+console ++StandardError=journal+console ++Type=oneshot +diff --git a/test/units/testsuite-73.sh b/test/units/testsuite-73.sh +new file mode 100755 +index 0000000000..d96e9f4151 +--- /dev/null ++++ b/test/units/testsuite-73.sh +@@ -0,0 +1,391 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++ ++set -eux ++set -o pipefail ++ ++# shellcheck source=test/units/assert.sh ++. "$(dirname "$0")"/assert.sh ++ ++enable_debug() { ++ mkdir -p /run/systemd/system/systemd-localed.service.d ++ cat >>/run/systemd/system/systemd-localed.service.d/override.conf <>/run/systemd/system/systemd-vconsole-setup.service.d/override.conf </dev/null 2>&1 && ++ ! localectl list-locales | grep -F "en_US.UTF-8"; then ++ # ensure at least one utf8 locale exist ++ echo "en_US.UTF-8 UTF-8" > /etc/locale.gen ++ locale-gen en_US.UTF-8 ++ fi ++ ++ # create invalid locale ++ mkdir -p /usr/lib/locale/xx_XX.UTF-8 ++ assert_not_in "xx_XX.UTF-8" "$(localectl list-locales)" ++ ++ if [[ -z "$(localectl list-locales)" ]]; then ++ echo "No locale installed, skipping test." ++ return ++ fi ++ ++ # warn when kernel command line has locale settings ++ output=$(SYSTEMD_PROC_CMDLINE="locale.LANG=C.UTF-8 locale.LC_CTYPE=ja_JP.UTF-8" localectl 2>&1) ++ assert_in "Warning:" "$output" ++ assert_in "Command Line: LANG=C.UTF-8" "$output" ++ assert_in "LC_CTYPE=ja_JP.UTF-8" "$output" ++ assert_in "System Locale:" "$output" ++ ++ # change locale ++ for i in $(localectl list-locales); do ++ assert_rc 0 localectl set-locale "LANG=C" "LC_CTYPE=$i" ++ if [[ -f /etc/default/locale ]]; then ++ assert_eq "$(cat /etc/default/locale)" "LANG=C ++LC_CTYPE=$i" ++ else ++ assert_eq "$(cat /etc/locale.conf)" "LANG=C ++LC_CTYPE=$i" ++ fi ++ output=$(localectl) ++ assert_in "System Locale: LANG=C" "$output" ++ assert_in "LC_CTYPE=$i" "$output" ++ output=$(systemctl show-environment) ++ assert_in "LANG=C" "$output" ++ assert_in "LC_CTYPE=$i" "$output" ++ ++ assert_rc 0 localectl set-locale "$i" ++ if [[ -f /etc/default/locale ]]; then ++ # Debian/Ubuntu patch is buggy, and LC_CTYPE= still exists. ++ assert_eq "$(cat /etc/default/locale)" "LANG=$i ++LC_CTYPE=$i" ++ else ++ assert_eq "$(cat /etc/locale.conf)" "LANG=$i" ++ fi ++ output=$(localectl) ++ assert_in "System Locale: LANG=$i" "$output" ++ assert_not_in "LC_CTYPE=" "$output" ++ output=$(systemctl show-environment) ++ assert_in "LANG=$i" "$output" ++ assert_not_in "LC_CTYPE=" "$output" ++ done ++ ++ # test if localed auto-runs locale-gen ++ if command -v locale-gen >/dev/null 2>&1 && ++ ! localectl list-locales | grep -F "de_DE.UTF-8"; then ++ ++ # clear previous locale ++ systemctl stop systemd-localed.service ++ rm -f /etc/locale.conf /etc/default/locale ++ ++ # change locale ++ assert_rc 0 localectl set-locale de_DE.UTF-8 ++ if [[ -f /etc/default/locale ]]; then ++ assert_eq "$(cat /etc/default/locale)" "LANG=de_DE.UTF-8" ++ else ++ assert_eq "$(cat /etc/locale.conf)" "LANG=de_DE.UTF-8" ++ fi ++ assert_in "System Locale: LANG=de_DE.UTF-8" "$(localectl)" ++ assert_in "LANG=de_DE.UTF-8" "$(systemctl show-environment)" ++ ++ # ensure tested locale exists and works now ++ assert_in "de_DE.UTF-8" "$(localectl list-locales)" ++ fi ++} ++ ++backup_keymap() { ++ if [[ -f /etc/vconsole.conf ]]; then ++ cp /etc/vconsole.conf /tmp/vconsole.conf.bak ++ fi ++ ++ if [[ -f /etc/X11/xorg.conf.d/00-keyboard.conf ]]; then ++ cp /etc/X11/xorg.conf.d/00-keyboard.conf /tmp/00-keyboard.conf.bak ++ fi ++ ++ # Debian/Ubuntu specific file ++ if [[ -f /etc/default/keyboard ]]; then ++ cp /etc/default/keyboard /tmp/default-keyboard.bak ++ fi ++ ++ mkdir -p /etc/default ++} ++ ++restore_keymap() { ++ if [[ -f /tmp/vconsole.conf.bak ]]; then ++ mv /tmp/vconsole.conf.bak /etc/vconsole.conf ++ else ++ rm -f /etc/vconsole.conf ++ fi ++ ++ if [[ -f /tmp/00-keyboard.conf.bak ]]; then ++ mv /tmp/00-keyboard.conf.bak /etc/X11/xorg.conf.d/00-keyboard.conf ++ else ++ rm -f /etc/X11/xorg.conf.d/00-keyboard.conf ++ fi ++ ++ if [[ -f /tmp/default-keyboard.bak ]]; then ++ mv /tmp/default-keyboard.bak /etc/default/keyboard ++ else ++ rm -f /etc/default/keyboard ++ rmdir --ignore-fail-on-non-empty /etc/default ++ fi ++} ++ ++wait_vconsole_setup() { ++ local i ss ++ for ((i = 0; i < 20; i++)); do ++ if (( i != 0 )); then sleep .5; fi ++ ss="$(systemctl --property SubState --value show systemd-vconsole-setup.service)" ++ if [[ "$ss" == "exited" || "$ss" == "dead" || "$ss" == "condition" ]]; then ++ return 0 ++ elif [[ "$ss" == "failed" ]]; then ++ echo "WARNING: systemd-vconsole-setup.service failed, ignoring." >&2 ++ systemctl reset-failed systemd-vconsole-setup.service ++ return 0 ++ fi ++ done ++ ++ systemctl status systemd-vconsole-setup.service ++ return 1 ++} ++ ++test_vc_keymap() { ++ local i output ++ ++ if [[ -z "$(localectl list-keymaps)" ]]; then ++ echo "No vconsole keymap installed, skipping test." ++ return ++ fi ++ ++ backup_keymap ++ trap restore_keymap RETURN ++ ++ # should activate daemon and work ++ assert_in "VC Keymap:" "$(localectl)" ++ ++ for i in $(localectl list-keymaps); do ++ # clear previous conversion from VC -> X11 keymap ++ systemctl stop systemd-localed.service ++ wait_vconsole_setup ++ rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard ++ ++ # set VC keymap ++ assert_rc 0 localectl set-keymap "$i" ++ output=$(localectl) ++ ++ # check VC keymap ++ assert_in "KEYMAP=$i" "$(cat /etc/vconsole.conf)" ++ assert_in "VC Keymap: $i" "$output" ++ ++ # check VC -> X11 keymap conversion ++ if [[ "$i" == "us" ]]; then ++ assert_in "X11 Layout: us" "$output" ++ assert_in "X11 Model: pc105\+inet" "$output" ++ assert_not_in "X11 Variant:" "$output" ++ assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output" ++ elif [[ "$i" == "us-acentos" ]]; then ++ assert_in "X11 Layout: us" "$output" ++ assert_in 'X11 Model: pc105$' "$output" ++ assert_in "X11 Variant: intl" "$output" ++ assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output" ++ elif [[ "$i" =~ ^us-.* ]]; then ++ assert_in "X11 Layout: n/a" "$output" ++ assert_not_in "X11 Model:" "$output" ++ assert_not_in "X11 Variant:" "$output" ++ assert_not_in "X11 Options:" "$output" ++ fi ++ done ++ ++ # gets along without config file ++ systemctl stop systemd-localed.service ++ wait_vconsole_setup ++ rm -f /etc/vconsole.conf ++ assert_in "VC Keymap: n/a" "$(localectl)" ++} ++ ++test_x11_keymap() { ++ local output ++ ++ if [[ -z "$(localectl list-x11-keymap-layouts)" ]]; then ++ echo "No x11 keymap installed, skipping test." ++ return ++ fi ++ ++ backup_keymap ++ trap restore_keymap RETURN ++ ++ # should activate daemon and work ++ assert_in "X11 Layout:" "$(localectl)" ++ ++ # set x11 keymap (layout, model, variant, options) ++ assert_rc 0 localectl set-x11-keymap us pc105+inet intl terminate:ctrl_alt_bksp ++ ++ if [[ -f /etc/default/keyboard ]]; then ++ assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us ++XKBMODEL=pc105+inet ++XKBVARIANT=intl ++XKBOPTIONS=terminate:ctrl_alt_bksp" ++ else ++ output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf) ++ assert_in 'Option "XkbLayout" "us"' "$output" ++ assert_in 'Option "XkbModel" "pc105\+inet"' "$output" ++ assert_in 'Option "XkbVariant" "intl"' "$output" ++ assert_in 'Option "XkbOptions" "terminate:ctrl_alt_bksp"' "$output" ++ fi ++ ++ output=$(localectl) ++ assert_in "X11 Layout: us" "$output" ++ assert_in "X11 Model: pc105\+inet" "$output" ++ assert_in "X11 Variant: intl" "$output" ++ assert_in "X11 Options: terminate:ctrl_alt_bksp" "$output" ++ ++ # Debian/Ubuntu patch is buggy, unspecified settings are not cleared ++ rm -f /etc/default/keyboard ++ ++ # set x11 keymap (layout, model, variant) ++ assert_rc 0 localectl set-x11-keymap us pc105+inet intl ++ ++ if [[ -f /etc/default/keyboard ]]; then ++ assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us ++XKBMODEL=pc105+inet ++XKBVARIANT=intl" ++ else ++ output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf) ++ assert_in 'Option "XkbLayout" "us"' "$output" ++ assert_in 'Option "XkbModel" "pc105\+inet"' "$output" ++ assert_in 'Option "XkbVariant" "intl"' "$output" ++ assert_not_in 'Option "XkbOptions"' "$output" ++ fi ++ ++ output=$(localectl) ++ assert_in "X11 Layout: us" "$output" ++ assert_in "X11 Model: pc105\+inet" "$output" ++ assert_in "X11 Variant: intl" "$output" ++ assert_not_in "X11 Options:" "$output" ++ ++ # Debian/Ubuntu patch is buggy, unspecified settings are not cleared ++ rm -f /etc/default/keyboard ++ ++ # set x11 keymap (layout, model) ++ assert_rc 0 localectl set-x11-keymap us pc105+inet ++ ++ if [[ -f /etc/default/keyboard ]]; then ++ assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us ++XKBMODEL=pc105+inet" ++ else ++ output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf) ++ assert_in 'Option "XkbLayout" "us"' "$output" ++ assert_in 'Option "XkbModel" "pc105\+inet"' "$output" ++ assert_not_in 'Option "XkbVariant"' "$output" ++ assert_not_in 'Option "XkbOptions"' "$output" ++ fi ++ ++ output=$(localectl) ++ assert_in "X11 Layout: us" "$output" ++ assert_in "X11 Model: pc105\+inet" "$output" ++ assert_not_in "X11 Variant:" "$output" ++ assert_not_in "X11 Options:" "$output" ++ ++ # Debian/Ubuntu patch is buggy, unspecified settings are not cleared ++ rm -f /etc/default/keyboard ++ ++ # set x11 keymap (layout) ++ assert_rc 0 localectl set-x11-keymap us ++ ++ if [[ -f /etc/default/keyboard ]]; then ++ assert_eq "$(cat /etc/default/keyboard)" "XKBLAYOUT=us" ++ else ++ output=$(cat /etc/X11/xorg.conf.d/00-keyboard.conf) ++ assert_in 'Option "XkbLayout" "us"' "$output" ++ assert_not_in 'Option "XkbModel"' "$output" ++ assert_not_in 'Option "XkbVariant"' "$output" ++ assert_not_in 'Option "XkbOptions"' "$output" ++ fi ++ ++ output=$(localectl) ++ assert_in "X11 Layout: us" "$output" ++ assert_not_in "X11 Model:" "$output" ++ assert_not_in "X11 Variant:" "$output" ++ assert_not_in "X11 Options:" "$output" ++ ++ # gets along without config file ++ systemctl stop systemd-localed.service ++ rm -f /etc/X11/xorg.conf.d/00-keyboard.conf /etc/default/keyboard ++ output=$(localectl) ++ assert_in "X11 Layout: n/a" "$output" ++ assert_not_in "X11 Model:" "$output" ++ assert_not_in "X11 Variant:" "$output" ++ assert_not_in "X11 Options:" "$output" ++} ++ ++: >/failed ++ ++enable_debug ++test_locale ++test_vc_keymap ++test_x11_keymap ++ ++touch /testok ++rm /failed diff --git a/SOURCES/0235-unit-check-for-mount-rate-limiting-before-checking-a.patch b/SOURCES/0235-unit-check-for-mount-rate-limiting-before-checking-a.patch new file mode 100644 index 0000000..bf74518 --- /dev/null +++ b/SOURCES/0235-unit-check-for-mount-rate-limiting-before-checking-a.patch @@ -0,0 +1,52 @@ +From 7131b76b1ef9382396cdc9dc1a23999d94bb79f8 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Mon, 30 May 2022 11:55:41 +0200 +Subject: [PATCH] unit: check for mount rate limiting before checking active + state + +Having this check as part of mount_can_start() is too late because +UNIT(u)->can_start() virtual method is called after checking the active +state of unit in unit_start(). + +We need to hold off running mount start jobs when /p/s/mountinfo monitor +is rate limited even when given mount unit is already active. + +Fixes #20329 + +(cherry picked from commit b161bc394b2cc8b271dda9208e310cc2af0cc29d) + +Related: #2087652 +--- + src/core/mount.c | 3 --- + src/core/unit.c | 4 ++++ + 2 files changed, 4 insertions(+), 3 deletions(-) + +diff --git a/src/core/mount.c b/src/core/mount.c +index d63884e47e..8011389bcc 100644 +--- a/src/core/mount.c ++++ b/src/core/mount.c +@@ -2169,9 +2169,6 @@ static int mount_can_start(Unit *u) { + + assert(m); + +- if (sd_event_source_is_ratelimited(u->manager->mount_event_source)) +- return -EAGAIN; +- + r = unit_test_start_limit(u); + if (r < 0) { + mount_enter_dead(m, MOUNT_FAILURE_START_LIMIT_HIT); +diff --git a/src/core/unit.c b/src/core/unit.c +index 6eaa553255..569f712e85 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -1848,6 +1848,10 @@ int unit_start(Unit *u) { + + assert(u); + ++ /* Let's hold off running start jobs for mount units when /proc/self/mountinfo monitor is rate limited. */ ++ if (u->type == UNIT_MOUNT && sd_event_source_is_ratelimited(u->manager->mount_event_source)) ++ return -EAGAIN; ++ + /* If this is already started, then this will succeed. Note that this will even succeed if this unit + * is not startable by the user. This is relied on to detect when we need to wait for units and when + * waiting is finished. */ diff --git a/SOURCES/0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch b/SOURCES/0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch new file mode 100644 index 0000000..034bd39 --- /dev/null +++ b/SOURCES/0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch @@ -0,0 +1,84 @@ +From 94f643c328cd2d3c7376219573e0bc5dedea10d8 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Mon, 30 May 2022 14:50:05 +0200 +Subject: [PATCH] tests: make sure we delay running mount start jobs when + /p/s/mountinfo is rate limited + +(cherry picked from commit 9e15be6c8d55abd800bf33f9776dd0e307ed37bc) + +Related: #2087652 +--- + test/units/testsuite-60.sh | 53 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 53 insertions(+) + +diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh +index 239d7b0d4c..8cb3f466b6 100755 +--- a/test/units/testsuite-60.sh ++++ b/test/units/testsuite-60.sh +@@ -3,6 +3,56 @@ + set -eux + set -o pipefail + ++test_issue_20329() { ++ local tmpdir unit ++ tmpdir="$(mktemp -d)" ++ unit=$(systemd-escape --suffix mount --path "$tmpdir") ++ ++ # Set up test mount unit ++ cat > /run/systemd/system/"$unit" <&2 "Test mount \"$unit\" unit isn't mounted" ++ return 1 ++ } ++ mountpoint -q "$tmpdir" ++ ++ trap 'systemctl stop $unit' RETURN ++ ++ # Trigger the mount ratelimiting ++ cd "$(mktemp -d)" ++ mkdir foo ++ for ((i=0;i<50;++i)); do ++ mount --bind foo foo ++ umount foo ++ done ++ ++ # Unmount the test mount and start it immediately again via systemd ++ umount "$tmpdir" ++ systemctl start "$unit" ++ ++ # Make sure it is seen as mounted by systemd and it actually is mounted ++ [[ "$(systemctl show --property SubState --value "$unit")" = "mounted" ]] || { ++ echo >&2 "Test mount \"$unit\" unit isn't in \"mounted\" state" ++ return 1 ++ } ++ ++ mountpoint -q "$tmpdir" || { ++ echo >&2 "Test mount \"$unit\" is in \"mounted\" state, actually is not mounted" ++ return 1 ++ } ++} ++ + systemd-analyze log-level debug + systemd-analyze log-target journal + +@@ -87,6 +137,9 @@ if systemctl list-units -t mount tmp-meow* | grep -q tmp-meow; then + exit 42 + fi + ++# test that handling of mount start jobs is delayed when /proc/self/mouninfo monitor is rate limited ++test_issue_20329 ++ + systemd-analyze log-level info + + echo OK >/testok diff --git a/SOURCES/0237-test-insert-space-in-for-loop.patch b/SOURCES/0237-test-insert-space-in-for-loop.patch new file mode 100644 index 0000000..6f5aaac --- /dev/null +++ b/SOURCES/0237-test-insert-space-in-for-loop.patch @@ -0,0 +1,139 @@ +From a480327b20deb75d5595878f2924490ef3aa4064 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 21:05:10 +0900 +Subject: [PATCH] test: insert space in for loop + +(cherry picked from commit 2f34ee33291c92fd46308213689540cb76fb8e2b) + +Related: #2087652 +--- + test/units/testsuite-17.06.sh | 6 +++--- + test/units/testsuite-35.sh | 8 ++++---- + test/units/testsuite-45.sh | 6 +++--- + test/units/testsuite-46.sh | 2 +- + test/units/testsuite-60.sh | 2 +- + 5 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/test/units/testsuite-17.06.sh b/test/units/testsuite-17.06.sh +index f2a0442dc3..224063f6a6 100755 +--- a/test/units/testsuite-17.06.sh ++++ b/test/units/testsuite-17.06.sh +@@ -18,18 +18,18 @@ function check_validity() { + function check() { + local i j + +- for ((i=0;i<2;i++)); do ++ for ((i = 0; i < 2; i++)); do + systemctl restart systemd-udevd.service + udevadm control --ping + udevadm settle + check_validity + +- for ((j=0;j<2;j++)); do ++ for ((j = 0; j < 2; j++)); do + udevadm trigger -w --action add --subsystem-match=block + check_validity + done + +- for ((j=0;j<2;j++)); do ++ for ((j = 0; j < 2; j++)); do + udevadm trigger -w --action change --subsystem-match=block + check_validity + done +diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh +index 0a7198c3fe..e369cf8701 100755 +--- a/test/units/testsuite-35.sh ++++ b/test/units/testsuite-35.sh +@@ -149,7 +149,7 @@ EOF + evemu-device /run/lidswitch.evemu & + KILL_PID="$!" + +- for ((i=0;i<20;i++)); do ++ for ((i = 0; i < 20; i++)); do + if (( i != 0 )); then sleep .5; fi + + INPUT_NAME=$(grep -l '^Fake Lid Switch' /sys/class/input/*/device/name || :) +@@ -287,7 +287,7 @@ EOF + + # check session + ret=1 +- for ((i=0;i<30;i++)); do ++ for ((i = 0; i < 30; i++)); do + if (( i != 0)); then sleep 1; fi + if check_session; then + ret=0 +@@ -315,7 +315,7 @@ EOF + # coldplug: logind started with existing device + systemctl stop systemd-logind.service + modprobe scsi_debug +- for ((i=0;i<30;i++)); do ++ for ((i = 0; i < 30; i++)); do + if (( i != 0)); then sleep 1; fi + if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then + break +@@ -342,7 +342,7 @@ EOF + # hotplug: new device appears while logind is running + rmmod scsi_debug + modprobe scsi_debug +- for ((i=0;i<30;i++)); do ++ for ((i = 0; i < 30; i++)); do + if (( i != 0)); then sleep 1; fi + if dev=/dev/$(ls /sys/bus/pseudo/drivers/scsi_debug/adapter*/host*/target*/*:*/block 2>/dev/null); then + break +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +index d0f9dd9461..fd8a99076b 100755 +--- a/test/units/testsuite-45.sh ++++ b/test/units/testsuite-45.sh +@@ -197,7 +197,7 @@ start_mon() { + } + + wait_mon() { +- for ((i=0;i<10;i++)); do ++ for ((i = 0; i < 10; i++)); do + if (( i != 0 )); then sleep 1; fi + if grep -q "$1" "$mon"; then break; fi + done +@@ -228,7 +228,7 @@ EOF + + echo 'disable NTP' + timedatectl set-ntp false +- for ((i=0;i<10;i++)); do ++ for ((i = 0; i < 10; i++)); do + if (( i != 0 )); then sleep 1; fi + if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=inactive" ]]; then + break; +@@ -243,7 +243,7 @@ EOF + timedatectl set-ntp true + wait_mon "NTP" "BOOLEAN true" + assert_ntp "true" +- for ((i=0;i<10;i++)); do ++ for ((i = 0; i < 10; i++)); do + if (( i != 0 )); then sleep 1; fi + if [[ "$(systemctl show systemd-timesyncd --property ActiveState)" == "ActiveState=active" ]]; then + break; +diff --git a/test/units/testsuite-46.sh b/test/units/testsuite-46.sh +index 61ee921151..3724a3b5f6 100755 +--- a/test/units/testsuite-46.sh ++++ b/test/units/testsuite-46.sh +@@ -27,7 +27,7 @@ inspect() { + } + + wait_for_state() { +- for ((i=0;i<10;i++)) ; do ++ for ((i = 0; i < 10; i++)) ; do + homectl inspect "$1" | grep -qF "State: $2" && break + sleep .5 + done +diff --git a/test/units/testsuite-60.sh b/test/units/testsuite-60.sh +index 8cb3f466b6..3a097816ca 100755 +--- a/test/units/testsuite-60.sh ++++ b/test/units/testsuite-60.sh +@@ -32,7 +32,7 @@ EOF + # Trigger the mount ratelimiting + cd "$(mktemp -d)" + mkdir foo +- for ((i=0;i<50;++i)); do ++ for ((i = 0; i < 50; i++)); do + mount --bind foo foo + umount foo + done diff --git a/SOURCES/0238-test-move-do-at-the-end-of-line.patch b/SOURCES/0238-test-move-do-at-the-end-of-line.patch new file mode 100644 index 0000000..5b42606 --- /dev/null +++ b/SOURCES/0238-test-move-do-at-the-end-of-line.patch @@ -0,0 +1,46 @@ +From 9adf5125e39e15b2868a22fc481c4ce027de4f55 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 21:06:06 +0900 +Subject: [PATCH] test: move "do" at the end of line + +(cherry picked from commit 4627fb80bf54f5824570d3b94df9286971f028ac) + +Related: #2087652 +--- + test/test-functions | 9 +++------ + 1 file changed, 3 insertions(+), 6 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index cab3e3c015..1b10112329 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2250,8 +2250,7 @@ convert_abs_rel() { + __abssize=${#__absolute[@]} + __cursize=${#__current[@]} + +- while [[ "${__absolute[__level]}" == "${__current[__level]}" ]] +- do ++ while [[ "${__absolute[__level]}" == "${__current[__level]}" ]]; do + (( __level++ )) + if (( __level > __abssize || __level > __cursize )) + then +@@ -2259,8 +2258,7 @@ convert_abs_rel() { + fi + done + +- for ((__i = __level; __i < __cursize-1; __i++)) +- do ++ for ((__i = __level; __i < __cursize-1; __i++)); do + if ((__i > __level)) + then + __newpath=$__newpath"/" +@@ -2268,8 +2266,7 @@ convert_abs_rel() { + __newpath=$__newpath".." + done + +- for ((__i = __level; __i < __abssize; __i++)) +- do ++ for ((__i = __level; __i < __abssize; __i++)); do + if [[ -n $__newpath ]] + then + __newpath=$__newpath"/" diff --git a/SOURCES/0239-test-use-trap-RETURN.patch b/SOURCES/0239-test-use-trap-RETURN.patch new file mode 100644 index 0000000..e5ce153 --- /dev/null +++ b/SOURCES/0239-test-use-trap-RETURN.patch @@ -0,0 +1,97 @@ +From 60bc6c654dfbcbfeac0120143dd9869ceeb1a56e Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 14 Jun 2022 21:08:04 +0900 +Subject: [PATCH] test: use trap RETURN + +(cherry picked from commit 6243063824838e027754cc2737bb975472d62de2) + +Related: #2087652 +--- + test/units/testsuite-35.sh | 10 ++-------- + test/units/testsuite-45.sh | 10 ++-------- + 2 files changed, 4 insertions(+), 16 deletions(-) + +diff --git a/test/units/testsuite-35.sh b/test/units/testsuite-35.sh +index e369cf8701..05d2a6c4c3 100755 +--- a/test/units/testsuite-35.sh ++++ b/test/units/testsuite-35.sh +@@ -91,7 +91,7 @@ test_suspend_on_lid() { + fi + + KILL_PID= +- trap test_suspend_tear_down EXIT ++ trap test_suspend_tear_down RETURN + + # create fake suspend + mkdir -p /run/systemd/system/systemd-suspend.service.d +@@ -184,9 +184,6 @@ EOF + echo "logind crashed" >&2 + exit 1 + fi +- +- test_suspend_tear_down +- trap - EXIT + } + + test_shutdown() { +@@ -269,7 +266,7 @@ test_session() { + return + fi + +- trap test_session_tear_down EXIT ++ trap test_session_tear_down RETURN + + # add user + useradd -s /bin/bash logind-test-user +@@ -361,9 +358,6 @@ EOF + getfacl -p "$dev" >&2 + exit 1 + fi +- +- test_session_tear_down +- trap - EXIT + } + + : >/failed +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +index fd8a99076b..322d8086e7 100755 +--- a/test/units/testsuite-45.sh ++++ b/test/units/testsuite-45.sh +@@ -23,7 +23,7 @@ test_timezone() { + mv /etc/timezone /tmp/timezone.bak + fi + +- trap restore_timezone EXIT ++ trap restore_timezone RETURN + + if [[ -L /etc/localtime ]]; then + ORIG_TZ=$(readlink /etc/localtime | sed 's#^.*zoneinfo/##') +@@ -49,9 +49,6 @@ test_timezone() { + assert_eq "$(cat /etc/timezone)" "$ORIG_TZ" + fi + fi +- +- restore_timezone +- trap - EXIT + } + + restore_adjtime() { +@@ -75,7 +72,7 @@ test_adjtime() { + mv /etc/adjtime /etc/adjtime.bak + fi + +- trap restore_adjtime EXIT ++ trap restore_adjtime RETURN + + echo 'no adjtime file' + rm -f /etc/adjtime +@@ -182,9 +179,6 @@ LOCAL" + assert_eq "$(cat /etc/adjtime)" "0.0 0 0 + 0 + LOCAL" +- +- restore_adjtime +- trap - EXIT + } + + assert_ntp() { diff --git a/SOURCES/0240-test-ignore-the-error-about-our-own-libraries-missin.patch b/SOURCES/0240-test-ignore-the-error-about-our-own-libraries-missin.patch new file mode 100644 index 0000000..9653e95 --- /dev/null +++ b/SOURCES/0240-test-ignore-the-error-about-our-own-libraries-missin.patch @@ -0,0 +1,56 @@ +From 07d0debc02fb8a9f51ff06a03ceb2302e4982166 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 15 Dec 2021 09:14:44 +0100 +Subject: [PATCH] test: ignore the error about our own libraries missing during + image creation + +19:50:59 F: Missing a shared library required by /var/tmp/systemd-test.NIPT2q/root/lib/systemd/libsystemd-core-250.so. +19:50:59 F: Run "ldd /var/tmp/systemd-test.NIPT2q/root/lib/systemd/libsystemd-core-250.so" to find out what it is. +19:50:59 F: libsystemd-shared-250.so => not found +19:50:59 F: Cannot create a test image. +(cherry picked from commit ff254eea8feb55bbea9ec5d731e3dc9299b80b9e) + +Related: #2087652 +--- + test/test-functions | 14 ++++++++------ + 1 file changed, 8 insertions(+), 6 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index 1b10112329..a0ad8b2fb1 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2021,11 +2021,9 @@ inst_libs() { + + while read -r line; do + [[ "$line" = 'not a dynamic executable' ]] && break +- # Skip a harmless error when running the tests on a system with a significantly +- # older systemd version (ldd tries to resolve the unprefixed RPATH for libsystemd.so.0, +- # which is in this case older than the already installed libsystemd.so.0 in $initdir). +- # The issue is triggered by installing test dependencies in install_missing_libraries(). +- [[ "$line" =~ libsystemd.so.*:\ version\ .*\ not\ found ]] && continue ++ # Ignore errors about our own stuff missing. This is most likely caused ++ # by ldd attempting to use the unprefixed RPATH. ++ [[ "$line" =~ libsystemd.*\ not\ found ]] && continue + + if [[ "$line" =~ $so_regex ]]; then + file="${BASH_REMATCH[1]}" +@@ -2413,7 +2411,7 @@ inst_binary() { + # In certain cases we might attempt to install a binary which is already + # present in the test image, yet it's missing from the host system. + # In such cases, let's check if the binary indeed exists in the image +- # before doing any other chcecks. If it does, immediately return with ++ # before doing any other checks. If it does, immediately return with + # success. + if [[ $# -eq 1 ]]; then + for path in "" bin sbin usr/bin usr/sbin; do +@@ -2432,6 +2430,10 @@ inst_binary() { + while read -r line; do + [[ "$line" = 'not a dynamic executable' ]] && break + ++ # Ignore errors about our own stuff missing. This is most likely caused ++ # by ldd attempting to use the unprefixed RPATH. ++ [[ "$line" =~ libsystemd.*\ not\ found ]] && continue ++ + if [[ "$line" =~ $so_regex ]]; then + file="${BASH_REMATCH[1]}" + [[ -e "${initdir}/$file" ]] && continue diff --git a/SOURCES/0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch b/SOURCES/0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch new file mode 100644 index 0000000..f5b7fb4 --- /dev/null +++ b/SOURCES/0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch @@ -0,0 +1,85 @@ +From 75037db319f9eb240d73186eee457f62d4b16c7d Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Tue, 14 Jun 2022 22:54:39 +0200 +Subject: [PATCH] test: wrap binaries using systemd DSOs when running w/ ASan + +Let's detect & wrap binaries which are linked against systemd DSOs and +we're running under ASan, since otherwise running such binaries ends +with: + +``` +==633==ASan runtime does not come first in initial library list; you should either link runtime to your application or manually preload it with LD_PRELOAD. +``` + +(cherry picked from commit 3917534d620c2b358a196431b9e2593218ba1ac9) + +Related: #2087652 +--- + test/test-functions | 40 +++++++++++++++++++++++++++++++++++++++- + 1 file changed, 39 insertions(+), 1 deletion(-) + +diff --git a/test/test-functions b/test/test-functions +index a0ad8b2fb1..34aeac339f 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2426,6 +2426,9 @@ inst_binary() { + + local file line + local so_regex='([^ ]*/lib[^/]*/[^ ]*\.so[^ ]*)' ++ # DSOs provided by systemd ++ local systemd_so_regex='/(libudev|libsystemd.*|.+[\-_]systemd([\-_].+)?|libnss_(mymachines|myhostname|resolve)).so' ++ local wrap_binary=0 + # I love bash! + while read -r line; do + [[ "$line" = 'not a dynamic executable' ]] && break +@@ -2434,6 +2437,12 @@ inst_binary() { + # by ldd attempting to use the unprefixed RPATH. + [[ "$line" =~ libsystemd.*\ not\ found ]] && continue + ++ # We're built with ASan and the target binary loads one of the systemd's ++ # DSOs, so we need to tweak the environment before executing the binary ++ if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$line" =~ $systemd_so_regex ]]; then ++ wrap_binary=1 ++ fi ++ + if [[ "$line" =~ $so_regex ]]; then + file="${BASH_REMATCH[1]}" + [[ -e "${initdir}/$file" ]] && continue +@@ -2449,7 +2458,36 @@ inst_binary() { + exit 1 + fi + done < <(LC_ALL=C ldd "$bin" 2>/dev/null) +- inst_simple "$bin" "$target" ++ ++ # Same as above, but we need to wrap certain libraries unconditionally ++ # ++ # login - dlopen()s (not only) systemd's PAM modules ++ # tar - called by machinectl in TEST-25 ++ if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar)$ ]]; then ++ wrap_binary=1 ++ fi ++ ++ if get_bool "$wrap_binary"; then ++ dinfo "Creating ASan-compatible wrapper for binary '$target'" ++ # Install the target binary with a ".orig" suffix ++ inst_simple "$bin" "${target}.orig" ++ # Create a simple shell wrapper in place of the target binary, which ++ # sets necessary ASan-related env variables and then exec()s the ++ # suffixed target binary ++ cat >"$initdir/$target" < +Date: Mon, 6 Jun 2022 14:45:11 +0200 +Subject: [PATCH] test: set $ASAN_RT_PATH along with $LD_PRELOAD to the ASan + runtime DSO + +Since we unset $LD_PRELOAD in the testsuite-* units (due to another +issue), let's store the path to the ASan DSO in another env variable, so +we can easily access it in the testsuite scripts when needed. + +(cherry picked from commit 3ea18a2e36a5b8ac60c76e407f9dd38800455725) + +Related: #2087652 +--- + test/test-functions | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/test-functions b/test/test-functions +index 34aeac339f..a9ff561083 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -820,7 +820,7 @@ mount -o remount,rw / + + # A lot of services (most notably dbus) won't start without preloading libasan + # See https://github.com/systemd/systemd/issues/5004 +-DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT LD_PRELOAD=$ASAN_RT_PATH" ++DEFAULT_ENVIRONMENT="\$DEFAULT_ENVIRONMENT LD_PRELOAD=$ASAN_RT_PATH ASAN_RT_PATH=$ASAN_RT_PATH" + + if [[ "$ASAN_COMPILER" == "clang" ]]; then + # Let's add the ASan DSO's path to the dynamic linker's cache. This is pretty diff --git a/SOURCES/0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch b/SOURCES/0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch new file mode 100644 index 0000000..138ae6b --- /dev/null +++ b/SOURCES/0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch @@ -0,0 +1,101 @@ +From 137a22e0192941fa275b70665af7a0d54f6ad614 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 15 Jun 2022 12:32:51 +0200 +Subject: [PATCH] test: drop all LD_PRELOAD-related ASan workarounds + +since they shouldn't be necessary anymore, as we tweak the "problematic" +binaries on per-binary basis. + +(cherry picked from commit fa65ba6baac8c9241cf30802bb5fd3698d1f3189) + +Related: #2087652 +--- + test/test-functions | 54 +-------------------------------------------- + 1 file changed, 1 insertion(+), 53 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index a9ff561083..f55e64493d 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -593,10 +593,6 @@ install_verity_minimal() { + # missing $LD_PRELOAD libraries. + inst_libs "$ASAN_RT_PATH" + inst_library "$ASAN_RT_PATH" +- # Create a dummy LSan suppression file otherwise gcc's ASan +- # complains as it doesn't exist in the minimal image +- # (i.e. when running TEST-29 or TEST-50 under sanitizers) +- touch "$initdir/systemd-lsan.supp" + fi + cp "$os_release" "$initdir/usr/lib/os-release" + ln -s ../usr/lib/os-release "$initdir/etc/os-release" +@@ -792,20 +788,6 @@ if [[ ! -e "$ASAN_RT_PATH" ]]; then + exit 1 + fi + +-# Suppress certain leaks reported by LSan (either in external tools or bogus +-# ones) +-# Docs: # https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer#suppressions +-# +-# - fsck is called by systemd-homed and is reporting a leak we're not interested +-# in +-# - libLLVM is a "side effect" caused by the previous fsck leak +-cat >/systemd-lsan.supp </etc/systemd/system/systemd-journal-flush.service.d/timeout.conf + +-# D-Bus has troubles during system shutdown causing it to fail. Although it's +-# harmless, it causes unnecessary noise in the logs, so let's disable LSan's +-# at_exit check just for the dbus.service +-mkdir -p /etc/systemd/system/dbus.service.d +-printf "[Service]\nEnvironment=ASAN_OPTIONS=leak_check_at_exit=false\n" >/etc/systemd/system/dbus.service.d/disable-lsan.conf +- +-# Some utilities run via IMPORT/RUN/PROGRAM udev directives fail because +-# they're uninstrumented (like dmsetup). Let's add a simple rule which sets +-# LD_PRELOAD to the ASan RT library to fix this. +-mkdir -p /etc/udev/rules.d +-cat >/etc/udev/rules.d/00-set-LD_PRELOAD.rules <"\$_dropin_dir/unset_ld_preload.conf" +-} +- +-unset_ld_preload systemd-remount-fs +-unset_ld_preload testsuite- +- + export ASAN_OPTIONS=\$DEFAULT_ASAN_OPTIONS:log_path=/systemd.asan.log UBSAN_OPTIONS=\$DEFAULT_UBSAN_OPTIONS + exec "$ROOTLIBDIR/systemd" "\$@" + EOF diff --git a/SOURCES/0244-test-don-t-wrap-binaries-built-with-ASan.patch b/SOURCES/0244-test-don-t-wrap-binaries-built-with-ASan.patch new file mode 100644 index 0000000..b7ef69f --- /dev/null +++ b/SOURCES/0244-test-don-t-wrap-binaries-built-with-ASan.patch @@ -0,0 +1,57 @@ +From e5ecc772a0bb0813cdcf0a24f48ba3278da6e276 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 15 Jun 2022 19:43:11 +0200 +Subject: [PATCH] test: don't wrap binaries built with ASan + +since they should handle loading other instrumented libraries without +issues. + +(cherry picked from commit b727d7e02d6c88476ae9e46211e1f9c24720d5c3) + +Related: #2087652 +--- + test/test-functions | 10 +++++++--- + 1 file changed, 7 insertions(+), 3 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index f55e64493d..57d4df3e7e 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -228,6 +228,8 @@ DEBUGTOOLS=( + ) + + is_built_with_asan() { ++ local _bin="${1:?}" ++ + if ! type -P objdump >/dev/null; then + ddebug "Failed to find objdump. Assuming systemd hasn't been built with ASAN." + return 1 +@@ -235,7 +237,7 @@ is_built_with_asan() { + + # Borrowed from https://github.com/google/oss-fuzz/blob/cd9acd02f9d3f6e80011cc1e9549be526ce5f270/infra/base-images/base-runner/bad_build_check#L182 + local _asan_calls +- _asan_calls="$(objdump -dC "$SYSTEMD_JOURNALD" | grep -E "(callq?|brasl?|bl)\s.+__asan" -c)" ++ _asan_calls="$(objdump -dC "$_bin" | grep -E "(callq?|brasl?|bl)\s.+__asan" -c)" + if ((_asan_calls < 1000)); then + return 1 + else +@@ -251,7 +253,7 @@ is_built_with_coverage() { + meson configure "${BUILD_DIR:?}" | grep 'b_coverage' | awk '{ print $2 }' | grep -q 'true' + } + +-IS_BUILT_WITH_ASAN=$(is_built_with_asan && echo yes || echo no) ++IS_BUILT_WITH_ASAN=$(is_built_with_asan "$SYSTEMD_JOURNALD" && echo yes || echo no) + IS_BUILT_WITH_COVERAGE=$(is_built_with_coverage && echo yes || echo no) + + if get_bool "$IS_BUILT_WITH_ASAN"; then +@@ -2415,7 +2417,9 @@ inst_binary() { + wrap_binary=1 + fi + +- if get_bool "$wrap_binary"; then ++ # If the target binary is built with ASan support, we don't need to wrap ++ # it, as it should handle everything by itself ++ if get_bool "$wrap_binary" && ! is_built_with_asan "$bin"; then + dinfo "Creating ASan-compatible wrapper for binary '$target'" + # Install the target binary with a ".orig" suffix + inst_simple "$bin" "${target}.orig" diff --git a/SOURCES/0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch b/SOURCES/0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch new file mode 100644 index 0000000..250eb9b --- /dev/null +++ b/SOURCES/0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch @@ -0,0 +1,108 @@ +From 4dd51db0381048f15973dc0046fe5fdec1f40aa8 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 16 Jun 2022 22:16:53 +0200 +Subject: [PATCH] test: send stdout/stderr of testsuite units to journal & + console + +to make debugging in CIs slightly easier. + +(cherry picked from commit ba7abf79a5a2df2a93332fc32e8e3c268c74abc7) + +Related: #2087652 +--- + test/test-functions | 12 ++++++++++++ + test/units/testsuite-22.service | 2 -- + test/units/testsuite-35.service | 2 -- + test/units/testsuite-45.service | 2 -- + test/units/testsuite-64.service | 2 -- + test/units/testsuite-71.service | 2 -- + test/units/testsuite-73.service | 2 -- + 7 files changed, 12 insertions(+), 12 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index 57d4df3e7e..77d4a0afff 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2867,6 +2867,18 @@ test_setup() { + mask_supporting_services + fi + ++ # Send stdout/stderr of testsuite-*.service units to both journal and ++ # console to make debugging in CIs easier ++ # Note: we can't use a dropin for `testsuite-.service`, since that also ++ # overrides 'sub-units' of some tests that already use a specific ++ # value for Standard(Output|Error)= ++ # (e.g. test/units/testsuite-66-deviceisolation.service) ++ if ! get_bool "$INTERACTIVE_DEBUG"; then ++ local dropin_dir="${initdir:?}/etc/systemd/system/testsuite-${TESTID:?}.service.d" ++ mkdir -p "$dropin_dir" ++ printf '[Service]\nStandardOutput=journal+console\nStandardError=journal+console' >"$dropin_dir/99-stdout.conf" ++ fi ++ + if get_bool "$hook_defined"; then + test_append_files "${initdir:?}" + fi +diff --git a/test/units/testsuite-22.service b/test/units/testsuite-22.service +index b9ecc4c5d6..a5ed660c62 100644 +--- a/test/units/testsuite-22.service ++++ b/test/units/testsuite-22.service +@@ -9,5 +9,3 @@ Wants=getty-pre.target + ExecStartPre=rm -f /failed /testok + ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh + Type=oneshot +-StandardOutput=tty +-StandardError=tty +diff --git a/test/units/testsuite-35.service b/test/units/testsuite-35.service +index 556a57a384..0599f6104e 100644 +--- a/test/units/testsuite-35.service ++++ b/test/units/testsuite-35.service +@@ -5,6 +5,4 @@ Description=TEST-35-LOGIN + [Service] + ExecStartPre=rm -f /failed /testok + ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +-StandardOutput=journal+console +-StandardError=journal+console + Type=oneshot +diff --git a/test/units/testsuite-45.service b/test/units/testsuite-45.service +index 79c0a6f117..b16ce9933f 100644 +--- a/test/units/testsuite-45.service ++++ b/test/units/testsuite-45.service +@@ -5,6 +5,4 @@ Description=TEST-45-TIMEDATE + [Service] + ExecStartPre=rm -f /failed /testok + ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +-StandardOutput=journal+console +-StandardError=journal+console + Type=oneshot +diff --git a/test/units/testsuite-64.service b/test/units/testsuite-64.service +index 10b61e7e53..f75a3d7aad 100644 +--- a/test/units/testsuite-64.service ++++ b/test/units/testsuite-64.service +@@ -6,5 +6,3 @@ Description=TEST-64-UDEV + ExecStartPre=rm -f /failed /testok + ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh + Type=oneshot +-StandardOutput=journal+console +-StandardError=journal+console +diff --git a/test/units/testsuite-71.service b/test/units/testsuite-71.service +index 019e8bff24..1718629c05 100644 +--- a/test/units/testsuite-71.service ++++ b/test/units/testsuite-71.service +@@ -5,6 +5,4 @@ Description=TEST-71-HOSTNAME + [Service] + ExecStartPre=rm -f /failed /testok + ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +-StandardOutput=journal+console +-StandardError=journal+console + Type=oneshot +diff --git a/test/units/testsuite-73.service b/test/units/testsuite-73.service +index bee8c4215d..3ebd24da18 100644 +--- a/test/units/testsuite-73.service ++++ b/test/units/testsuite-73.service +@@ -5,6 +5,4 @@ Description=TEST-73-LOCALE + [Service] + ExecStartPre=rm -f /failed /testok + ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh +-StandardOutput=journal+console +-StandardError=journal+console + Type=oneshot diff --git a/SOURCES/0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch b/SOURCES/0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch new file mode 100644 index 0000000..c9fb57b --- /dev/null +++ b/SOURCES/0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch @@ -0,0 +1,49 @@ +From 1e684870a7f893fcd9138c0ca6bde0fcf3bf752a Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 17 Jun 2022 14:44:49 +0200 +Subject: [PATCH] test: make the busy loop in TEST-02 less verbose + +as it unnecessarily clogs the logs. + +(cherry picked from commit 582547cbd38a02289451c1cea36a32f446b66677) + +Related: #2087652 +--- + test/units/testsuite-02.sh | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/test/units/testsuite-02.sh b/test/units/testsuite-02.sh +index af6e007825..54927a6377 100755 +--- a/test/units/testsuite-02.sh ++++ b/test/units/testsuite-02.sh +@@ -49,6 +49,7 @@ function report_result() { + systemd-cat cat "/$name.log" + } + ++set +x + # Associative array for running tasks, where running[test-path]=PID + declare -A running=() + for task in "${TEST_LIST[@]}"; do +@@ -72,6 +73,7 @@ for task in "${TEST_LIST[@]}"; do + done + + if [[ -x $task ]]; then ++ echo "Executing test '$task'" + log_file="/${task##*/}.log" + $task &>"$log_file" & + running[$task]=$! +@@ -80,11 +82,14 @@ done + + # Wait for remaining running tasks + for key in "${!running[@]}"; do ++ echo "Waiting for test '$key' to finish" + wait ${running[$key]} && ec=0 || ec=$? + report_result "$key" $ec + unset running["$key"] + done + ++set -x ++ + # Test logs are sometimes lost, as the system shuts down immediately after + journalctl --sync + diff --git a/SOURCES/0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch b/SOURCES/0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch new file mode 100644 index 0000000..e30e1b5 --- /dev/null +++ b/SOURCES/0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch @@ -0,0 +1,30 @@ +From d9055b5394aff8a8ec9c75c7cf4fc43f0617e6dd Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 17 Jun 2022 14:47:10 +0200 +Subject: [PATCH] test: always wrap useradd/userdel when running w/ ASan + +since they dlopen() PAM modules, including systemd ones. + +(cherry picked from commit 94850fb956458703e0c6e0bee7f482aa41a47e9e) + +Related: #2087652 +--- + test/test-functions | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index 77d4a0afff..b5fcf07818 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2411,9 +2411,9 @@ inst_binary() { + + # Same as above, but we need to wrap certain libraries unconditionally + # +- # login - dlopen()s (not only) systemd's PAM modules ++ # login, useradd, userdel - dlopen()s (not only) systemd's PAM modules + # tar - called by machinectl in TEST-25 +- if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar)$ ]]; then ++ if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar|useradd|userdel)$ ]]; then + wrap_binary=1 + fi + diff --git a/SOURCES/0248-test-don-t-flush-debug-logs-to-the-console.patch b/SOURCES/0248-test-don-t-flush-debug-logs-to-the-console.patch new file mode 100644 index 0000000..ce6295c --- /dev/null +++ b/SOURCES/0248-test-don-t-flush-debug-logs-to-the-console.patch @@ -0,0 +1,239 @@ +From da2408f522a4ea65b30fb86619dd3f11e1308ac4 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 17 Jun 2022 15:06:59 +0200 +Subject: [PATCH] test: don't flush debug logs to the console + +Let's keep the debug logs in the journal, while logging only +testsute-*.sh stdout/stderr to the console (ba7abf7). This should make +the test output log a bit more readable and potentially the tests itself +a bit faster by avoiding console oversaturation. + +Also, it should significantly reduce the size of artifacts kept by CIs. + +(cherry picked from commit c84d1c9822bd181c37a5bd26b607edd67096839f) + +Related: #2087652 +--- + test/units/testsuite-20.sh | 1 - + test/units/testsuite-23.sh | 1 - + test/units/testsuite-27.sh | 1 - + test/units/testsuite-30.sh | 1 - + test/units/testsuite-32.sh | 1 - + test/units/testsuite-34.sh | 1 - + test/units/testsuite-38.sh | 1 - + test/units/testsuite-39.sh | 1 - + test/units/testsuite-40.sh | 1 - + test/units/testsuite-41.sh | 1 - + test/units/testsuite-46.sh | 1 - + test/units/testsuite-47.sh | 1 - + test/units/testsuite-52.sh | 1 - + test/units/testsuite-55.sh | 1 - + test/units/testsuite-59.sh | 1 - + test/units/testsuite-62.sh | 1 - + test/units/testsuite-66.sh | 1 - + 17 files changed, 17 deletions(-) + +diff --git a/test/units/testsuite-20.sh b/test/units/testsuite-20.sh +index fc87c18c4c..338769aacc 100755 +--- a/test/units/testsuite-20.sh ++++ b/test/units/testsuite-20.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + test "$(systemctl show -P MainPID testsuite-20.service)" -eq $$ + +diff --git a/test/units/testsuite-23.sh b/test/units/testsuite-23.sh +index 46e45c8780..e8f99ff60d 100755 +--- a/test/units/testsuite-23.sh ++++ b/test/units/testsuite-23.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + # Create a binary for which execve() will fail + touch /tmp/brokenbinary +diff --git a/test/units/testsuite-27.sh b/test/units/testsuite-27.sh +index 3b2f925153..c0701f35c3 100755 +--- a/test/units/testsuite-27.sh ++++ b/test/units/testsuite-27.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + systemd-run --wait --unit=test27-one \ + -p StandardOutput=file:/tmp/stdout \ +diff --git a/test/units/testsuite-30.sh b/test/units/testsuite-30.sh +index 51b9bdd093..57f46669f9 100755 +--- a/test/units/testsuite-30.sh ++++ b/test/units/testsuite-30.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + systemctl disable --now systemd-timesyncd.service + +diff --git a/test/units/testsuite-32.sh b/test/units/testsuite-32.sh +index 20ab67f6f1..5c289d0abf 100755 +--- a/test/units/testsuite-32.sh ++++ b/test/units/testsuite-32.sh +@@ -11,7 +11,6 @@ set -o pipefail + + if test -f /sys/fs/cgroup/system.slice/testsuite-32.service/memory.oom.group; then + systemd-analyze log-level debug +- systemd-analyze log-target console + + # Run a service that is guaranteed to be the first candidate for OOM killing + systemd-run --unit=oomtest.service \ +diff --git a/test/units/testsuite-34.sh b/test/units/testsuite-34.sh +index 57a7b950a0..e6171beaa6 100755 +--- a/test/units/testsuite-34.sh ++++ b/test/units/testsuite-34.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + function test_directory() { + local directory="$1" +diff --git a/test/units/testsuite-38.sh b/test/units/testsuite-38.sh +index f2f61b961f..438990d1c5 100755 +--- a/test/units/testsuite-38.sh ++++ b/test/units/testsuite-38.sh +@@ -5,7 +5,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + unit=testsuite-38-sleep.service + +diff --git a/test/units/testsuite-39.sh b/test/units/testsuite-39.sh +index 03abf391f1..5b77bbbaf1 100755 +--- a/test/units/testsuite-39.sh ++++ b/test/units/testsuite-39.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + export SYSTEMD_PAGER= + SERVICE_PATH="$(mktemp /etc/systemd/system/execreloadXXX.service)" +diff --git a/test/units/testsuite-40.sh b/test/units/testsuite-40.sh +index dd54fa174c..cec1fd3a7a 100755 +--- a/test/units/testsuite-40.sh ++++ b/test/units/testsuite-40.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + declare -A property + +diff --git a/test/units/testsuite-41.sh b/test/units/testsuite-41.sh +index 3b41db03f5..13bc684c2d 100755 +--- a/test/units/testsuite-41.sh ++++ b/test/units/testsuite-41.sh +@@ -7,7 +7,6 @@ set -o pipefail + MAX_SECS=60 + + systemd-analyze log-level debug +-systemd-analyze log-target console + + # test one: Restart=on-failure should restart the service + systemd-run --unit=one -p Type=oneshot -p Restart=on-failure /bin/bash -c "exit 1" \ +diff --git a/test/units/testsuite-46.sh b/test/units/testsuite-46.sh +index 3724a3b5f6..658613abb6 100755 +--- a/test/units/testsuite-46.sh ++++ b/test/units/testsuite-46.sh +@@ -34,7 +34,6 @@ wait_for_state() { + } + + systemd-analyze log-level debug +-systemd-analyze log-target console + systemctl service-log-level systemd-homed debug + + # Create a tmpfs to use as backing store for the home dir. That way we can enforce a size limit nicely. +diff --git a/test/units/testsuite-47.sh b/test/units/testsuite-47.sh +index ff10602df7..529e9617a5 100755 +--- a/test/units/testsuite-47.sh ++++ b/test/units/testsuite-47.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + systemctl start testsuite-47-repro + sleep 4 +diff --git a/test/units/testsuite-52.sh b/test/units/testsuite-52.sh +index 8a76ff6ed6..d78fdd53ba 100755 +--- a/test/units/testsuite-52.sh ++++ b/test/units/testsuite-52.sh +@@ -4,7 +4,6 @@ set -ex + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + systemctl enable test-honor-first-shutdown.service + systemctl start test-honor-first-shutdown.service +diff --git a/test/units/testsuite-55.sh b/test/units/testsuite-55.sh +index 379ea9e569..74dd285460 100755 +--- a/test/units/testsuite-55.sh ++++ b/test/units/testsuite-55.sh +@@ -4,7 +4,6 @@ set -eux + set -o pipefail + + systemd-analyze log-level debug +-systemd-analyze log-target console + + # Loose checks to ensure the environment has the necessary features for systemd-oomd + [[ -e /proc/pressure ]] || echo "no PSI" >>/skipped +diff --git a/test/units/testsuite-59.sh b/test/units/testsuite-59.sh +index 143e44ec63..83db053107 100755 +--- a/test/units/testsuite-59.sh ++++ b/test/units/testsuite-59.sh +@@ -28,7 +28,6 @@ wait_on_state_or_fail () { + } + + systemd-analyze log-level debug +-systemd-analyze log-target console + + + cat >/run/systemd/system/testservice-fail-59.service < +Date: Fri, 17 Jun 2022 15:28:17 +0200 +Subject: [PATCH] test: fix a couple of issues found by shellcheck + +(cherry picked from commit 72f0e89c0da3584d5d0a0124d791b02f0f04e769) + +Related: #2087652 +--- + test/units/testsuite-02.sh | 4 ++-- + test/units/testsuite-38.sh | 8 ++++---- + 2 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/test/units/testsuite-02.sh b/test/units/testsuite-02.sh +index 54927a6377..8ebcc575ee 100755 +--- a/test/units/testsuite-02.sh ++++ b/test/units/testsuite-02.sh +@@ -61,7 +61,7 @@ for task in "${TEST_LIST[@]}"; do + # Task has finished, report its result and drop it from the queue + wait "${running[$key]}" && ec=0 || ec=$? + report_result "$key" $ec +- unset running["$key"] ++ unset "running[$key]" + # Break from inner for loop and outer while loop to skip + # the sleep below when we find a free slot in the queue + break 2 +@@ -85,7 +85,7 @@ for key in "${!running[@]}"; do + echo "Waiting for test '$key' to finish" + wait ${running[$key]} && ec=0 || ec=$? + report_result "$key" $ec +- unset running["$key"] ++ unset "running[$key]" + done + + set -x +diff --git a/test/units/testsuite-38.sh b/test/units/testsuite-38.sh +index 438990d1c5..c5f9bcc22c 100755 +--- a/test/units/testsuite-38.sh ++++ b/test/units/testsuite-38.sh +@@ -17,7 +17,7 @@ dbus_freeze() { + local name object_path suffix + + suffix="${1##*.}" +- name="${1%.$suffix}" ++ name="${1%".$suffix"}" + object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}" + + busctl call \ +@@ -31,7 +31,7 @@ dbus_thaw() { + local name object_path suffix + + suffix="${1##*.}" +- name="${1%.$suffix}" ++ name="${1%".$suffix"}" + object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}" + + busctl call \ +@@ -65,7 +65,7 @@ dbus_can_freeze() { + local name object_path suffix + + suffix="${1##*.}" +- name="${1%.$suffix}" ++ name="${1%".$suffix"}" + object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}" + + busctl get-property \ +@@ -79,7 +79,7 @@ check_freezer_state() { + local name object_path suffix + + suffix="${1##*.}" +- name="${1%.$suffix}" ++ name="${1%".$suffix"}" + object_path="/org/freedesktop/systemd1/unit/${name//-/_2d}_2e${suffix}" + + for _ in {0..10}; do diff --git a/SOURCES/0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch b/SOURCES/0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch new file mode 100644 index 0000000..ae0c9b8 --- /dev/null +++ b/SOURCES/0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch @@ -0,0 +1,45 @@ +From e235b10483fb5b33f20ff0611ac5ed707d35d850 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 18 Feb 2022 14:10:15 +0100 +Subject: [PATCH] test: pass the initdir to check_result_{qemu,nspawn} hooks + +(cherry picked from commit 4b9a0c3aebdcf000f8d7ee569cb8a1806d07c397) + +Related: #2087652 +--- + test/test-functions | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index b5fcf07818..93ab32b68d 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1438,7 +1438,7 @@ check_result_nspawn() { + + # Run additional test-specific checks if defined by check_result_nspawn_hook() + if declare -F check_result_nspawn_hook >/dev/null; then +- if ! check_result_nspawn_hook; then ++ if ! check_result_nspawn_hook "${workspace}"; then + derror "check_result_nspawn_hook() returned with EC > 0" + ret=4 + fi +@@ -1457,16 +1457,16 @@ check_result_qemu() { + check_result_common "${initdir:?}" + ret=$? + +- _umount_dir "${initdir:?}" +- + # Run additional test-specific checks if defined by check_result_qemu_hook() + if declare -F check_result_qemu_hook >/dev/null; then +- if ! check_result_qemu_hook; then ++ if ! check_result_qemu_hook "${initdir:?}"; then + derror "check_result_qemu_hook() returned with EC > 0" + ret=4 + fi + fi + ++ _umount_dir "${initdir:?}" ++ + return $ret + } + diff --git a/SOURCES/0251-test-run-the-custom-check-hooks-before-common-checks.patch b/SOURCES/0251-test-run-the-custom-check-hooks-before-common-checks.patch new file mode 100644 index 0000000..840a55e --- /dev/null +++ b/SOURCES/0251-test-run-the-custom-check-hooks-before-common-checks.patch @@ -0,0 +1,64 @@ +From 895cc5ef78f91ed542d8be6a057033b7992ad91e Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 17 Jun 2022 17:28:13 +0200 +Subject: [PATCH] test: run the custom check hooks before common checks + +since we delete the guest journals as part of the save_journal() step in +check_result_common(), making journal inaccessible from the custom check +hooks. + +(cherry picked from commit 35d2d2e61c7695b87a4ee3dc54d065f4de95f260) + +Related: #2087652 +--- + test/test-functions | 16 ++++++++-------- + 1 file changed, 8 insertions(+), 8 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index 93ab32b68d..1306dcf260 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1433,10 +1433,7 @@ check_result_nspawn() { + local workspace="${1:?}" + local ret + +- check_result_common "${workspace}" +- ret=$? +- +- # Run additional test-specific checks if defined by check_result_nspawn_hook() ++ # Run a test-specific checks if defined by check_result_nspawn_hook() + if declare -F check_result_nspawn_hook >/dev/null; then + if ! check_result_nspawn_hook "${workspace}"; then + derror "check_result_nspawn_hook() returned with EC > 0" +@@ -1444,6 +1441,9 @@ check_result_nspawn() { + fi + fi + ++ check_result_common "${workspace}" ++ ret=$? ++ + _umount_dir "${initdir:?}" + + return $ret +@@ -1454,10 +1454,7 @@ check_result_qemu() { + local ret + mount_initdir + +- check_result_common "${initdir:?}" +- ret=$? +- +- # Run additional test-specific checks if defined by check_result_qemu_hook() ++ # Run a test-specific checks if defined by check_result_qemu_hook() + if declare -F check_result_qemu_hook >/dev/null; then + if ! check_result_qemu_hook "${initdir:?}"; then + derror "check_result_qemu_hook() returned with EC > 0" +@@ -1465,6 +1462,9 @@ check_result_qemu() { + fi + fi + ++ check_result_common "${initdir:?}" ++ ret=$? ++ + _umount_dir "${initdir:?}" + + return $ret diff --git a/SOURCES/0252-test-check-journal-directly-instead-of-capturing-con.patch b/SOURCES/0252-test-check-journal-directly-instead-of-capturing-con.patch new file mode 100644 index 0000000..6c294d9 --- /dev/null +++ b/SOURCES/0252-test-check-journal-directly-instead-of-capturing-con.patch @@ -0,0 +1,37 @@ +From 37b398e2a3d6cd225a3121843540a033f4415b80 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Fri, 17 Jun 2022 17:29:22 +0200 +Subject: [PATCH] test: check journal directly instead of capturing console + output + +(cherry picked from commit 8cda7b91ff267fc21325d4886980e243389a7566) + +Related: #2087652 +--- + test/TEST-52-HONORFIRSTSHUTDOWN/test.sh | 13 ++++--------- + 1 file changed, 4 insertions(+), 9 deletions(-) + +diff --git a/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh b/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh +index 936e801c51..6a1ec9ca29 100755 +--- a/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh ++++ b/test/TEST-52-HONORFIRSTSHUTDOWN/test.sh +@@ -14,15 +14,10 @@ TEST_NO_QEMU=1 + # could turn into a reboot if the test fails. + NSPAWN_TIMEOUT=60 + +-# Remove this file if it exists. This is used along with +-# the make target "finish". Since concrete confirmation is +-# only found from the console during the poweroff. +-rm -f /tmp/honorfirstshutdown.log >/dev/null +- + check_result_nspawn_hook() { +- grep -q "Shutdown is already active. Skipping emergency action request" /tmp/honorfirstshutdown.log ++ local workspace="${1:?}" ++ ++ "${JOURNALCTL:?}" -D "${workspace:?}/var/log/journal" --grep "Shutdown is already active. Skipping emergency action request" --no-pager + } + +-# Note: don't use a pipe in the following expression, as it breaks the trap +-# handlers we have defined in test/test-functions. +-do_test "$@" > >(tee /tmp/honorfirstshutdown.log) ++do_test "$@" diff --git a/SOURCES/0253-test-use-saved-process-PID-instead-of.patch b/SOURCES/0253-test-use-saved-process-PID-instead-of.patch new file mode 100644 index 0000000..533ce85 --- /dev/null +++ b/SOURCES/0253-test-use-saved-process-PID-instead-of.patch @@ -0,0 +1,37 @@ +From c81dea716e04419f8f7b83346015ae8f834ec30c Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Mon, 20 Jun 2022 12:27:39 +0200 +Subject: [PATCH] test: use saved process PID instead of %% + +As the `%%` specifier might fail if the current job (i.e. the last +background job) already finished: + +``` +[ 61.692196] testsuite-04.sh[656]: ++ systemd-id128 new +[ 61.705407] testsuite-04.sh[263]: + ID=912cb8f8ef304153a123f772bb0fe9e0 +[ 61.706318] testsuite-04.sh[657]: + systemd-cat -t 912cb8f8ef304153a123f772bb0fe9e0 bash -c 'echo parent; (echo child) & wait' +[ 61.720940] testsuite-04.sh[263]: + PID=657 +[ 61.721126] testsuite-04.sh[263]: + wait %% +[ 61.723014] testsuite-04.sh[263]: /usr/lib/systemd/tests/testdata/units/testsuite-04.sh: line 96: wait: %%: no such job +``` + +(cherry picked from commit 08970485003c25ce2c4adfaeea2d58558d311d42) + +Related: #2087652 +--- + test/units/testsuite-04.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/units/testsuite-04.sh b/test/units/testsuite-04.sh +index 7521a6d2e5..b5468cbea4 100755 +--- a/test/units/testsuite-04.sh ++++ b/test/units/testsuite-04.sh +@@ -93,7 +93,7 @@ cmp /expected /output + ID=$(systemd-id128 new) + systemd-cat -t "$ID" bash -c 'echo parent; (echo child) & wait' & + PID=$! +-wait %% ++wait $PID + journalctl --sync + # We can drop this grep when https://github.com/systemd/systemd/issues/13937 + # has a fix. diff --git a/SOURCES/0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch b/SOURCES/0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch new file mode 100644 index 0000000..3a735a4 --- /dev/null +++ b/SOURCES/0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch @@ -0,0 +1,58 @@ +From f55e25db1b2f69cd5d19508bda34c52f5f92e800 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 9 Jun 2022 11:34:09 +0200 +Subject: [PATCH] test: account for ADDR_NO_RANDOMIZE if it's set + +On ppc64le sanitizers disable ASLR (i.e. by setting ADDR_NO_RANDOMIZE), +which opinionated_personality() doesn't return. Let's tweak the current +personality ourselves in such cases. + +See: https://github.com/llvm/llvm-project/commit/78f7a6eaa601bfdd6ae70ffd3da2254c21ff77f9 + +Resolves: #23666 +(cherry picked from commit 894dad2975c61f59e71561cab21d6f85e8523b57) + +Related: #2087652 +--- + src/test/test-seccomp.c | 16 ++++++++++++---- + 1 file changed, 12 insertions(+), 4 deletions(-) + +diff --git a/src/test/test-seccomp.c b/src/test/test-seccomp.c +index 7ccfeadbb8..1f96ba4f80 100644 +--- a/src/test/test-seccomp.c ++++ b/src/test/test-seccomp.c +@@ -934,8 +934,15 @@ TEST(lock_personality) { + } + + assert_se(opinionated_personality(¤t) >= 0); ++ /* On ppc64le sanitizers disable ASLR (i.e. by setting ADDR_NO_RANDOMIZE), ++ * which opinionated_personality() doesn't return. Let's tweak the current ++ * personality ourselves in such cases. ++ * See: https://github.com/llvm/llvm-project/commit/78f7a6eaa601bfdd6ae70ffd3da2254c21ff77f9 ++ */ ++ if (FLAGS_SET(safe_personality(PERSONALITY_INVALID), ADDR_NO_RANDOMIZE)) ++ current |= ADDR_NO_RANDOMIZE; + +- log_info("current personality=%lu", current); ++ log_info("current personality=0x%lX", current); + + pid = fork(); + assert_se(pid >= 0); +@@ -945,13 +952,14 @@ TEST(lock_personality) { + + assert_se((unsigned long) safe_personality(current) == current); + +- /* Note, we also test that safe_personality() works correctly, by checkig whether errno is properly ++ /* Note, we also test that safe_personality() works correctly, by checking whether errno is properly + * set, in addition to the return value */ + errno = 0; +- assert_se(safe_personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -EPERM); ++ assert_se(safe_personality(PER_LINUX | MMAP_PAGE_ZERO) == -EPERM); + assert_se(errno == EPERM); + +- assert_se(safe_personality(PER_LINUX | MMAP_PAGE_ZERO) == -EPERM); ++ if (!FLAGS_SET(current, ADDR_NO_RANDOMIZE)) ++ assert_se(safe_personality(PER_LINUX | ADDR_NO_RANDOMIZE) == -EPERM); + assert_se(safe_personality(PER_LINUX | ADDR_COMPAT_LAYOUT) == -EPERM); + assert_se(safe_personality(PER_LINUX | READ_IMPLIES_EXEC) == -EPERM); + assert_se(safe_personality(PER_LINUX_32BIT) == -EPERM); diff --git a/SOURCES/0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch b/SOURCES/0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch new file mode 100644 index 0000000..13aeca4 --- /dev/null +++ b/SOURCES/0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch @@ -0,0 +1,27 @@ +From e161d3a1297408415842731be73af765fbdc5c3b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 4 Jan 2022 09:31:25 +0100 +Subject: [PATCH] fuzz-bcd: silence warning about always-true comparison + +Occurs with gcc-11.2.1-7.fc35.x86_64. + +(cherry picked from commit 5377ad4ea44e771b5eb436d381ea9f3506488295) + +Related: #2087652 +--- + src/boot/efi/fuzz-bcd.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/boot/efi/fuzz-bcd.c b/src/boot/efi/fuzz-bcd.c +index e5ed6638a4..3df55a5c36 100644 +--- a/src/boot/efi/fuzz-bcd.c ++++ b/src/boot/efi/fuzz-bcd.c +@@ -21,6 +21,7 @@ int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size) { + assert_se(p); + + char16_t *title = get_bcd_title(p, size); +- assert_se(!title || char16_strlen(title) >= 0); ++ if (title) ++ (void) char16_strlen(title); + return 0; + } diff --git a/SOURCES/0256-test-disable-test_ntp-on-RHEL.patch b/SOURCES/0256-test-disable-test_ntp-on-RHEL.patch new file mode 100644 index 0000000..1290369 --- /dev/null +++ b/SOURCES/0256-test-disable-test_ntp-on-RHEL.patch @@ -0,0 +1,26 @@ +From 9c9187a252300f5f453d995ac50edf88c5e0c855 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 22 Jun 2022 15:29:02 +0200 +Subject: [PATCH] test: disable test_ntp on RHEL + +since we don't ship systemd-timesyncd. + +rhel-only + +Related: #2087652 +--- + test/units/testsuite-45.sh | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/test/units/testsuite-45.sh b/test/units/testsuite-45.sh +index 322d8086e7..75e07bc09a 100755 +--- a/test/units/testsuite-45.sh ++++ b/test/units/testsuite-45.sh +@@ -258,7 +258,6 @@ EOF + + test_timezone + test_adjtime +-test_ntp + + touch /testok + rm /failed diff --git a/SOURCES/0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch b/SOURCES/0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch new file mode 100644 index 0000000..e5c6950 --- /dev/null +++ b/SOURCES/0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch @@ -0,0 +1,40 @@ +From b6d5a57b8181cc2565e2231fc9baf95fc9cc481e Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sat, 2 Jul 2022 04:18:41 +0900 +Subject: [PATCH] core: do not filter out systemd.unit= and run-level specifier + from kernel command line + +Fixes a bug introduced by 846f1da465beda990c1c01346311393f485df467. + +The commit 846f1da465beda990c1c01346311393f485df467 made systemd.unit= +filtered out from the command line. That causes debug-generator does not +work as expected on daemon-reexecute, and we cannot call `systemctl +daemon-reexecute` in our test suite running on nspawn. + +Fixes issue reported in https://github.com/systemd/systemd/pull/23851#issuecomment-1170992052. + +(cherry picked from commit bffde9b5869fffc09e7824d2ac0aeb82a31a134b) + +Related: #2087652 +--- + src/core/main.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/src/core/main.c b/src/core/main.c +index 667e972364..03efaa03be 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1812,13 +1812,6 @@ static void filter_args( + continue; + } + +- if (startswith(src[i], +- in_initrd() ? "rd.systemd.unit=" : "systemd.unit=")) +- continue; +- +- if (runlevel_to_target(src[i])) +- continue; +- + /* Seems we have a good old option. Let's pass it over to the new instance. */ + dst[(*dst_index)++] = src[i]; + } diff --git a/SOURCES/0258-test-add-a-simple-test-for-daemon-reexec.patch b/SOURCES/0258-test-add-a-simple-test-for-daemon-reexec.patch new file mode 100644 index 0000000..2d3c08d --- /dev/null +++ b/SOURCES/0258-test-add-a-simple-test-for-daemon-reexec.patch @@ -0,0 +1,27 @@ +From a1b8ff570b5ed95697f4748cfe3bbe154802c37e Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Sat, 2 Jul 2022 05:21:52 +0900 +Subject: [PATCH] test: add a simple test for daemon-reexec + +(cherry picked from commit d1b1bbfbfa1cb7d225250fc08089d1de17eaef7c) + +Related: #2087652 +--- + test/units/testsuite-03.sh | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/test/units/testsuite-03.sh b/test/units/testsuite-03.sh +index 070e978cda..7c5a3b8f19 100755 +--- a/test/units/testsuite-03.sh ++++ b/test/units/testsuite-03.sh +@@ -3,6 +3,10 @@ + set -eux + set -o pipefail + ++# Simple test for that daemon-reexec works in container. ++# See: https://github.com/systemd/systemd/pull/23883 ++systemctl daemon-reexec ++ + # Test merging of a --job-mode=ignore-dependencies job into a previously + # installed job. + diff --git a/SOURCES/0259-test-install-usr-libexec-vi-as-well.patch b/SOURCES/0259-test-install-usr-libexec-vi-as-well.patch new file mode 100644 index 0000000..f9560a2 --- /dev/null +++ b/SOURCES/0259-test-install-usr-libexec-vi-as-well.patch @@ -0,0 +1,27 @@ +From e6dfbe67f94d60b889f3031ebb644ed262d7fe35 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Sat, 16 Apr 2022 14:43:17 +0200 +Subject: [PATCH] test: install /usr/libexec/vi as well + +since `/bin/vi` (at least on Fedora) is a shell wrapper which runs +either `/bin/vim` or `/usr/libexec/vi` based on availability. + +(cherry picked from commit 8afe2f53b25ca99bc5bd1ec0c5dff7e183712577) + +Related: #2087652 +--- + test/test-functions | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/test/test-functions b/test/test-functions +index 1306dcf260..9e171cba30 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -225,6 +225,7 @@ DEBUGTOOLS=( + stty + tty + vi ++ /usr/libexec/vi + ) + + is_built_with_asan() { diff --git a/SOURCES/0260-test-resize-the-terminal-automagically-with-INTERACT.patch b/SOURCES/0260-test-resize-the-terminal-automagically-with-INTERACT.patch new file mode 100644 index 0000000..72dbd31 --- /dev/null +++ b/SOURCES/0260-test-resize-the-terminal-automagically-with-INTERACT.patch @@ -0,0 +1,37 @@ +From 70ff2f68c1cf9bdfe79ab4719ee0a051bbcb22eb Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Sun, 17 Apr 2022 19:49:17 +0200 +Subject: [PATCH] test: resize the terminal automagically with + INTERACTIVE_DEBUG=yes + +(cherry picked from commit 17082e8ac1b5335465876d100774893ba735fca4) + +Related: #2087652 +--- + test/test-functions | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index 9e171cba30..42ad16050c 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1678,14 +1678,12 @@ install_debug_tools() { + local getty_override="${initdir:?}/etc/systemd/system/serial-getty@.service.d" + mkdir -p "$getty_override" + echo -e "[Service]\nEnvironment=TERM=linux" >"$getty_override/default-TERM.conf" ++ echo 'export TERM=linux' >>"$initdir/etc/profile" + +- cat >"$initdir/etc/motd" </dev/null; then ++ image_install resize ++ echo "resize" >>"$initdir/etc/profile" ++ fi + fi + } + diff --git a/SOURCES/0261-test-create-an-ASan-wrapper-for-getent-and-su.patch b/SOURCES/0261-test-create-an-ASan-wrapper-for-getent-and-su.patch new file mode 100644 index 0000000..12f3b92 --- /dev/null +++ b/SOURCES/0261-test-create-an-ASan-wrapper-for-getent-and-su.patch @@ -0,0 +1,31 @@ +From ab5ddf261e2a8c840c0224b5c8ef5932465e4eb8 Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Thu, 7 Jul 2022 14:12:38 +0200 +Subject: [PATCH] test: create an ASan wrapper for `getent` and `su` + +since they "suffer" from the same issue as `login` and other binaries +that load PAM stuff + +(cherry picked from commit fdb70dd9222219307ca53662e789fc9304ca3616) + +Related: #2087652 +--- + test/test-functions | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index 42ad16050c..8523cf2d21 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -2410,9 +2410,9 @@ inst_binary() { + + # Same as above, but we need to wrap certain libraries unconditionally + # +- # login, useradd, userdel - dlopen()s (not only) systemd's PAM modules ++ # getent, login, su, useradd, userdel - dlopen()s (not only) systemd's PAM modules + # tar - called by machinectl in TEST-25 +- if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(login|tar|useradd|userdel)$ ]]; then ++ if get_bool "$IS_BUILT_WITH_ASAN" && [[ "$bin" =~ /(getent|login|su|tar|useradd|userdel)$ ]]; then + wrap_binary=1 + fi + diff --git a/SOURCES/0262-test-mark-partition-bootable.patch b/SOURCES/0262-test-mark-partition-bootable.patch new file mode 100644 index 0000000..fd719a2 --- /dev/null +++ b/SOURCES/0262-test-mark-partition-bootable.patch @@ -0,0 +1,29 @@ +From f039730a8e2d0a6c8ea7539ffb1a54c8951f3622 Mon Sep 17 00:00:00 2001 +From: Ludwig Nussel +Date: Mon, 27 Dec 2021 10:34:52 +0100 +Subject: [PATCH] test: mark partition bootable + +Make test suite partition bootable so nspawn can use the image directly. +Useful for local testing. + +https://systemd.io/DISCOVERABLE_PARTITIONS/ +(cherry picked from commit b13a8b5b377f60cacad98fa8a989e992e8724c0e) + +Related: #2087652 +--- + test/test-functions | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/test-functions b/test/test-functions +index 8523cf2d21..b596ce1382 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1219,7 +1219,7 @@ create_empty_image() { + LOOPDEV=$(losetup --show -P -f "$IMAGE_PUBLIC") + [ -b "$LOOPDEV" ] || return 1 + sfdisk "$LOOPDEV" < +Date: Thu, 7 Jul 2022 14:13:32 +0200 +Subject: [PATCH] test: bump the data partition size if we don't strip binaries + +so we can run TEST-24 under sanitizers as well. + +Also, when at it, use the 'named-fields' sfdisk format to make the code +a bit more descriptive without needing a manual. + +(cherry picked from commit 98b27937cb02dac98d8a9f0c48ba677b45df0831) + +Related: #2087652 +--- + test/test-functions | 23 ++++++++++++++--------- + 1 file changed, 14 insertions(+), 9 deletions(-) + +diff --git a/test/test-functions b/test/test-functions +index b596ce1382..b0f3b28def 100644 +--- a/test/test-functions ++++ b/test/test-functions +@@ -1194,33 +1194,38 @@ create_empty_image() { + exit 1 + fi + +- local size=500 ++ # Partition sizes are in MiBs ++ local root_size=500 ++ local data_size=50 + if ! get_bool "$NO_BUILD"; then + if meson configure "${BUILD_DIR:?}" | grep 'static-lib\|standalone-binaries' | awk '{ print $2 }' | grep -q 'true'; then +- size=$((size+=200)) ++ root_size=$((root_size+=200)) + fi + if meson configure "${BUILD_DIR:?}" | grep 'link-.*-shared' | awk '{ print $2 }' | grep -q 'false'; then +- size=$((size+=200)) ++ root_size=$((root_size+=200)) + fi + if get_bool "$IS_BUILT_WITH_COVERAGE"; then +- size=$((size+=250)) ++ root_size=$((root_size+=250)) + fi + fi + if ! get_bool "$STRIP_BINARIES"; then +- size=$((4 * size)) ++ root_size=$((4 * root_size)) ++ data_size=$((2 * data_size)) + fi + +- echo "Setting up ${IMAGE_PUBLIC:?} (${size} MB)" ++ echo "Setting up ${IMAGE_PUBLIC:?} (${root_size} MB)" + rm -f "${IMAGE_PRIVATE:?}" "$IMAGE_PUBLIC" + + # Create the blank file to use as a root filesystem +- truncate -s "${size}M" "$IMAGE_PUBLIC" ++ truncate -s "${root_size}M" "$IMAGE_PUBLIC" + + LOOPDEV=$(losetup --show -P -f "$IMAGE_PUBLIC") + [ -b "$LOOPDEV" ] || return 1 ++ # Create two partitions - a root one and a data one (utilized by some tests) + sfdisk "$LOOPDEV" < +Date: Thu, 7 Jul 2022 17:16:31 +0200 +Subject: [PATCH] test: use PBKDF2 with capped iterations instead of Argon2 + +to reduce the amount of resources the test needs (similarly to TEST-24 +where we do the same thing). + +(cherry picked from commit 8fec14a7d397f52b93024bf3417de8f77b0d85e6) + +Related: #2087652 +--- + test/units/testsuite-70.sh | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/units/testsuite-70.sh b/test/units/testsuite-70.sh +index f395ef4e5e..09f78a0226 100755 +--- a/test/units/testsuite-70.sh ++++ b/test/units/testsuite-70.sh +@@ -9,7 +9,7 @@ export SYSTEMD_LOG_LEVEL=debug + img="/var/tmp/test.img" + dd if=/dev/zero of=$img bs=1024k count=20 status=none + echo -n passphrase >/tmp/passphrase +-cryptsetup luksFormat -q --use-urandom $img /tmp/passphrase ++cryptsetup luksFormat -q --pbkdf pbkdf2 --pbkdf-force-iterations 1000 --use-urandom $img /tmp/passphrase + + # Enroll unlock with default PCR policy + env PASSWORD=passphrase systemd-cryptenroll --tpm2-device=auto $img diff --git a/SOURCES/0265-locale-drop-unnecessary-allocation.patch b/SOURCES/0265-locale-drop-unnecessary-allocation.patch new file mode 100644 index 0000000..f123b35 --- /dev/null +++ b/SOURCES/0265-locale-drop-unnecessary-allocation.patch @@ -0,0 +1,31 @@ +From b93eca3f277547c7e45c6840f2a582b20319a93a Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Sat, 18 Jun 2022 11:06:46 +0900 +Subject: [PATCH] locale: drop unnecessary allocation + +Fixes a bug introduced by 3d36b5d7e7b191fca7c5c65dbab94d99cf5f0230. + +Fixes #23777. + +(cherry picked from commit e83cfbf97247e391e9fc19a7abb2712c77f3b4c0) + +Related: #2087652 +--- + src/locale/localed.c | 4 ---- + 1 file changed, 4 deletions(-) + +diff --git a/src/locale/localed.c b/src/locale/localed.c +index 2c324efb14..791b5e60dd 100644 +--- a/src/locale/localed.c ++++ b/src/locale/localed.c +@@ -152,10 +152,6 @@ static int property_get_locale( + if (r < 0) + return r; + +- l = new0(char*, _VARIABLE_LC_MAX+1); +- if (!l) +- return -ENOMEM; +- + r = locale_context_build_env(&c->locale_context, &l, NULL); + if (r < 0) + return r; diff --git a/SOURCES/0266-Revert-shared-install-create-relative-symlinks-for-e.patch b/SOURCES/0266-Revert-shared-install-create-relative-symlinks-for-e.patch new file mode 100644 index 0000000..f8cf7cd --- /dev/null +++ b/SOURCES/0266-Revert-shared-install-create-relative-symlinks-for-e.patch @@ -0,0 +1,604 @@ +From 7cff4a47721c2cc07648e7a84a6dee2c5e930412 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 12 Apr 2022 22:01:10 +0200 +Subject: [PATCH] Revert "shared/install: create relative symlinks for + enablement and aliasing" + +This reverts commit d6c9411072901556176ac130f2ce71a33107aa93. + +I still think this is something that needs to be done, but we're hitting some +unexplained failures, e.g. https://github.com/systemd/systemd/issues/22920. +So let's revert this for now, so -rc2 can be released, with a plan to return +to this after a release. + +Closes #22920. + +(cherry picked from commit 9aa3d6b41eadff6634bb3cf800064724171a7aad) + +Resolves: #2118668 +--- + src/shared/install.c | 14 ++-- + src/test/test-install-root.c | 65 ++++++++--------- + test/test-systemctl-enable.sh | 130 ++++++++++++++++++---------------- + 3 files changed, 103 insertions(+), 106 deletions(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index 96d64d32bb..eb5c3d5f91 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -1904,7 +1904,7 @@ static int install_info_symlink_alias( + if (!alias_path) + return -ENOMEM; + +- q = create_symlink(lp, info->name, alias_path, force, changes, n_changes); ++ q = create_symlink(lp, info->path, alias_path, force, changes, n_changes); + r = r < 0 ? r : q; + } + +@@ -1973,7 +1973,7 @@ static int install_info_symlink_wants( + } + + STRV_FOREACH(s, list) { +- _cleanup_free_ char *dst = NULL; ++ _cleanup_free_ char *path = NULL, *dst = NULL; + + q = install_name_printf(scope, info, *s, &dst); + if (q < 0) { +@@ -2003,15 +2003,11 @@ static int install_info_symlink_wants( + continue; + } + +- _cleanup_free_ char *path = strjoin(config_path, "/", dst, suffix, n); ++ path = strjoin(config_path, "/", dst, suffix, n); + if (!path) + return -ENOMEM; + +- _cleanup_free_ char *target = strjoin("../", info->name); +- if (!target) +- return -ENOMEM; +- +- q = create_symlink(lp, target, path, true, changes, n_changes); ++ q = create_symlink(lp, info->path, path, true, changes, n_changes); + if (r == 0) + r = q; + +@@ -2919,7 +2915,7 @@ int unit_file_set_default( + return r; + + new_path = strjoina(lp.persistent_config, "/" SPECIAL_DEFAULT_TARGET); +- return create_symlink(&lp, info->name, new_path, flags & UNIT_FILE_FORCE, changes, n_changes); ++ return create_symlink(&lp, info->path, new_path, flags & UNIT_FILE_FORCE, changes, n_changes); + } + + int unit_file_get_default( +diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c +index a36536b85b..c2980ccbbd 100644 +--- a/src/test/test-install-root.c ++++ b/src/test/test-install-root.c +@@ -88,7 +88,7 @@ TEST(basic_mask_and_enable) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("a.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../a.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -128,7 +128,7 @@ TEST(basic_mask_and_enable) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("d.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../a.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/a.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -147,7 +147,7 @@ TEST(basic_mask_and_enable) { + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/a.service"); + assert_se(streq(changes[0].path, p)); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[1].source, "../a.service")); ++ assert_se(streq(changes[1].source, "/usr/lib/systemd/system/a.service")); + assert_se(streq(changes[1].path, p)); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; +@@ -186,7 +186,7 @@ TEST(basic_mask_and_enable) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("f.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../f.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/f.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/x.target.wants/f.service"); + assert_se(streq(changes[0].path, p)); + assert_se(changes[1].type_or_errno == UNIT_FILE_DESTINATION_NOT_PRESENT); +@@ -280,8 +280,7 @@ TEST(linked_units) { + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked.service"); + for (i = 0 ; i < n_changes; i++) { + assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(STR_IN_SET(changes[i].source, +- "../linked.service", "/opt/linked.service")); ++ assert_se(streq(changes[i].source, "/opt/linked.service")); + + if (p && streq(changes[i].path, p)) + p = NULL; +@@ -323,8 +322,7 @@ TEST(linked_units) { + q = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/linked2.service"); + for (i = 0 ; i < n_changes; i++) { + assert_se(changes[i].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(STR_IN_SET(changes[i].source, +- "../linked2.service", "/opt/linked2.service")); ++ assert_se(streq(changes[i].source, "/opt/linked2.service")); + + if (p && streq(changes[i].path, p)) + p = NULL; +@@ -342,7 +340,7 @@ TEST(linked_units) { + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(startswith(changes[0].path, root)); + assert_se(endswith(changes[0].path, "linked3.service")); +- assert_se(streq(changes[0].source, "../linked3.service")); ++ assert_se(streq(changes[0].source, "/opt/linked3.service")); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + } +@@ -373,7 +371,7 @@ TEST(default) { + assert_se(unit_file_set_default(LOOKUP_SCOPE_SYSTEM, 0, root, "test-default.target", &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "test-default-real.target")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/test-default-real.target")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR "/" SPECIAL_DEFAULT_TARGET); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -403,7 +401,7 @@ TEST(add_dependency) { + assert_se(unit_file_add_dependency(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("add-dependency-test-service.service"), "add-dependency-test-target.target", UNIT_WANTS, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../real-add-dependency-test-service.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/real-add-dependency-test-service.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/real-add-dependency-test-target.target.wants/real-add-dependency-test-service.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -444,7 +442,7 @@ TEST(template_enable) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../template@.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@def.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -475,14 +473,13 @@ TEST(template_enable) { + + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template@foo.service"), &changes, &n_changes) >= 0); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../template@foo.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@foo.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); + changes = NULL; n_changes = 0; + +- assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0); +- assert_se(state == UNIT_FILE_INDIRECT); ++ assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@.service", &state) >= 0 && state == UNIT_FILE_INDIRECT); + assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@def.service", &state) >= 0 && state == UNIT_FILE_DISABLED); + assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); + assert_se(unit_file_get_state(LOOKUP_SCOPE_SYSTEM, root, "template-symlink@foo.service", &state) >= 0 && state == UNIT_FILE_ENABLED); +@@ -509,7 +506,7 @@ TEST(template_enable) { + + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("template-symlink@quux.service"), &changes, &n_changes) >= 0); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../template@quux.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/template@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/template@quux.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -555,7 +552,7 @@ TEST(indirect) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("indirectc.service"), &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../indirectb.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/indirectb.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/indirectb.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -607,7 +604,7 @@ TEST(preset_and_list) { + assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("preset-yes.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../preset-yes.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/preset-yes.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/preset-yes.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -644,7 +641,7 @@ TEST(preset_and_list) { + for (i = 0; i < n_changes; i++) { + + if (changes[i].type_or_errno == UNIT_FILE_SYMLINK) { +- assert_se(streq(changes[i].source, "../preset-yes.service")); ++ assert_se(streq(changes[i].source, "/usr/lib/systemd/system/preset-yes.service")); + assert_se(streq(changes[i].path, p)); + } else + assert_se(changes[i].type_or_errno == UNIT_FILE_UNLINK); +@@ -760,7 +757,7 @@ TEST(preset_order) { + assert_se(unit_file_preset(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("prefix-1.service"), UNIT_FILE_PRESET_FULL, &changes, &n_changes) >= 0); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../prefix-1.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/prefix-1.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/prefix-1.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -869,8 +866,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-1.service")); +- assert_se(streq(changes[1].source, "../with-dropin-1.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1.service")); ++ assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1.service"); +@@ -883,8 +880,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-2.service")); +- assert_se(streq(changes[1].source, "../with-dropin-2.service")); ++ assert_se(streq(changes[0].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service")); ++ assert_se(streq(changes[1].source, SYSTEM_CONFIG_UNIT_DIR"/with-dropin-2.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2.service"); +@@ -897,8 +894,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-3.service")); +- assert_se(streq(changes[1].source, "../with-dropin-3.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3.service")); ++ assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-3.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-3.service"); +@@ -911,8 +908,8 @@ TEST(with_dropin) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-4a.service")); +- assert_se(streq(changes[1].source, "../with-dropin-4b.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-4a.service")); ++ assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-4b.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4a.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-4b.service"); +@@ -978,8 +975,8 @@ TEST(with_dropin_template) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-1@instance-1.service")); +- assert_se(streq(changes[1].source, "../with-dropin-1@instance-1.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-1@.service")); ++ assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-1@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-1@instance-1.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-1@instance-1.service"); +@@ -991,8 +988,8 @@ TEST(with_dropin_template) { + assert_se(n_changes == 2); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); + assert_se(changes[1].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-2@instance-1.service")); +- assert_se(streq(changes[1].source, "../with-dropin-2@instance-1.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service")); ++ assert_se(streq(changes[1].source, "/usr/lib/systemd/system/with-dropin-2@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-1.service"); + assert_se(streq(changes[0].path, p)); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/graphical.target.wants/with-dropin-2@instance-1.service"); +@@ -1003,7 +1000,7 @@ TEST(with_dropin_template) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-2@instance-2.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-2@instance-2.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-2@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-2@instance-2.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +@@ -1012,7 +1009,7 @@ TEST(with_dropin_template) { + assert_se(unit_file_enable(LOOKUP_SCOPE_SYSTEM, 0, root, STRV_MAKE("with-dropin-3@.service"), &changes, &n_changes) == 1); + assert_se(n_changes == 1); + assert_se(changes[0].type_or_errno == UNIT_FILE_SYMLINK); +- assert_se(streq(changes[0].source, "../with-dropin-3@.service")); ++ assert_se(streq(changes[0].source, "/usr/lib/systemd/system/with-dropin-3@.service")); + p = strjoina(root, SYSTEM_CONFIG_UNIT_DIR"/multi-user.target.wants/with-dropin-3@instance-2.service"); + assert_se(streq(changes[0].path, p)); + unit_file_changes_free(changes, n_changes); +diff --git a/test/test-systemctl-enable.sh b/test/test-systemctl-enable.sh +index ac1bcc1cc7..0f9f220571 100644 +--- a/test/test-systemctl-enable.sh ++++ b/test/test-systemctl-enable.sh +@@ -90,27 +90,27 @@ EOF + ( ! "$systemctl" --root="$root" enable test1 ) + test -h "$root/etc/systemd/system/default.target.wants/test1.service" + test -h "$root/etc/systemd/system/special.target.requires/test1.service" +-test -e "$root/etc/systemd/system/test1-goodalias.service" ++test ! -e "$root/etc/systemd/system/test1-goodalias.service" + test -h "$root/etc/systemd/system/test1-goodalias.service" +-test ! -h "$root/etc/systemd/system/test1@badalias.service" +-test ! -h "$root/etc/systemd/system/test1-badalias.target" +-test ! -h "$root/etc/systemd/system/test1-badalias.socket" +-test -e "$root/etc/systemd/system/test1-goodalias2.service" ++test ! -e "$root/etc/systemd/system/test1@badalias.service" ++test ! -e "$root/etc/systemd/system/test1-badalias.target" ++test ! -e "$root/etc/systemd/system/test1-badalias.socket" + test -h "$root/etc/systemd/system/test1-goodalias2.service" + + : '-------aliases in reeanble----------------------------------' + ( ! "$systemctl" --root="$root" reenable test1 ) +-islink "$root/etc/systemd/system/default.target.wants/test1.service" "../test1.service" +-islink "$root/etc/systemd/system/test1-goodalias.service" "test1.service" ++test -h "$root/etc/systemd/system/default.target.wants/test1.service" ++test ! -e "$root/etc/systemd/system/test1-goodalias.service" ++test -h "$root/etc/systemd/system/test1-goodalias.service" + +-test ! -h "$root/etc/systemd/system/test1@badalias.service" +-test ! -h "$root/etc/systemd/system/test1-badalias.target" +-test ! -h "$root/etc/systemd/system/test1-badalias.socket" ++test ! -e "$root/etc/systemd/system/test1@badalias.service" ++test ! -e "$root/etc/systemd/system/test1-badalias.target" ++test ! -e "$root/etc/systemd/system/test1-badalias.socket" + + "$systemctl" --root="$root" disable test1 +-test ! -h "$root/etc/systemd/system/default.target.wants/test1.service" +-test ! -h "$root/etc/systemd/system/special.target.requires/test1.service" +-test ! -h "$root/etc/systemd/system/test1-goodalias.service" ++test ! -e "$root/etc/systemd/system/default.target.wants/test1.service" ++test ! -e "$root/etc/systemd/system/special.target.requires/test1.service" ++test ! -e "$root/etc/systemd/system/test1-goodalias.service" + + : '-------aliases when link already exists---------------------' + cat >"$root/etc/systemd/system/test1a.service" <"$root/link3.suffix" <"$root/etc/systemd/system/templ1@.service" < +Date: Wed, 16 Feb 2022 14:53:34 +0100 +Subject: [PATCH] glyph-util: add new glyphs for up/down arrows + +(cherry picked from commit fc03e80c6b19521ecf4f3af06865b2054e685f9a) + +Related: #2118297 +--- + src/analyze/analyze-security.c | 2 +- + src/basic/chase-symlinks.c | 2 +- + src/basic/glyph-util.c | 10 ++++++++-- + src/basic/glyph-util.h | 5 ++++- + src/delta/delta.c | 20 ++++++++++---------- + src/partition/repart.c | 4 ++-- + src/portable/portable.c | 6 +++--- + src/portable/portablectl.c | 4 ++-- + src/shared/cgroup-show.c | 2 +- + src/shared/install.c | 2 +- + src/test/test-locale-util.c | 5 ++++- + 11 files changed, 37 insertions(+), 25 deletions(-) + +diff --git a/src/analyze/analyze-security.c b/src/analyze/analyze-security.c +index e112922cbf..522d443f8a 100644 +--- a/src/analyze/analyze-security.c ++++ b/src/analyze/analyze-security.c +@@ -1902,7 +1902,7 @@ static int assess(const SecurityInfo *info, + name = info->id; + + printf("\n%s %sOverall exposure level for %s%s: %s%" PRIu64 ".%" PRIu64 " %s%s %s\n", +- special_glyph(SPECIAL_GLYPH_ARROW), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + ansi_highlight(), + name, + ansi_normal(), +diff --git a/src/basic/chase-symlinks.c b/src/basic/chase-symlinks.c +index 344e7e1bb7..61f8b3351b 100644 +--- a/src/basic/chase-symlinks.c ++++ b/src/basic/chase-symlinks.c +@@ -41,7 +41,7 @@ static int log_unsafe_transition(int a, int b, const char *path, unsigned flags) + + return log_warning_errno(SYNTHETIC_ERRNO(ENOLINK), + "Detected unsafe path transition %s (owned by %s) %s %s (owned by %s) during canonicalization of %s.", +- strna(n1), strna(user_a), special_glyph(SPECIAL_GLYPH_ARROW), strna(n2), strna(user_b), path); ++ strna(n1), strna(user_a), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), strna(n2), strna(user_b), path); + } + + static int log_autofs_mount_point(int fd, const char *path, unsigned flags) { +diff --git a/src/basic/glyph-util.c b/src/basic/glyph-util.c +index 8810738fc3..4583b7412c 100644 +--- a/src/basic/glyph-util.c ++++ b/src/basic/glyph-util.c +@@ -39,6 +39,7 @@ const char *special_glyph(SpecialGlyph code) { + [SPECIAL_GLYPH_TREE_BRANCH] = "|-", + [SPECIAL_GLYPH_TREE_RIGHT] = "`-", + [SPECIAL_GLYPH_TREE_SPACE] = " ", ++ [SPECIAL_GLYPH_TREE_TOP] = ",-", + [SPECIAL_GLYPH_TRIANGULAR_BULLET] = ">", + [SPECIAL_GLYPH_BLACK_CIRCLE] = "*", + [SPECIAL_GLYPH_WHITE_CIRCLE] = "*", +@@ -51,7 +52,9 @@ const char *special_glyph(SpecialGlyph code) { + [SPECIAL_GLYPH_LIGHT_SHADE] = "-", + [SPECIAL_GLYPH_DARK_SHADE] = "X", + [SPECIAL_GLYPH_SIGMA] = "S", +- [SPECIAL_GLYPH_ARROW] = "->", ++ [SPECIAL_GLYPH_ARROW_RIGHT] = "->", ++ [SPECIAL_GLYPH_ARROW_UP] = "^", ++ [SPECIAL_GLYPH_ARROW_DOWN] = "v", + [SPECIAL_GLYPH_ELLIPSIS] = "...", + [SPECIAL_GLYPH_EXTERNAL_LINK] = "[LNK]", + [SPECIAL_GLYPH_ECSTATIC_SMILEY] = ":-]", +@@ -75,6 +78,7 @@ const char *special_glyph(SpecialGlyph code) { + [SPECIAL_GLYPH_TREE_BRANCH] = "\342\224\234\342\224\200", /* ├─ */ + [SPECIAL_GLYPH_TREE_RIGHT] = "\342\224\224\342\224\200", /* └─ */ + [SPECIAL_GLYPH_TREE_SPACE] = " ", /* */ ++ [SPECIAL_GLYPH_TREE_TOP] = "\u250C\342\224\200", /* ┌─ */ + + /* Single glyphs in both cases */ + [SPECIAL_GLYPH_TRIANGULAR_BULLET] = "\342\200\243", /* ‣ */ +@@ -89,9 +93,11 @@ const char *special_glyph(SpecialGlyph code) { + [SPECIAL_GLYPH_LIGHT_SHADE] = "\342\226\221", /* ░ */ + [SPECIAL_GLYPH_DARK_SHADE] = "\342\226\223", /* ▒ */ + [SPECIAL_GLYPH_SIGMA] = "\316\243", /* Σ */ ++ [SPECIAL_GLYPH_ARROW_UP] = "\u2191", /* ↑ (actually called: UPWARDS ARROW) */ ++ [SPECIAL_GLYPH_ARROW_DOWN] = "\u2193", /* ↓ (actually called: DOWNWARDS ARROW) */ + + /* Single glyph in Unicode, two in ASCII */ +- [SPECIAL_GLYPH_ARROW] = "\342\206\222", /* → (actually called: RIGHTWARDS ARROW) */ ++ [SPECIAL_GLYPH_ARROW_RIGHT] = "\342\206\222", /* → (actually called: RIGHTWARDS ARROW) */ + + /* Single glyph in Unicode, three in ASCII */ + [SPECIAL_GLYPH_ELLIPSIS] = "\342\200\246", /* … (actually called: HORIZONTAL ELLIPSIS) */ +diff --git a/src/basic/glyph-util.h b/src/basic/glyph-util.h +index ddee210041..7e0a73842a 100644 +--- a/src/basic/glyph-util.h ++++ b/src/basic/glyph-util.h +@@ -11,6 +11,7 @@ typedef enum SpecialGlyph { + SPECIAL_GLYPH_TREE_BRANCH, + SPECIAL_GLYPH_TREE_RIGHT, + SPECIAL_GLYPH_TREE_SPACE, ++ SPECIAL_GLYPH_TREE_TOP, + SPECIAL_GLYPH_TRIANGULAR_BULLET, + SPECIAL_GLYPH_BLACK_CIRCLE, + SPECIAL_GLYPH_WHITE_CIRCLE, +@@ -20,7 +21,9 @@ typedef enum SpecialGlyph { + SPECIAL_GLYPH_MU, + SPECIAL_GLYPH_CHECK_MARK, + SPECIAL_GLYPH_CROSS_MARK, +- SPECIAL_GLYPH_ARROW, ++ SPECIAL_GLYPH_ARROW_RIGHT, ++ SPECIAL_GLYPH_ARROW_UP, ++ SPECIAL_GLYPH_ARROW_DOWN, + SPECIAL_GLYPH_ELLIPSIS, + SPECIAL_GLYPH_LIGHT_SHADE, + SPECIAL_GLYPH_DARK_SHADE, +diff --git a/src/delta/delta.c b/src/delta/delta.c +index eafe1c05c4..aa5a546bce 100644 +--- a/src/delta/delta.c ++++ b/src/delta/delta.c +@@ -91,7 +91,7 @@ static int notify_override_masked(const char *top, const char *bottom) { + + printf("%s%s%s %s %s %s\n", + ansi_highlight_red(), "[MASKED]", ansi_normal(), +- top, special_glyph(SPECIAL_GLYPH_ARROW), bottom); ++ top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom); + return 1; + } + +@@ -101,7 +101,7 @@ static int notify_override_equivalent(const char *top, const char *bottom) { + + printf("%s%s%s %s %s %s\n", + ansi_highlight_green(), "[EQUIVALENT]", ansi_normal(), +- top, special_glyph(SPECIAL_GLYPH_ARROW), bottom); ++ top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom); + return 1; + } + +@@ -111,7 +111,7 @@ static int notify_override_redirected(const char *top, const char *bottom) { + + printf("%s%s%s %s %s %s\n", + ansi_highlight(), "[REDIRECTED]", ansi_normal(), +- top, special_glyph(SPECIAL_GLYPH_ARROW), bottom); ++ top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom); + return 1; + } + +@@ -121,7 +121,7 @@ static int notify_override_overridden(const char *top, const char *bottom) { + + printf("%s%s%s %s %s %s\n", + ansi_highlight(), "[OVERRIDDEN]", ansi_normal(), +- top, special_glyph(SPECIAL_GLYPH_ARROW), bottom); ++ top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom); + return 1; + } + +@@ -131,7 +131,7 @@ static int notify_override_extended(const char *top, const char *bottom) { + + printf("%s%s%s %s %s %s\n", + ansi_highlight(), "[EXTENDED]", ansi_normal(), +- top, special_glyph(SPECIAL_GLYPH_ARROW), bottom); ++ top, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), bottom); + return 1; + } + +@@ -235,7 +235,7 @@ static int enumerate_dir_d( + return -ENOMEM; + d = p + strlen(toppath) + 1; + +- log_debug("Adding at top: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW), p); ++ log_debug("Adding at top: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p); + k = ordered_hashmap_put(top, d, p); + if (k >= 0) { + p = strdup(p); +@@ -247,7 +247,7 @@ static int enumerate_dir_d( + return k; + } + +- log_debug("Adding at bottom: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW), p); ++ log_debug("Adding at bottom: %s %s %s", d, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p); + free(ordered_hashmap_remove(bottom, d)); + k = ordered_hashmap_put(bottom, d, p); + if (k < 0) { +@@ -271,7 +271,7 @@ static int enumerate_dir_d( + return -ENOMEM; + + log_debug("Adding to drops: %s %s %s %s %s", +- unit, special_glyph(SPECIAL_GLYPH_ARROW), basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p); ++ unit, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p); + k = ordered_hashmap_put(h, basename(p), p); + if (k < 0) { + free(p); +@@ -347,7 +347,7 @@ static int enumerate_dir( + if (!p) + return -ENOMEM; + +- log_debug("Adding at top: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p); ++ log_debug("Adding at top: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p); + r = ordered_hashmap_put(top, basename(p), p); + if (r >= 0) { + p = strdup(p); +@@ -356,7 +356,7 @@ static int enumerate_dir( + } else if (r != -EEXIST) + return r; + +- log_debug("Adding at bottom: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW), p); ++ log_debug("Adding at bottom: %s %s %s", basename(p), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p); + free(ordered_hashmap_remove(bottom, basename(p))); + r = ordered_hashmap_put(bottom, basename(p), p); + if (r < 0) +diff --git a/src/partition/repart.c b/src/partition/repart.c +index 67e379be55..9f95713130 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -1968,9 +1968,9 @@ static int format_size_change(uint64_t from, uint64_t to, char **ret) { + if (from == to || to == UINT64_MAX) + t = strdup(FORMAT_BYTES(from)); + else +- t = strjoin(FORMAT_BYTES(from), " ", special_glyph(SPECIAL_GLYPH_ARROW), " ", FORMAT_BYTES(to)); ++ t = strjoin(FORMAT_BYTES(from), " ", special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), " ", FORMAT_BYTES(to)); + } else if (to != UINT64_MAX) +- t = strjoin(special_glyph(SPECIAL_GLYPH_ARROW), " ", FORMAT_BYTES(to)); ++ t = strjoin(special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), " ", FORMAT_BYTES(to)); + else { + *ret = NULL; + return 0; +diff --git a/src/portable/portable.c b/src/portable/portable.c +index 4c75dc0e0c..c1e253061f 100644 +--- a/src/portable/portable.c ++++ b/src/portable/portable.c +@@ -1011,14 +1011,14 @@ static int install_profile_dropin( + + r = copy_file_atomic(from, dropin, 0644, 0, 0, COPY_REFLINK); + if (r < 0) +- return log_debug_errno(r, "Failed to copy %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW), dropin); ++ return log_debug_errno(r, "Failed to copy %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dropin); + + (void) portable_changes_add(changes, n_changes, PORTABLE_COPY, dropin, from); + + } else { + + if (symlink(from, dropin) < 0) +- return log_debug_errno(errno, "Failed to link %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW), dropin); ++ return log_debug_errno(errno, "Failed to link %s %s %s: %m", from, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dropin); + + (void) portable_changes_add(changes, n_changes, PORTABLE_SYMLINK, dropin, from); + } +@@ -1188,7 +1188,7 @@ static int install_image_symlink( + (void) mkdir_parents(sl, 0755); + + if (symlink(image_path, sl) < 0) +- return log_debug_errno(errno, "Failed to link %s %s %s: %m", image_path, special_glyph(SPECIAL_GLYPH_ARROW), sl); ++ return log_debug_errno(errno, "Failed to link %s %s %s: %m", image_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), sl); + + (void) portable_changes_add(changes, n_changes, PORTABLE_SYMLINK, sl, image_path); + return 0; +diff --git a/src/portable/portablectl.c b/src/portable/portablectl.c +index f4c57e14ae..585568acc1 100644 +--- a/src/portable/portablectl.c ++++ b/src/portable/portablectl.c +@@ -433,12 +433,12 @@ static int print_changes(sd_bus_message *m) { + break; + + if (streq(type, "symlink")) +- log_info("Created symlink %s %s %s.", path, special_glyph(SPECIAL_GLYPH_ARROW), source); ++ log_info("Created symlink %s %s %s.", path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), source); + else if (streq(type, "copy")) { + if (isempty(source)) + log_info("Copied %s.", path); + else +- log_info("Copied %s %s %s.", source, special_glyph(SPECIAL_GLYPH_ARROW), path); ++ log_info("Copied %s %s %s.", source, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), path); + } else if (streq(type, "unlink")) + log_info("Removed %s.", path); + else if (streq(type, "write")) +diff --git a/src/shared/cgroup-show.c b/src/shared/cgroup-show.c +index 48dd4d8001..f18420c1b6 100644 +--- a/src/shared/cgroup-show.c ++++ b/src/shared/cgroup-show.c +@@ -228,7 +228,7 @@ static int show_cgroup_name( + printf("%s%s%s %s%s%s: %s\n", + prefix, + glyph == SPECIAL_GLYPH_TREE_BRANCH ? special_glyph(SPECIAL_GLYPH_TREE_VERTICAL) : " ", +- special_glyph(SPECIAL_GLYPH_ARROW), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + ansi_blue(), x, ansi_normal(), + y); + } +diff --git a/src/shared/install.c b/src/shared/install.c +index eb5c3d5f91..4c7d0d6cad 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -335,7 +335,7 @@ void unit_file_dump_changes(int r, const char *verb, const UnitFileChange *chang + if (!quiet) + log_info("Created symlink %s %s %s.", + changes[i].path, +- special_glyph(SPECIAL_GLYPH_ARROW), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + changes[i].source); + break; + case UNIT_FILE_UNLINK: +diff --git a/src/test/test-locale-util.c b/src/test/test-locale-util.c +index 3243e3c567..6ec3f7f00b 100644 +--- a/src/test/test-locale-util.c ++++ b/src/test/test-locale-util.c +@@ -91,13 +91,16 @@ TEST(dump_special_glyphs) { + dump_glyph(SPECIAL_GLYPH_TREE_BRANCH); + dump_glyph(SPECIAL_GLYPH_TREE_RIGHT); + dump_glyph(SPECIAL_GLYPH_TREE_SPACE); ++ dump_glyph(SPECIAL_GLYPH_TREE_TOP); + dump_glyph(SPECIAL_GLYPH_TRIANGULAR_BULLET); + dump_glyph(SPECIAL_GLYPH_BLACK_CIRCLE); + dump_glyph(SPECIAL_GLYPH_WHITE_CIRCLE); + dump_glyph(SPECIAL_GLYPH_MULTIPLICATION_SIGN); + dump_glyph(SPECIAL_GLYPH_CIRCLE_ARROW); + dump_glyph(SPECIAL_GLYPH_BULLET); +- dump_glyph(SPECIAL_GLYPH_ARROW); ++ dump_glyph(SPECIAL_GLYPH_ARROW_RIGHT); ++ dump_glyph(SPECIAL_GLYPH_ARROW_UP); ++ dump_glyph(SPECIAL_GLYPH_ARROW_DOWN); + dump_glyph(SPECIAL_GLYPH_ELLIPSIS); + dump_glyph(SPECIAL_GLYPH_MU); + dump_glyph(SPECIAL_GLYPH_CHECK_MARK); diff --git a/SOURCES/0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch b/SOURCES/0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch new file mode 100644 index 0000000..51a9383 --- /dev/null +++ b/SOURCES/0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch @@ -0,0 +1,677 @@ +From 73cbf82d726a7b50c9b7dec9a0a0c285b0de9993 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Fri, 24 Jun 2022 09:13:42 +0200 +Subject: [PATCH] =?UTF-8?q?tree-wide:=20allow=20ASCII=20fallback=20for=20?= + =?UTF-8?q?=E2=86=92=20in=20logs?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +(cherry picked from commit e2341b6bc325932b3f9f10874956952cbdbd6361) + +Resolves: #2118297 +--- + src/basic/unit-file.c | 13 +++++----- + src/core/dbus-service.c | 3 ++- + src/core/manager-serialize.c | 6 +++-- + src/core/namespace.c | 7 +++-- + src/core/socket.c | 3 ++- + src/home/homed-home.c | 4 ++- + src/home/homed-manager.c | 7 +++-- + src/home/homework-luks.c | 6 ++++- + src/home/homework-mount.c | 4 ++- + src/libsystemd/sd-bus/sd-bus.c | 4 ++- + src/network/networkd-link.c | 15 +++++++---- + src/partition/repart.c | 7 ++--- + src/resolve/resolved-dns-query.c | 11 ++++++-- + src/resolve/resolved-dns-transaction.c | 14 +++++----- + src/run-generator/run-generator.c | 4 ++- + src/shared/devnode-acl.c | 5 ++-- + src/shared/dns-domain.c | 8 +++--- + src/shared/install.c | 3 ++- + src/shared/mount-util.c | 5 ++-- + src/shared/varlink.c | 4 ++- + src/udev/udev-builtin-net_id.c | 36 +++++++++++++++----------- + 21 files changed, 110 insertions(+), 59 deletions(-) + +diff --git a/src/basic/unit-file.c b/src/basic/unit-file.c +index 83c29bb25f..2f5ec5b702 100644 +--- a/src/basic/unit-file.c ++++ b/src/basic/unit-file.c +@@ -348,13 +348,13 @@ int unit_file_resolve_symlink( + if (r < 0) + return r; + if (is_path(tail)) +- log_warning("Suspicious symlink %s/%s→%s, treating as alias.", +- dir, filename, simplified); ++ log_warning("Suspicious symlink %s/%s %s %s, treating as alias.", ++ dir, filename, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), simplified); + + dst = resolve_destination_target ? TAKE_PTR(simplified) : TAKE_PTR(target_name); + + } else { +- log_debug("Linked unit file: %s/%s → %s", dir, filename, simplified); ++ log_debug("Linked unit file: %s/%s %s %s", dir, filename, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), simplified); + + if (resolve_destination_target) + dst = TAKE_PTR(simplified); +@@ -569,8 +569,8 @@ int unit_file_build_name_map( + + r = hashmap_ensure_put(&ids, &string_hash_ops_free_free, key, dst); + if (r < 0) +- return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m", +- de->d_name, dst); ++ return log_warning_errno(r, "Failed to add entry to hashmap (%s%s%s): %m", ++ de->d_name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dst); + key = dst = NULL; + } + } +@@ -612,7 +612,8 @@ int unit_file_build_name_map( + + r = string_strv_hashmap_put(&names, dst, src); + if (r < 0) +- return log_warning_errno(r, "Failed to add entry to hashmap (%s→%s): %m", dst, src); ++ return log_warning_errno(r, "Failed to add entry to hashmap (%s%s%s): %m", ++ dst, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), src); + } + + if (cache_timestamp_hash) +diff --git a/src/core/dbus-service.c b/src/core/dbus-service.c +index e90fe4f596..3f7c161b0e 100644 +--- a/src/core/dbus-service.c ++++ b/src/core/dbus-service.c +@@ -493,7 +493,8 @@ static int bus_service_set_transient_property( + return log_oom(); + + if (!UNIT_WRITE_FLAGS_NOOP(flags)) +- log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s → %s; please update client accordingly.", n, z); ++ log_unit_notice(u, "Transient unit's PIDFile= property references path below legacy directory /var/run, updating %s %s %s; please update client accordingly.", ++ n, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), z); + + free_and_replace(n, z); + } +diff --git a/src/core/manager-serialize.c b/src/core/manager-serialize.c +index 60a35f48f3..007af3ee1f 100644 +--- a/src/core/manager-serialize.c ++++ b/src/core/manager-serialize.c +@@ -307,9 +307,11 @@ int manager_deserialize(Manager *m, FILE *f, FDSet *fds) { + + r = fd_get_path(fd, &fn); + if (r < 0) +- log_debug_errno(r, "Received serialized fd %i → %m", fd); ++ log_debug_errno(r, "Received serialized fd %i %s %m", ++ fd, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT)); + else +- log_debug("Received serialized fd %i → %s", fd, strna(fn)); ++ log_debug("Received serialized fd %i %s %s", ++ fd, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), strna(fn)); + } + } + } +diff --git a/src/core/namespace.c b/src/core/namespace.c +index 4bd63f6227..3bf6524935 100644 +--- a/src/core/namespace.c ++++ b/src/core/namespace.c +@@ -17,6 +17,7 @@ + #include "extension-release.h" + #include "fd-util.h" + #include "format-util.h" ++#include "glyph-util.h" + #include "label.h" + #include "list.h" + #include "loop-util.h" +@@ -1210,7 +1211,8 @@ static int follow_symlink( + "Symlink loop on '%s'.", + mount_entry_path(m)); + +- log_debug("Followed mount entry path symlink %s → %s.", mount_entry_path(m), target); ++ log_debug("Followed mount entry path symlink %s %s %s.", ++ mount_entry_path(m), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), target); + + mount_entry_consume_prefix(m, TAKE_PTR(target)); + +@@ -1308,7 +1310,8 @@ static int apply_one_mount( + if (r < 0) + return log_debug_errno(r, "Failed to follow symlinks on %s: %m", mount_entry_source(m)); + +- log_debug("Followed source symlinks %s → %s.", mount_entry_source(m), chased); ++ log_debug("Followed source symlinks %s %s %s.", ++ mount_entry_source(m), special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), chased); + + free_and_replace(m->source_malloc, chased); + +diff --git a/src/core/socket.c b/src/core/socket.c +index 8da9f14db6..cdb1e75e7a 100644 +--- a/src/core/socket.c ++++ b/src/core/socket.c +@@ -1291,7 +1291,8 @@ static int socket_symlink(Socket *s) { + } + + if (r < 0) +- log_unit_warning_errno(UNIT(s), r, "Failed to create symlink %s → %s, ignoring: %m", p, *i); ++ log_unit_warning_errno(UNIT(s), r, "Failed to create symlink %s %s %s, ignoring: %m", ++ p, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), *i); + } + + return 0; +diff --git a/src/home/homed-home.c b/src/home/homed-home.c +index 1340cf30d3..c78918ab1a 100644 +--- a/src/home/homed-home.c ++++ b/src/home/homed-home.c +@@ -19,6 +19,7 @@ + #include "fileio.h" + #include "filesystems.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "home-util.h" + #include "homed-home-bus.h" + #include "homed-home.h" +@@ -479,8 +480,9 @@ static void home_set_state(Home *h, HomeState state) { + new_state = home_get_state(h); /* Query the new state, since the 'state' variable might be set to -1, + * in which case we synthesize an high-level state on demand */ + +- log_info("%s: changing state %s → %s", h->user_name, ++ log_info("%s: changing state %s %s %s", h->user_name, + home_state_to_string(old_state), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + home_state_to_string(new_state)); + + home_update_pin_fd(h, new_state); +diff --git a/src/home/homed-manager.c b/src/home/homed-manager.c +index f04b87e366..f70c9f95e4 100644 +--- a/src/home/homed-manager.c ++++ b/src/home/homed-manager.c +@@ -23,6 +23,7 @@ + #include "fileio.h" + #include "format-util.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "gpt.h" + #include "home-util.h" + #include "homed-conf.h" +@@ -1939,8 +1940,10 @@ static int manager_rebalance_calculate(Manager *m) { + (m->rebalance_state == REBALANCE_GROWING && h->rebalance_goal < h->rebalance_size)) + h->rebalance_pending = false; + else { +- log_debug("Rebalancing home directory '%s' %s → %s.", h->user_name, +- FORMAT_BYTES(h->rebalance_size), FORMAT_BYTES(h->rebalance_goal)); ++ log_debug("Rebalancing home directory '%s' %s %s %s.", h->user_name, ++ FORMAT_BYTES(h->rebalance_size), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), ++ FORMAT_BYTES(h->rebalance_goal)); + h->rebalance_pending = true; + } + +diff --git a/src/home/homework-luks.c b/src/home/homework-luks.c +index f8f4afb253..f5653b4e14 100644 +--- a/src/home/homework-luks.c ++++ b/src/home/homework-luks.c +@@ -28,6 +28,7 @@ + #include "filesystems.h" + #include "fs-util.h" + #include "fsck-util.h" ++#include "glyph-util.h" + #include "home-util.h" + #include "homework-luks.h" + #include "homework-mount.h" +@@ -3312,12 +3313,15 @@ int home_resize_luks( + if (resize_type == CAN_RESIZE_OFFLINE && FLAGS_SET(flags, HOME_SETUP_ALREADY_ACTIVATED)) + return log_error_errno(SYNTHETIC_ERRNO(ETXTBSY), "File systems of this type can only be resized offline, but is currently online."); + +- log_info("Ready to resize image size %s → %s, partition size %s → %s, file system size %s → %s.", ++ log_info("Ready to resize image size %s %s %s, partition size %s %s %s, file system size %s %s %s.", + FORMAT_BYTES(old_image_size), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + FORMAT_BYTES(new_image_size), + FORMAT_BYTES(setup->partition_size), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + FORMAT_BYTES(new_partition_size), + FORMAT_BYTES(old_fs_size), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + FORMAT_BYTES(new_fs_size)); + + r = prepare_resize_partition( +diff --git a/src/home/homework-mount.c b/src/home/homework-mount.c +index 0b028dad37..6dc665e323 100644 +--- a/src/home/homework-mount.c ++++ b/src/home/homework-mount.c +@@ -7,6 +7,7 @@ + #include "alloc-util.h" + #include "fd-util.h" + #include "format-util.h" ++#include "glyph-util.h" + #include "home-util.h" + #include "homework-mount.h" + #include "homework.h" +@@ -283,7 +284,8 @@ int home_shift_uid(int dir_fd, const char *target, uid_t stored_uid, uid_t expos + if (r < 0) + return log_error_errno(errno, "Failed to apply UID/GID map: %m"); + +- log_debug("Applied uidmap mount to %s. Mapping is " UID_FMT " → " UID_FMT ".", strna(target), stored_uid, exposed_uid); ++ log_debug("Applied uidmap mount to %s. Mapping is " UID_FMT " %s " UID_FMT ".", ++ strna(target), stored_uid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), exposed_uid); + + if (ret_mount_fd) + *ret_mount_fd = TAKE_FD(mount_fd); +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index 9e1d29cc1d..d117199cf9 100644 +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -30,6 +30,7 @@ + #include "def.h" + #include "errno-util.h" + #include "fd-util.h" ++#include "glyph-util.h" + #include "hexdecoct.h" + #include "hostname-util.h" + #include "io-util.h" +@@ -521,7 +522,8 @@ void bus_set_state(sd_bus *bus, enum bus_state state) { + if (state == bus->state) + return; + +- log_debug("Bus %s: changing state %s → %s", strna(bus->description), table[bus->state], table[state]); ++ log_debug("Bus %s: changing state %s %s %s", strna(bus->description), ++ table[bus->state], special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), table[state]); + bus->state = state; + } + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index f409d1f33a..15c188cb6d 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -26,6 +26,7 @@ + #include "fileio.h" + #include "format-util.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "ipvlan.h" + #include "missing_network.h" + #include "netlink-util.h" +@@ -2122,7 +2123,8 @@ static int link_update_master(Link *link, sd_netlink_message *message) { + else if (master_ifindex == 0) + log_link_debug(link, "Leaved from master interface: %i", link->master_ifindex); + else +- log_link_debug(link, "Master interface is changed: %i → %i", link->master_ifindex, master_ifindex); ++ log_link_debug(link, "Master interface changed: %i %s %i", link->master_ifindex, ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), master_ifindex); + + link_drop_from_master(link); + +@@ -2158,8 +2160,10 @@ static int link_update_hardware_address(Link *link, sd_netlink_message *message) + if (link->hw_addr.length == 0) + log_link_debug(link, "Saved hardware address: %s", HW_ADDR_TO_STR(&addr)); + else { +- log_link_debug(link, "Hardware address is changed: %s → %s", +- HW_ADDR_TO_STR(&link->hw_addr), HW_ADDR_TO_STR(&addr)); ++ log_link_debug(link, "Hardware address is changed: %s %s %s", ++ HW_ADDR_TO_STR(&link->hw_addr), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), ++ HW_ADDR_TO_STR(&addr)); + + if (hashmap_get(link->manager->links_by_hw_addr, &link->hw_addr) == link) + hashmap_remove(link->manager->links_by_hw_addr, &link->hw_addr); +@@ -2256,8 +2260,9 @@ static int link_update_mtu(Link *link, sd_netlink_message *message) { + return 0; + + if (link->mtu != 0) +- log_link_debug(link, "MTU is changed: %"PRIu32" → %"PRIu32" (min: %"PRIu32", max: %"PRIu32")", +- link->mtu, mtu, link->min_mtu, link->max_mtu); ++ log_link_debug(link, "MTU is changed: %"PRIu32" %s %"PRIu32" (min: %"PRIu32", max: %"PRIu32")", ++ link->mtu, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), mtu, ++ link->min_mtu, link->max_mtu); + + link->mtu = mtu; + +diff --git a/src/partition/repart.c b/src/partition/repart.c +index 9f95713130..d41411caeb 100644 +--- a/src/partition/repart.c ++++ b/src/partition/repart.c +@@ -1096,7 +1096,8 @@ static int config_parse_size4096( + *sz = parsed; + + if (*sz != parsed) +- log_syntax(unit, LOG_NOTICE, filename, line, r, "Rounded %s= size %" PRIu64 " → %" PRIu64 ", a multiple of 4096.", lvalue, parsed, *sz); ++ log_syntax(unit, LOG_NOTICE, filename, line, r, "Rounded %s= size %" PRIu64 " %s %" PRIu64 ", a multiple of 4096.", ++ lvalue, parsed, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), *sz); + + return 0; + } +@@ -4295,8 +4296,8 @@ static int parse_argv(int argc, char *argv[]) { + return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Specified image size too large, refusing."); + + if (rounded != parsed) +- log_warning("Specified size is not a multiple of 4096, rounding up automatically. (%" PRIu64 " → %" PRIu64 ")", +- parsed, rounded); ++ log_warning("Specified size is not a multiple of 4096, rounding up automatically. (%" PRIu64 " %s %" PRIu64 ")", ++ parsed, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), rounded); + + arg_size = rounded; + arg_size_auto = false; +diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c +index 3b5e456db2..ddb66c4659 100644 +--- a/src/resolve/resolved-dns-query.c ++++ b/src/resolve/resolved-dns-query.c +@@ -3,6 +3,7 @@ + #include "alloc-util.h" + #include "dns-domain.h" + #include "dns-type.h" ++#include "glyph-util.h" + #include "hostname-util.h" + #include "local-addresses.h" + #include "resolved-dns-query.h" +@@ -1016,7 +1017,10 @@ static int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname) + if (r < 0) + return r; + if (r > 0) +- log_debug("Following CNAME/DNAME %s → %s.", dns_question_first_name(q->question_idna), dns_question_first_name(nq_idna)); ++ log_debug("Following CNAME/DNAME %s %s %s.", ++ dns_question_first_name(q->question_idna), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), ++ dns_question_first_name(nq_idna)); + + k = dns_question_is_equal(q->question_idna, q->question_utf8); + if (k < 0) +@@ -1030,7 +1034,10 @@ static int dns_query_cname_redirect(DnsQuery *q, const DnsResourceRecord *cname) + if (k < 0) + return k; + if (k > 0) +- log_debug("Following UTF8 CNAME/DNAME %s → %s.", dns_question_first_name(q->question_utf8), dns_question_first_name(nq_utf8)); ++ log_debug("Following UTF8 CNAME/DNAME %s %s %s.", ++ dns_question_first_name(q->question_utf8), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), ++ dns_question_first_name(nq_utf8)); + } + + if (r == 0 && k == 0) /* No actual cname happened? */ +diff --git a/src/resolve/resolved-dns-transaction.c b/src/resolve/resolved-dns-transaction.c +index 0cf9912712..1ae8103a14 100644 +--- a/src/resolve/resolved-dns-transaction.c ++++ b/src/resolve/resolved-dns-transaction.c +@@ -8,6 +8,7 @@ + #include "errno-list.h" + #include "errno-util.h" + #include "fd-util.h" ++#include "glyph-util.h" + #include "random-util.h" + #include "resolved-dns-cache.h" + #include "resolved-dns-transaction.h" +@@ -2591,21 +2592,22 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) { + r = dns_name_parent(&name); + if (r > 0) { + type = DNS_TYPE_SOA; +- log_debug("Requesting parent SOA (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty DS response).", +- name, t->id, dns_resource_key_name(dns_transaction_key(t))); ++ log_debug("Requesting parent SOA (%s %s) to validate transaction %" PRIu16 " (%s, unsigned empty DS response).", ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, ++ dns_resource_key_name(dns_transaction_key(t))); + } else + name = NULL; + + } else if (IN_SET(dns_transaction_key(t)->type, DNS_TYPE_SOA, DNS_TYPE_NS)) { + + type = DNS_TYPE_DS; +- log_debug("Requesting DS (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty SOA/NS response).", +- name, t->id, name); ++ log_debug("Requesting DS (%s %s) to validate transaction %" PRIu16 " (%s, unsigned empty SOA/NS response).", ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, name); + + } else { + type = DNS_TYPE_SOA; +- log_debug("Requesting SOA (→ %s) to validate transaction %" PRIu16 " (%s, unsigned empty non-SOA/NS/DS response).", +- name, t->id, name); ++ log_debug("Requesting SOA (%s %s) to validate transaction %" PRIu16 " (%s, unsigned empty non-SOA/NS/DS response).", ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), name, t->id, name); + } + + if (name) { +diff --git a/src/run-generator/run-generator.c b/src/run-generator/run-generator.c +index fb62209704..e3fb7f24fe 100644 +--- a/src/run-generator/run-generator.c ++++ b/src/run-generator/run-generator.c +@@ -7,6 +7,7 @@ + #include "fd-util.h" + #include "fileio.h" + #include "generator.h" ++#include "glyph-util.h" + #include "mkdir.h" + #include "proc-cmdline.h" + #include "special.h" +@@ -116,7 +117,8 @@ static int generate(void) { + /* And now redirect default.target to our new target */ + p = strjoina(arg_dest, "/" SPECIAL_DEFAULT_TARGET); + if (symlink("kernel-command-line.target", p) < 0) +- return log_error_errno(errno, "Failed to link unit file kernel-command-line.target → %s: %m", p); ++ return log_error_errno(errno, "Failed to link unit file kernel-command-line.target %s %s: %m", ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), p); + + return 0; + } +diff --git a/src/shared/devnode-acl.c b/src/shared/devnode-acl.c +index 89ff566832..21d8130e0d 100644 +--- a/src/shared/devnode-acl.c ++++ b/src/shared/devnode-acl.c +@@ -12,6 +12,7 @@ + #include "escape.h" + #include "fd-util.h" + #include "format-util.h" ++#include "glyph-util.h" + #include "set.h" + #include "string-util.h" + #include "util.h" +@@ -242,8 +243,8 @@ int devnode_acl_all(const char *seat, + SET_FOREACH(n, nodes) { + int k; + +- log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"→"UID_FMT"%s%s)", +- n, seat, old_uid, new_uid, ++ log_debug("Changing ACLs at %s for seat %s (uid "UID_FMT"%s"UID_FMT"%s%s)", ++ n, seat, old_uid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), new_uid, + del ? " del" : "", add ? " add" : ""); + + k = devnode_acl(n, flush, del, old_uid, add, new_uid); +diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c +index f54b187a1b..49ce9cfa10 100644 +--- a/src/shared/dns-domain.c ++++ b/src/shared/dns-domain.c +@@ -7,6 +7,7 @@ + + #include "alloc-util.h" + #include "dns-domain.h" ++#include "glyph-util.h" + #include "hashmap.h" + #include "hexdecoct.h" + #include "hostname-util.h" +@@ -1300,7 +1301,7 @@ int dns_name_apply_idna(const char *name, char **ret) { + r = sym_idn2_lookup_u8((uint8_t*) name, (uint8_t**) &t, + IDN2_NFC_INPUT | IDN2_TRANSITIONAL); + +- log_debug("idn2_lookup_u8: %s → %s", name, t); ++ log_debug("idn2_lookup_u8: %s %s %s", name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t); + if (r == IDN2_OK) { + if (!startswith(name, "xn--")) { + _cleanup_free_ char *s = NULL; +@@ -1314,8 +1315,9 @@ int dns_name_apply_idna(const char *name, char **ret) { + } + + if (!streq_ptr(name, s)) { +- log_debug("idn2 roundtrip failed: \"%s\" → \"%s\" → \"%s\", ignoring.", +- name, t, s); ++ log_debug("idn2 roundtrip failed: \"%s\" %s \"%s\" %s \"%s\", ignoring.", ++ name, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), t, ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), s); + *ret = NULL; + return 0; + } +diff --git a/src/shared/install.c b/src/shared/install.c +index 4c7d0d6cad..d3661521a9 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -523,7 +523,8 @@ static int create_symlink( + } + + if (chroot_unit_symlinks_equivalent(lp, new_path, dest, old_path)) { +- log_debug("Symlink %s → %s already exists", new_path, dest); ++ log_debug("Symlink %s %s %s already exists", ++ new_path, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), dest); + return 1; + } + +diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c +index 12c7044f04..e0c8cff14a 100644 +--- a/src/shared/mount-util.c ++++ b/src/shared/mount-util.c +@@ -17,6 +17,7 @@ + #include "fd-util.h" + #include "fileio.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "hashmap.h" + #include "label.h" + #include "libmount-util.h" +@@ -672,8 +673,8 @@ int mount_verbose_full( + log_debug("Bind-mounting %s on %s (%s \"%s\")...", + what, where, strnull(fl), strempty(o)); + else if (f & MS_MOVE) +- log_debug("Moving mount %s → %s (%s \"%s\")...", +- what, where, strnull(fl), strempty(o)); ++ log_debug("Moving mount %s %s %s (%s \"%s\")...", ++ what, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), where, strnull(fl), strempty(o)); + else + log_debug("Mounting %s (%s) on %s (%s \"%s\")...", + strna(what), strna(type), where, strnull(fl), strempty(o)); +diff --git a/src/shared/varlink.c b/src/shared/varlink.c +index e0038dfd28..f18301d3c4 100644 +--- a/src/shared/varlink.c ++++ b/src/shared/varlink.c +@@ -6,6 +6,7 @@ + #include "alloc-util.h" + #include "errno-util.h" + #include "fd-util.h" ++#include "glyph-util.h" + #include "hashmap.h" + #include "io-util.h" + #include "list.h" +@@ -236,8 +237,9 @@ static void varlink_set_state(Varlink *v, VarlinkState state) { + varlink_log(v, "Setting state %s", + varlink_state_to_string(state)); + else +- varlink_log(v, "Changing state %s → %s", ++ varlink_log(v, "Changing state %s %s %s", + varlink_state_to_string(v->state), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), + varlink_state_to_string(state)); + + v->state = state; +diff --git a/src/udev/udev-builtin-net_id.c b/src/udev/udev-builtin-net_id.c +index 673ed7a7ca..1ca7983cfe 100644 +--- a/src/udev/udev-builtin-net_id.c ++++ b/src/udev/udev-builtin-net_id.c +@@ -28,6 +28,7 @@ + #include "dirent-util.h" + #include "fd-util.h" + #include "fileio.h" ++#include "glyph-util.h" + #include "netif-naming-scheme.h" + #include "parse-util.h" + #include "proc-cmdline.h" +@@ -215,9 +216,9 @@ static int dev_pci_onboard(sd_device *dev, const LinkInfo *info, NetNames *names + l = strpcpyf(&s, l, "d%lu", dev_port); + if (l == 0) + names->pci_onboard[0] = '\0'; +- log_device_debug(dev, "Onboard index identifier: index=%lu phys_port=%s dev_port=%lu → %s", ++ log_device_debug(dev, "Onboard index identifier: index=%lu phys_port=%s dev_port=%lu %s %s", + idx, strempty(info->phys_port_name), dev_port, +- empty_to_na(names->pci_slot)); ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_slot)); + + if (sd_device_get_sysattr_value(names->pcidev, "label", &names->pci_onboard_label) >= 0) + log_device_debug(dev, "Onboard label from PCI device: %s", names->pci_onboard_label); +@@ -393,9 +394,9 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) { + if (l == 0) + names->pci_path[0] = '\0'; + +- log_device_debug(dev, "PCI path identifier: domain=%u bus=%u slot=%u func=%u phys_port=%s dev_port=%lu → %s", ++ log_device_debug(dev, "PCI path identifier: domain=%u bus=%u slot=%u func=%u phys_port=%s dev_port=%lu %s %s", + domain, bus, slot, func, strempty(info->phys_port_name), dev_port, +- empty_to_na(names->pci_path)); ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_path)); + + /* ACPI _SUN — slot user number */ + r = sd_device_new_from_subsystem_sysname(&pci, "subsystem", "pci"); +@@ -487,9 +488,9 @@ static int dev_pci_slot(sd_device *dev, const LinkInfo *info, NetNames *names) { + if (l == 0) + names->pci_slot[0] = '\0'; + +- log_device_debug(dev, "Slot identifier: domain=%u slot=%"PRIu32" func=%u phys_port=%s dev_port=%lu → %s", ++ log_device_debug(dev, "Slot identifier: domain=%u slot=%"PRIu32" func=%u phys_port=%s dev_port=%lu %s %s", + domain, hotplug_slot, func, strempty(info->phys_port_name), dev_port, +- empty_to_na(names->pci_slot)); ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), empty_to_na(names->pci_slot)); + } + + return 0; +@@ -529,7 +530,8 @@ static int names_vio(sd_device *dev, NetNames *names) { + + xsprintf(names->vio_slot, "v%u", slotid); + names->type = NET_VIO; +- log_device_debug(dev, "Vio slot identifier: slotid=%u → %s", slotid, names->vio_slot); ++ log_device_debug(dev, "Vio slot identifier: slotid=%u %s %s", ++ slotid, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->vio_slot); + return 0; + } + +@@ -596,8 +598,8 @@ static int names_platform(sd_device *dev, NetNames *names, bool test) { + + xsprintf(names->platform_path, "a%s%xi%u", vendor, model, instance); + names->type = NET_PLATFORM; +- log_device_debug(dev, "Platform identifier: vendor=%s model=%u instance=%u → %s", +- vendor, model, instance, names->platform_path); ++ log_device_debug(dev, "Platform identifier: vendor=%s model=%u instance=%u %s %s", ++ vendor, model, instance, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->platform_path); + return 0; + } + +@@ -718,8 +720,9 @@ static int names_usb(sd_device *dev, NetNames *names) { + if (l == 0) + return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG), + "Generated USB name would be too long."); +- log_device_debug(dev, "USB name identifier: ports=%.*s config=%s interface=%s → %s", +- (int) strlen(ports), sysname + (ports - name), config, interf, names->usb_ports); ++ log_device_debug(dev, "USB name identifier: ports=%.*s config=%s interface=%s %s %s", ++ (int) strlen(ports), sysname + (ports - name), config, interf, ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->usb_ports); + names->type = NET_USB; + return 0; + } +@@ -752,7 +755,8 @@ static int names_bcma(sd_device *dev, NetNames *names) { + xsprintf(names->bcma_core, "b%u", core); + + names->type = NET_BCMA; +- log_device_debug(dev, "BCMA core identifier: core=%u → \"%s\"", core, names->bcma_core); ++ log_device_debug(dev, "BCMA core identifier: core=%u %s \"%s\"", ++ core, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->bcma_core); + return 0; + } + +@@ -813,7 +817,8 @@ static int names_ccw(sd_device *dev, NetNames *names) { + return log_device_debug_errno(dev, SYNTHETIC_ERRNO(ENAMETOOLONG), + "Generated CCW name would be too long."); + names->type = NET_CCW; +- log_device_debug(dev, "CCW identifier: ccw_busid=%s → \"%s\"", bus_id, names->ccw_busid); ++ log_device_debug(dev, "CCW identifier: ccw_busid=%s %s \"%s\"", ++ bus_id, special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), names->ccw_busid); + return 0; + } + +@@ -1027,8 +1032,9 @@ static int builtin_net_id(sd_device *dev, sd_netlink **rtnl, int argc, char *arg + + xsprintf(str, "%sx%s", prefix, HW_ADDR_TO_STR_FULL(&info.hw_addr, HW_ADDR_TO_STRING_NO_COLON)); + udev_builtin_add_property(dev, test, "ID_NET_NAME_MAC", str); +- log_device_debug(dev, "MAC address identifier: hw_addr=%s → %s", +- HW_ADDR_TO_STR(&info.hw_addr), str + strlen(prefix)); ++ log_device_debug(dev, "MAC address identifier: hw_addr=%s %s %s", ++ HW_ADDR_TO_STR(&info.hw_addr), ++ special_glyph(SPECIAL_GLYPH_ARROW_RIGHT), str + strlen(prefix)); + + ieee_oui(dev, &info, test); + } diff --git a/SOURCES/0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch b/SOURCES/0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch new file mode 100644 index 0000000..a4c9a1e --- /dev/null +++ b/SOURCES/0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch @@ -0,0 +1,387 @@ +From 72fb11cd3191e7546ff0bae802f5bd6e5e815647 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Fri, 24 Jun 2022 09:59:44 +0200 +Subject: [PATCH] =?UTF-8?q?tree-wide:=20allow=20ASCII=20fallback=20for=20?= + =?UTF-8?q?=E2=80=A6=20in=20logs?= +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +(cherry picked from commit 28e5e1e97f47067bce190ea6b3404907d63e4320) + +Related: #2118297 +--- + src/basic/os-util.c | 6 +++-- + src/binfmt/binfmt.c | 2 +- + src/boot/bootctl.c | 2 +- + src/core/dbus-manager.c | 2 +- + src/core/manager.c | 4 ++-- + .../environment-d-generator.c | 3 ++- + src/home/homectl.c | 12 ++++++---- + src/libsystemd/sd-event/sd-event.c | 4 +++- + src/nss-resolve/nss-resolve.c | 5 ++++- + src/resolve/resolved-varlink.c | 5 ++++- + src/shared/user-record.c | 22 ++++++++++++++----- + src/sysusers/sysusers.c | 12 +++++----- + src/tmpfiles/tmpfiles.c | 6 ++--- + 13 files changed, 56 insertions(+), 29 deletions(-) + +diff --git a/src/basic/os-util.c b/src/basic/os-util.c +index acfff24319..880fb7e6bb 100644 +--- a/src/basic/os-util.c ++++ b/src/basic/os-util.c +@@ -8,6 +8,7 @@ + #include "fd-util.h" + #include "fileio.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "macro.h" + #include "os-util.h" + #include "parse-util.h" +@@ -146,8 +147,9 @@ int open_extension_release(const char *root, const char *extension, char **ret_p + if (k != 0) + continue; + +- log_debug("%s/%s: 'user.extension-release.strict' attribute is false…", +- extension_release_dir_path, de->d_name); ++ log_debug("%s/%s: 'user.extension-release.strict' attribute is false%s", ++ extension_release_dir_path, de->d_name, ++ special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + /* We already found what we were looking for, but there's another candidate? + * We treat this as an error, as we want to enforce that there are no ambiguities +diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c +index 817ee387ff..71cb56aa4a 100644 +--- a/src/binfmt/binfmt.c ++++ b/src/binfmt/binfmt.c +@@ -83,7 +83,7 @@ static int apply_file(const char *filename, bool ignore_enoent) { + return log_error_errno(r, "Failed to open file '%s': %m", filename); + } + +- log_debug("Applying %s…", pp); ++ log_debug("Applying %s%s", pp, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + for (unsigned line = 1;; line++) { + _cleanup_free_ char *text = NULL; + char *p; +diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c +index c1adae4962..292907eb4a 100644 +--- a/src/boot/bootctl.c ++++ b/src/boot/bootctl.c +@@ -1404,7 +1404,7 @@ static int are_we_installed(void) { + if (!p) + return log_oom(); + +- log_debug("Checking whether %s contains any files…", p); ++ log_debug("Checking whether %s contains any files%s", p, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + r = dir_is_empty(p); + if (r < 0 && r != -ENOENT) + return log_error_errno(r, "Failed to check whether %s contains any files: %m", p); +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index efba6331b9..0ce2d73857 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1886,7 +1886,7 @@ static int method_enqueue_marked_jobs(sd_bus_message *message, void *userdata, s + if (r == 0) + return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */ + +- log_info("Queuing reload/restart jobs for marked units…"); ++ log_info("Queuing reload/restart jobs for marked units%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL; + r = sd_bus_message_new_method_return(message, &reply); +diff --git a/src/core/manager.c b/src/core/manager.c +index c01128adb4..5b7f5f55aa 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -1593,7 +1593,7 @@ static void manager_coldplug(Manager *m) { + + assert(m); + +- log_debug("Invoking unit coldplug() handlers…"); ++ log_debug("Invoking unit coldplug() handlers%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + /* Let's place the units back into their deserialized state */ + HASHMAP_FOREACH_KEY(u, k, m->units) { +@@ -1614,7 +1614,7 @@ static void manager_catchup(Manager *m) { + + assert(m); + +- log_debug("Invoking unit catchup() handlers…"); ++ log_debug("Invoking unit catchup() handlers%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + /* Let's catch up on any state changes that happened while we were reloading/reexecing */ + HASHMAP_FOREACH_KEY(u, k, m->units) { +diff --git a/src/environment-d-generator/environment-d-generator.c b/src/environment-d-generator/environment-d-generator.c +index 39c46c7c2b..12aafbc7d9 100644 +--- a/src/environment-d-generator/environment-d-generator.c ++++ b/src/environment-d-generator/environment-d-generator.c +@@ -6,6 +6,7 @@ + #include "def.h" + #include "env-file.h" + #include "escape.h" ++#include "glyph-util.h" + #include "log.h" + #include "path-lookup.h" + #include "strv.h" +@@ -55,7 +56,7 @@ static int load_and_print(void) { + * that in case of failure, a partial update is better than none. */ + + STRV_FOREACH(i, files) { +- log_debug("Reading %s…", *i); ++ log_debug("Reading %s%s", *i, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + r = merge_env_file(&env, NULL, *i); + if (r == -ENOMEM) +diff --git a/src/home/homectl.c b/src/home/homectl.c +index f0d1dac6ab..23bf17f5cf 100644 +--- a/src/home/homectl.c ++++ b/src/home/homectl.c +@@ -1683,9 +1683,13 @@ static int passwd_home(int argc, char *argv[], void *userdata) { + int r; + + if (arg_pkcs11_token_uri) +- return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=…'."); ++ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), ++ "To change the PKCS#11 security token use 'homectl update --pkcs11-token-uri=%s'.", ++ special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + if (arg_fido2_device) +- return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "To change the FIDO2 security token use 'homectl update --fido2-device=…'."); ++ return log_error_errno(SYNTHETIC_ERRNO(EINVAL), ++ "To change the FIDO2 security token use 'homectl update --fido2-device=%s'.", ++ special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + if (identity_properties_specified()) + return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "The 'passwd' verb does not permit changing other record properties at the same time."); + +@@ -3600,8 +3604,8 @@ static int parse_argv(int argc, char *argv[]) { + return log_error_errno(r, "Failed to parse --rebalance-weight= argument: %s", optarg); + + if (u < REBALANCE_WEIGHT_MIN || u > REBALANCE_WEIGHT_MAX) +- return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Rebalancing weight out of valid range %" PRIu64 "…%" PRIu64 ": %s", +- REBALANCE_WEIGHT_MIN, REBALANCE_WEIGHT_MAX, optarg); ++ return log_error_errno(SYNTHETIC_ERRNO(ERANGE), "Rebalancing weight out of valid range %" PRIu64 "%s%" PRIu64 ": %s", ++ REBALANCE_WEIGHT_MIN, special_glyph(SPECIAL_GLYPH_ELLIPSIS), REBALANCE_WEIGHT_MAX, optarg); + } + + /* Drop from per machine stuff and everywhere */ +diff --git a/src/libsystemd/sd-event/sd-event.c b/src/libsystemd/sd-event/sd-event.c +index dd257eadfe..b491033ca7 100644 +--- a/src/libsystemd/sd-event/sd-event.c ++++ b/src/libsystemd/sd-event/sd-event.c +@@ -13,6 +13,7 @@ + #include "event-source.h" + #include "fd-util.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "hashmap.h" + #include "list.h" + #include "macro.h" +@@ -405,7 +406,8 @@ _public_ int sd_event_new(sd_event** ret) { + e->epoll_fd = fd_move_above_stdio(e->epoll_fd); + + if (secure_getenv("SD_EVENT_PROFILE_DELAYS")) { +- log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 … 2^63 us will be logged every 5s."); ++ log_debug("Event loop profiling enabled. Logarithmic histogram of event loop iterations in the range 2^0 %s 2^63 us will be logged every 5s.", ++ special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + e->profile_delays = true; + } + +diff --git a/src/nss-resolve/nss-resolve.c b/src/nss-resolve/nss-resolve.c +index e857d42db6..9ed2945a1e 100644 +--- a/src/nss-resolve/nss-resolve.c ++++ b/src/nss-resolve/nss-resolve.c +@@ -10,6 +10,7 @@ + + #include "env-util.h" + #include "errno-util.h" ++#include "glyph-util.h" + #include "in-addr-util.h" + #include "macro.h" + #include "nss-util.h" +@@ -180,7 +181,9 @@ static int json_dispatch_address(const char *name, JsonVariant *variant, JsonDis + + b = json_variant_integer(i); + if (b < 0 || b > 0xff) +- return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is out of range 0…255.", k, strna(name)); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), ++ "Element %zu of JSON field '%s' is out of range 0%s255.", ++ k, strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + buf.bytes[k++] = (uint8_t) b; + } +diff --git a/src/resolve/resolved-varlink.c b/src/resolve/resolved-varlink.c +index cc684608a6..a00dfee5dd 100644 +--- a/src/resolve/resolved-varlink.c ++++ b/src/resolve/resolved-varlink.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include "glyph-util.h" + #include "in-addr-util.h" + #include "resolved-dns-synthesize.h" + #include "resolved-varlink.h" +@@ -371,7 +372,9 @@ static int json_dispatch_address(const char *name, JsonVariant *variant, JsonDis + + b = json_variant_integer(i); + if (b < 0 || b > 0xff) +- return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "Element %zu of JSON field '%s' is out of range 0…255.", k, strna(name)); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), ++ "Element %zu of JSON field '%s' is out of range 0%s255.", ++ k, strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + buf.bytes[k++] = (uint8_t) b; + } +diff --git a/src/shared/user-record.c b/src/shared/user-record.c +index 5b406d1f42..eae0915fc7 100644 +--- a/src/shared/user-record.c ++++ b/src/shared/user-record.c +@@ -6,6 +6,7 @@ + #include "dns-domain.h" + #include "env-util.h" + #include "fs-util.h" ++#include "glyph-util.h" + #include "hexdecoct.h" + #include "hostname-util.h" + #include "memory-util.h" +@@ -467,7 +468,9 @@ static int json_dispatch_umask(const char *name, JsonVariant *variant, JsonDispa + + k = json_variant_unsigned(variant); + if (k > 0777) +- return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' outside of valid range 0…0777.", strna(name)); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), ++ "JSON field '%s' outside of valid range 0%s0777.", ++ strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + *m = (mode_t) k; + return 0; +@@ -487,7 +490,9 @@ static int json_dispatch_access_mode(const char *name, JsonVariant *variant, Jso + + k = json_variant_unsigned(variant); + if (k > 07777) +- return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), "JSON field '%s' outside of valid range 0…07777.", strna(name)); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(EINVAL), ++ "JSON field '%s' outside of valid range 0%s07777.", ++ strna(name), special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + *m = (mode_t) k; + return 0; +@@ -578,7 +583,9 @@ static int json_dispatch_tasks_or_memory_max(const char *name, JsonVariant *vari + + k = json_variant_unsigned(variant); + if (k <= 0 || k >= UINT64_MAX) +- return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), (uint64_t) 1, UINT64_MAX-1); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), ++ "JSON field '%s' is not in valid range %" PRIu64 "%s%" PRIu64 ".", ++ strna(name), (uint64_t) 1, special_glyph(SPECIAL_GLYPH_ELLIPSIS), UINT64_MAX-1); + + *limit = k; + return 0; +@@ -597,7 +604,10 @@ static int json_dispatch_weight(const char *name, JsonVariant *variant, JsonDisp + + k = json_variant_unsigned(variant); + if (k <= CGROUP_WEIGHT_MIN || k >= CGROUP_WEIGHT_MAX) +- return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "JSON field '%s' is not in valid range %" PRIu64 "…%" PRIu64 ".", strna(name), (uint64_t) CGROUP_WEIGHT_MIN, (uint64_t) CGROUP_WEIGHT_MAX); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), ++ "JSON field '%s' is not in valid range %" PRIu64 "%s%" PRIu64 ".", ++ strna(name), (uint64_t) CGROUP_WEIGHT_MIN, ++ special_glyph(SPECIAL_GLYPH_ELLIPSIS), (uint64_t) CGROUP_WEIGHT_MAX); + + *weight = k; + return 0; +@@ -1010,7 +1020,9 @@ static int dispatch_rebalance_weight(const char *name, JsonVariant *variant, Jso + else if (u == 0) + *rebalance_weight = REBALANCE_WEIGHT_OFF; + else +- return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), "Rebalance weight is out of valid range %" PRIu64 "…%" PRIu64 ".", REBALANCE_WEIGHT_MIN, REBALANCE_WEIGHT_MAX); ++ return json_log(variant, flags, SYNTHETIC_ERRNO(ERANGE), ++ "Rebalance weight is out of valid range %" PRIu64 "%s%" PRIu64 ".", ++ REBALANCE_WEIGHT_MIN, special_glyph(SPECIAL_GLYPH_ELLIPSIS), REBALANCE_WEIGHT_MAX); + + return 0; + } +diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c +index 6a2ca1afbb..05e2591b6a 100644 +--- a/src/sysusers/sysusers.c ++++ b/src/sysusers/sysusers.c +@@ -405,7 +405,7 @@ static int write_temporary_passwd(const char *passwd_path, FILE **tmpfile, char + return 0; + + if (arg_dry_run) { +- log_info("Would write /etc/passwd…"); ++ log_info("Would write /etc/passwd%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + return 0; + } + +@@ -529,7 +529,7 @@ static int write_temporary_shadow(const char *shadow_path, FILE **tmpfile, char + return 0; + + if (arg_dry_run) { +- log_info("Would write /etc/shadow…"); ++ log_info("Would write /etc/shadow%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + return 0; + } + +@@ -667,7 +667,7 @@ static int write_temporary_group(const char *group_path, FILE **tmpfile, char ** + return 0; + + if (arg_dry_run) { +- log_info("Would write /etc/group…"); ++ log_info("Would write /etc/group%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + return 0; + } + +@@ -773,7 +773,7 @@ static int write_temporary_gshadow(const char * gshadow_path, FILE **tmpfile, ch + return 0; + + if (arg_dry_run) { +- log_info("Would write /etc/gshadow…"); ++ log_info("Would write /etc/gshadow%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + return 0; + } + +@@ -2002,13 +2002,13 @@ static int read_config_files(char **args) { + + STRV_FOREACH(f, files) + if (p && path_equal(*f, p)) { +- log_debug("Parsing arguments at position \"%s\"…", *f); ++ log_debug("Parsing arguments at position \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + r = parse_arguments(args); + if (r < 0) + return r; + } else { +- log_debug("Reading config file \"%s\"…", *f); ++ log_debug("Reading config file \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + /* Just warn, ignore result otherwise */ + (void) read_config_file(*f, true); +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 023207bc60..c6019ae2c8 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -3509,7 +3509,7 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe + assert(fn); + + if (streq(fn, "-")) { +- log_debug("Reading config from stdin…"); ++ log_debug("Reading config from stdin%s", special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + fn = ""; + f = stdin; + } else { +@@ -3523,7 +3523,7 @@ static int read_config_file(char **config_dirs, const char *fn, bool ignore_enoe + return log_error_errno(r, "Failed to open '%s': %m", fn); + } + +- log_debug("Reading config file \"%s\"…", pp); ++ log_debug("Reading config file \"%s\"%s", pp, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + fn = pp; + f = _f; + } +@@ -3626,7 +3626,7 @@ static int read_config_files(char **config_dirs, char **args, bool *invalid_conf + + STRV_FOREACH(f, files) + if (p && path_equal(*f, p)) { +- log_debug("Parsing arguments at position \"%s\"…", *f); ++ log_debug("Parsing arguments at position \"%s\"%s", *f, special_glyph(SPECIAL_GLYPH_ELLIPSIS)); + + r = parse_arguments(config_dirs, args, invalid_config); + if (r < 0) diff --git a/SOURCES/0270-core-allow-to-set-default-timeout-for-devices.patch b/SOURCES/0270-core-allow-to-set-default-timeout-for-devices.patch new file mode 100644 index 0000000..0c61285 --- /dev/null +++ b/SOURCES/0270-core-allow-to-set-default-timeout-for-devices.patch @@ -0,0 +1,115 @@ +From fa06a45fa2dc0b7d15dc1394e679a9043fa2fee4 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Sat, 16 Jul 2022 09:49:12 +0200 +Subject: [PATCH] core: allow to set default timeout for devices + +Fixes: #19879 +(cherry picked from commit a0fe19f9f791c05af236265954b1d73e8fcf5468) + +Resolves: #2116681 +--- + src/core/dbus-manager.c | 1 + + src/core/device.c | 2 +- + src/core/main.c | 4 ++++ + src/core/manager.c | 1 + + src/core/manager.h | 1 + + src/core/system.conf.in | 1 + + 6 files changed, 9 insertions(+), 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 0ce2d73857..9d47d9c8a7 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -2706,6 +2706,7 @@ const sd_bus_vtable bus_manager_vtable[] = { + SD_BUS_PROPERTY("DefaultTimeoutStartUSec", "t", bus_property_get_usec, offsetof(Manager, default_timeout_start_usec), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("DefaultTimeoutStopUSec", "t", bus_property_get_usec, offsetof(Manager, default_timeout_stop_usec), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("DefaultTimeoutAbortUSec", "t", property_get_default_timeout_abort_usec, 0, 0), ++ SD_BUS_PROPERTY("DefaultDeviceTimeoutUSec", "t", bus_property_get_usec, offsetof(Manager, default_device_timeout_usec), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("DefaultRestartUSec", "t", bus_property_get_usec, offsetof(Manager, default_restart_usec), SD_BUS_VTABLE_PROPERTY_CONST), + SD_BUS_PROPERTY("DefaultStartLimitIntervalUSec", "t", bus_property_get_usec, offsetof(Manager, default_start_limit_interval), SD_BUS_VTABLE_PROPERTY_CONST), + /* The following two items are obsolete alias */ +diff --git a/src/core/device.c b/src/core/device.c +index d2c5febd3f..cb6021cbd8 100644 +--- a/src/core/device.c ++++ b/src/core/device.c +@@ -101,7 +101,7 @@ static void device_init(Unit *u) { + * indefinitely for plugged in devices, something which cannot + * happen for the other units since their operations time out + * anyway. */ +- u->job_running_timeout = u->manager->default_timeout_start_usec; ++ u->job_running_timeout = u->manager->default_device_timeout_usec; + + u->ignore_on_isolate = true; + +diff --git a/src/core/main.c b/src/core/main.c +index 03efaa03be..7dedc5163b 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -132,6 +132,7 @@ static usec_t arg_default_restart_usec; + static usec_t arg_default_timeout_start_usec; + static usec_t arg_default_timeout_stop_usec; + static usec_t arg_default_timeout_abort_usec; ++static usec_t arg_default_device_timeout_usec; + static bool arg_default_timeout_abort_set; + static usec_t arg_default_start_limit_interval; + static unsigned arg_default_start_limit_burst; +@@ -725,6 +726,7 @@ static int parse_config_file(void) { + { "Manager", "DefaultTimeoutStartSec", config_parse_sec, 0, &arg_default_timeout_start_usec }, + { "Manager", "DefaultTimeoutStopSec", config_parse_sec, 0, &arg_default_timeout_stop_usec }, + { "Manager", "DefaultTimeoutAbortSec", config_parse_default_timeout_abort, 0, NULL }, ++ { "Manager", "DefaultDeviceTimeoutSec", config_parse_sec, 0, &arg_default_device_timeout_usec }, + { "Manager", "DefaultRestartSec", config_parse_sec, 0, &arg_default_restart_usec }, + { "Manager", "DefaultStartLimitInterval", config_parse_sec, 0, &arg_default_start_limit_interval }, /* obsolete alias */ + { "Manager", "DefaultStartLimitIntervalSec", config_parse_sec, 0, &arg_default_start_limit_interval }, +@@ -809,6 +811,7 @@ static void set_manager_defaults(Manager *m) { + m->default_timeout_stop_usec = arg_default_timeout_stop_usec; + m->default_timeout_abort_usec = arg_default_timeout_abort_usec; + m->default_timeout_abort_set = arg_default_timeout_abort_set; ++ m->default_device_timeout_usec = arg_default_device_timeout_usec; + m->default_restart_usec = arg_default_restart_usec; + m->default_start_limit_interval = arg_default_start_limit_interval; + m->default_start_limit_burst = arg_default_start_limit_burst; +@@ -2437,6 +2440,7 @@ static void reset_arguments(void) { + arg_default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC; + arg_default_timeout_abort_usec = DEFAULT_TIMEOUT_USEC; + arg_default_timeout_abort_set = false; ++ arg_default_device_timeout_usec = DEFAULT_TIMEOUT_USEC; + arg_default_start_limit_interval = DEFAULT_START_LIMIT_INTERVAL; + arg_default_start_limit_burst = DEFAULT_START_LIMIT_BURST; + arg_runtime_watchdog = 0; +diff --git a/src/core/manager.c b/src/core/manager.c +index 5b7f5f55aa..8057bafe61 100644 +--- a/src/core/manager.c ++++ b/src/core/manager.c +@@ -806,6 +806,7 @@ int manager_new(LookupScope scope, ManagerTestRunFlags test_run_flags, Manager * + .default_timeout_start_usec = DEFAULT_TIMEOUT_USEC, + .default_timeout_stop_usec = DEFAULT_TIMEOUT_USEC, + .default_restart_usec = DEFAULT_RESTART_USEC, ++ .default_device_timeout_usec = DEFAULT_TIMEOUT_USEC, + + .original_log_level = -1, + .original_log_target = _LOG_TARGET_INVALID, +diff --git a/src/core/manager.h b/src/core/manager.h +index 281d2a2138..e7a15e6b25 100644 +--- a/src/core/manager.h ++++ b/src/core/manager.h +@@ -354,6 +354,7 @@ struct Manager { + ExecOutput default_std_output, default_std_error; + + usec_t default_restart_usec, default_timeout_start_usec, default_timeout_stop_usec; ++ usec_t default_device_timeout_usec; + usec_t default_timeout_abort_usec; + bool default_timeout_abort_set; + +diff --git a/src/core/system.conf.in b/src/core/system.conf.in +index 5913b5b0e4..7a150a482f 100644 +--- a/src/core/system.conf.in ++++ b/src/core/system.conf.in +@@ -44,6 +44,7 @@ + #DefaultTimeoutStartSec=90s + #DefaultTimeoutStopSec=90s + #DefaultTimeoutAbortSec= ++#DefaultDeviceTimeoutSec=90s + #DefaultRestartSec=100ms + #DefaultStartLimitIntervalSec=10s + #DefaultStartLimitBurst=5 diff --git a/SOURCES/0271-man-document-DefaultDeviceTimeoutSec.patch b/SOURCES/0271-man-document-DefaultDeviceTimeoutSec.patch new file mode 100644 index 0000000..924ec78 --- /dev/null +++ b/SOURCES/0271-man-document-DefaultDeviceTimeoutSec.patch @@ -0,0 +1,34 @@ +From 873e5040948fb317de39ad40316d16fdc9d17ffe Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Sat, 16 Jul 2022 10:16:41 +0200 +Subject: [PATCH] man: document DefaultDeviceTimeoutSec= + +(cherry picked from commit 9e69bd4801588c12811c611a1c68b54cecbe1718) + +Related: #2116681 +--- + man/systemd-system.conf.xml | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml +index b8e2b65625..bad790944d 100644 +--- a/man/systemd-system.conf.xml ++++ b/man/systemd-system.conf.xml +@@ -326,6 +326,17 @@ + 100ms. + + ++ ++ DefaultDeviceTimeoutSec= ++ ++ Configures the default timeout for waiting for devices. It can be changed per ++ device via the x-systemd.device-timeout= option in /etc/fstab ++ and /etc/crypttab (see ++ systemd.mount5, ++ crypttab5). ++ Defaults to 90s. ++ ++ + + DefaultStartLimitIntervalSec= + DefaultStartLimitBurst= diff --git a/SOURCES/0272-man-update-dbus-docs.patch b/SOURCES/0272-man-update-dbus-docs.patch new file mode 100644 index 0000000..707f3d8 --- /dev/null +++ b/SOURCES/0272-man-update-dbus-docs.patch @@ -0,0 +1,43 @@ +From 3b5feb647f86c6db779806551093202b1ab020f2 Mon Sep 17 00:00:00 2001 +From: David Tardon +Date: Sat, 16 Jul 2022 12:36:06 +0200 +Subject: [PATCH] man: update dbus docs + +(cherry picked from commit 141332ab55203adddadbf59ff7792a7e3438092c) + +Related: #2116681 +--- + man/org.freedesktop.systemd1.xml | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/man/org.freedesktop.systemd1.xml b/man/org.freedesktop.systemd1.xml +index e1abb7f389..6be60c865c 100644 +--- a/man/org.freedesktop.systemd1.xml ++++ b/man/org.freedesktop.systemd1.xml +@@ -425,6 +425,8 @@ node /org/freedesktop/systemd1 { + @org.freedesktop.DBus.Property.EmitsChangedSignal("false") + readonly t DefaultTimeoutAbortUSec = ...; + @org.freedesktop.DBus.Property.EmitsChangedSignal("const") ++ readonly t DefaultDeviceTimeoutUSec = ...; ++ @org.freedesktop.DBus.Property.EmitsChangedSignal("const") + readonly t DefaultRestartUSec = ...; + @org.freedesktop.DBus.Property.EmitsChangedSignal("const") + readonly t DefaultStartLimitIntervalUSec = ...; +@@ -669,6 +671,8 @@ node /org/freedesktop/systemd1 { + + + ++ ++ + + + +@@ -1073,6 +1077,8 @@ node /org/freedesktop/systemd1 { + + + ++ ++ + + + diff --git a/SOURCES/0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch b/SOURCES/0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch new file mode 100644 index 0000000..b83b8eb --- /dev/null +++ b/SOURCES/0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch @@ -0,0 +1,47 @@ +From c064473f6993a04ad126770a3218da623316c543 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Sat, 25 Dec 2021 11:19:03 +0100 +Subject: [PATCH] hwdb: 60-keyboard: Fix volume-button mapping on Asus TF103C + +The Asus TF103C misses the home button in its PNP0C40 GPIO resources +causing the button mappings for the volume buttons to be off by one, +leading to the volume-up button sending home button presses and the +volume-down button sending volume-up button presses. + +Add a 60-keyboard hwdb entry to correct the mappings. Note this is +split over 2 input devices because the soc_button_array driver +creates separate input devices for power + home and vol up/down. +This is done because power/home act as wakeup buttons where as +the volume buttons do not. + +This means that after this fixup the home -> volume-up button +still acts as a wakeup button, there is nothing which can be done +about this without adding a kludge to the kernel which is not +worth the trouble (IMHO). + +(cherry picked from commit 04b457d8ef9c93be3b2048c6f545cdbcf1b893a1) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index b614a22c8c..3d6e56983b 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -231,6 +231,14 @@ evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* + evdev:input:b0003v0B05p1869* + KEYBOARD_KEY_ff31007c=f20 # Remap micmute to f20 + ++# Asus TF103C misses the home button in its PNP0C40 GPIO resources ++# causing the volume-button mappings to be off by one, correct this ++evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:* ++ KEYBOARD_KEY_1=volumeup ++ ++evdev:name:gpio-keys:phys:gpio-keys/input0:ev:100003:dmi:*:svnASUSTeKCOMPUTERINC.:pnTF103C*:* ++ KEYBOARD_KEY_0=volumedown ++ + ########################################################### + # BenQ + ########################################################### diff --git a/SOURCES/0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch b/SOURCES/0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch new file mode 100644 index 0000000..1cfbc99 --- /dev/null +++ b/SOURCES/0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch @@ -0,0 +1,28 @@ +From c81a00694952469b1a3afa7c0345a5f2390c8024 Mon Sep 17 00:00:00 2001 +From: Tyson Whitehead +Date: Wed, 19 Jan 2022 22:38:21 -0500 +Subject: [PATCH] hwdb: CH Pro Pedals not classified correctly due to no + buttons + +(cherry picked from commit 230ed4c4bad8b3c1d9d746a80e6f78dc71d1c87f) + +Related: #2087778 +--- + hwdb.d/60-input-id.hwdb | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb +index c4101cc2a5..f7b61fb980 100644 +--- a/hwdb.d/60-input-id.hwdb ++++ b/hwdb.d/60-input-id.hwdb +@@ -70,4 +70,9 @@ id-input:modalias:input:b0005v046DpB00De0700* + + # Logitech MX Keys + id-input:modalias:input:b0003v046Dp408Ae0111* +- ID_INPUT_MOUSE=0 ++ ID_INPUT_MOUSE=0 ++ ++# CH Products Pro Pedals ++id-input:modalias:input:b0003v068Ep00F2e0100* ++ ID_INPUT_ACCELEROMETER=0 ++ ID_INPUT_JOYSTICK=1 diff --git a/SOURCES/0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch b/SOURCES/0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch new file mode 100644 index 0000000..52181a6 --- /dev/null +++ b/SOURCES/0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch @@ -0,0 +1,27 @@ +From d7ca24d57b5e6587238da4d5002c221af31e9735 Mon Sep 17 00:00:00 2001 +From: Thomas Batten +Date: Thu, 20 Jan 2022 19:24:00 +1030 +Subject: [PATCH] hwdb: Add accel orientation quirk for the GPD Pocket 3 + +(cherry picked from commit 5888fa9b16c33e48d702313d80c9cb0253aec920) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index ab7b1adacd..c4ee7e0c7b 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -426,6 +426,10 @@ sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.11:bd03/20/201 + sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInc.:bvr5.11:bd05/25/2017:*svnDefaultstring:pnDefaultstring:pvrDefaultstring:rvnAMICorporation:rnDefaultstring:rvrDefaultstring:cvnDefaultstring:ct3:cvrDefaultstring:* + ACCEL_LOCATION=base + ++# GPD Pocket 3 ++sensor:modalias:acpi:MXC6655*:dmi:*:svnGPD:pnG1621-02:* ++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1 ++ + ######################################### + # Hometech + ######################################## diff --git a/SOURCES/0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch b/SOURCES/0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch new file mode 100644 index 0000000..9acf684 --- /dev/null +++ b/SOURCES/0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch @@ -0,0 +1,41 @@ +From ea54689eebe58d1bbb908762731f179e50ac1c9a Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 21 Jan 2022 18:56:42 +0100 +Subject: [PATCH] hostname: Allow overriding the chassis type from hwdb + +Closes: #7390 +(cherry picked from commit 4b35eb2579b226785f0d94129a7652450f9723fd) + +Related: #2087778 +--- + src/hostname/hostnamed.c | 12 +++++++----- + 1 file changed, 7 insertions(+), 5 deletions(-) + +diff --git a/src/hostname/hostnamed.c b/src/hostname/hostnamed.c +index b20a93ad81..559326b9f5 100644 +--- a/src/hostname/hostnamed.c ++++ b/src/hostname/hostnamed.c +@@ -725,16 +725,18 @@ static int property_get_chassis( + sd_bus_error *error) { + + Context *c = userdata; +- const char *name; ++ _cleanup_free_ char *dmi_chassis = NULL; ++ const char *name = NULL; + + context_read_machine_info(c); + +- if (isempty(c->data[PROP_CHASSIS])) +- name = fallback_chassis(); +- else ++ if (isempty(c->data[PROP_CHASSIS])) { ++ if (get_dmi_data("ID_CHASSIS", NULL, &dmi_chassis) <= 0) ++ name = fallback_chassis(); ++ } else + name = c->data[PROP_CHASSIS]; + +- return sd_bus_message_append(reply, "s", name); ++ return sd_bus_message_append(reply, "s", name ?: dmi_chassis); + } + + static int property_get_uname_field( diff --git a/SOURCES/0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch b/SOURCES/0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch new file mode 100644 index 0000000..081faf0 --- /dev/null +++ b/SOURCES/0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch @@ -0,0 +1,26 @@ +From 1514432a3837d7feaf70e34fbfafc8137e539ea8 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Fri, 21 Jan 2022 18:57:21 +0100 +Subject: [PATCH] hwdb: Add Microsoft Surface Pro 1 chassis quirk + +See https://github.com/systemd/systemd/issues/7390#issuecomment-345546127 + +(cherry picked from commit bdf182debe715ff7876c610b0f93540437cb8b43) + +Related: #2087778 +--- + hwdb.d/20-dmi-id.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/20-dmi-id.hwdb b/hwdb.d/20-dmi-id.hwdb +index a614473bd9..c7bf6cfab1 100644 +--- a/hwdb.d/20-dmi-id.hwdb ++++ b/hwdb.d/20-dmi-id.hwdb +@@ -4,3 +4,7 @@ + dmi:bvnLENOVO* + ID_SYSFS_ATTRIBUTE_MODEL=product_version + ID_VENDOR_FROM_DATABASE=Lenovo ++ ++# Microsoft Surface 1's chassis type ++dmi:bvnMicrosoft Corporation*:pvrSurface with Windows 8 Pro* ++ ID_CHASSIS=tablet diff --git a/SOURCES/0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch b/SOURCES/0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch new file mode 100644 index 0000000..ce01cef --- /dev/null +++ b/SOURCES/0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch @@ -0,0 +1,27 @@ +From cf56e7ae888a0d5a1384b5a22398aa3e32c65b73 Mon Sep 17 00:00:00 2001 +From: Seth Falco +Date: Thu, 27 Jan 2022 21:08:30 +0000 +Subject: [PATCH] hwdb: treat logitech craft keyboard as a keyboard + +(cherry picked from commit 7f74f7a916b8c2bd6e82b873334731427ba8cb80) + +Related: #2087778 +--- + hwdb.d/60-input-id.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb +index f7b61fb980..2d5681dea6 100644 +--- a/hwdb.d/60-input-id.hwdb ++++ b/hwdb.d/60-input-id.hwdb +@@ -72,6 +72,10 @@ id-input:modalias:input:b0005v046DpB00De0700* + id-input:modalias:input:b0003v046Dp408Ae0111* + ID_INPUT_MOUSE=0 + ++# Logitech Craft Keyboard ++id-input:modalias:input:b0003v046Dp4066e0111* ++ ID_INPUT_MOUSE=0 ++ + # CH Products Pro Pedals + id-input:modalias:input:b0003v068Ep00F2e0100* + ID_INPUT_ACCELEROMETER=0 diff --git a/SOURCES/0279-test-frequency-in-mouse-DPI-is-optional.patch b/SOURCES/0279-test-frequency-in-mouse-DPI-is-optional.patch new file mode 100644 index 0000000..2dea017 --- /dev/null +++ b/SOURCES/0279-test-frequency-in-mouse-DPI-is-optional.patch @@ -0,0 +1,27 @@ +From 3821f3570e28a6f169bf539086882b34a6a7beb8 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Fri, 28 Jan 2022 11:08:43 +0900 +Subject: [PATCH] test: frequency in mouse DPI is optional + +Prompted by #22278. + +(cherry picked from commit e912326e05cf753ddb703be0666336ee3386d6e0) + +Related: #2087778 +--- + hwdb.d/parse_hwdb.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py +index 0268bf9580..aef0331ace 100755 +--- a/hwdb.d/parse_hwdb.py ++++ b/hwdb.d/parse_hwdb.py +@@ -121,7 +121,7 @@ def hwdb_grammar(): + def property_grammar(): + ParserElement.setDefaultWhitespaceChars(' ') + +- dpi_setting = Group(Optional('*')('DEFAULT') + INTEGER('DPI') + Suppress('@') + INTEGER('HZ'))('SETTINGS*') ++ dpi_setting = Group(Optional('*')('DEFAULT') + INTEGER('DPI') + Optional(Suppress('@') + INTEGER('HZ')))('SETTINGS*') + mount_matrix_row = SIGNED_REAL + ',' + SIGNED_REAL + ',' + SIGNED_REAL + mount_matrix = Group(mount_matrix_row + ';' + mount_matrix_row + ';' + mount_matrix_row)('MOUNT_MATRIX') + xkb_setting = Optional(Word(alphanums + '+-/@._')) diff --git a/SOURCES/0280-hwdb-add-two-Elecom-trackballs.patch b/SOURCES/0280-hwdb-add-two-Elecom-trackballs.patch new file mode 100644 index 0000000..62cef91 --- /dev/null +++ b/SOURCES/0280-hwdb-add-two-Elecom-trackballs.patch @@ -0,0 +1,34 @@ +From 7baf39a2264d38ee6c684c28fee5da879b87a2c5 Mon Sep 17 00:00:00 2001 +From: Ryan Hendrickson +Date: Thu, 27 Jan 2022 18:06:14 -0500 +Subject: [PATCH] hwdb: add two Elecom trackballs + +(cherry picked from commit a663f5eef59a05ba64e313d2451000d8df754bcf) + +Related: #2087778 +--- + hwdb.d/70-mouse.hwdb | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb +index 6302312456..66e74f667c 100644 +--- a/hwdb.d/70-mouse.hwdb ++++ b/hwdb.d/70-mouse.hwdb +@@ -198,6 +198,17 @@ mouse:usb:v0461p4d46:name:USB Optical Mouse:* + mouse:usb:v056ep010d:name:ELECOM TrackBall Mouse HUGE TrackBall:* + MOUSE_DPI=500@125 *1000@125 1500@125 + ++# Elecom DEFT Pro TrackBall (M-DPT1MR) ++mouse:usb:v056ep0131:name:ELECOM TrackBall Mouse DEFT Pro TrackBall Mouse:* ++ MOUSE_DPI=*500 1000 1500 ++ MOUSE_WHEEL_CLICK_ANGLE=10 ++ ++# Elecom Relacon (M-RT1DR) ++mouse:usb:v056ep0155:name:ELECOM ELECOM Relacon:* ++ ID_INPUT_TRACKBALL=1 ++ MOUSE_DPI=*500 1000 1500 ++ MOUSE_WHEEL_CLICK_ANGLE=30 ++ + ########################################## + # Fujitsu Siemens + ########################################## diff --git a/SOURCES/0281-hwdb-add-new-database-file-for-PDA-devices.patch b/SOURCES/0281-hwdb-add-new-database-file-for-PDA-devices.patch new file mode 100644 index 0000000..31b933f --- /dev/null +++ b/SOURCES/0281-hwdb-add-new-database-file-for-PDA-devices.patch @@ -0,0 +1,91 @@ +From 125cb47adf05421d00e25aee4a143ef2c473aeb9 Mon Sep 17 00:00:00 2001 +From: Davide Cavalca +Date: Sun, 30 Jan 2022 09:28:52 -0800 +Subject: [PATCH] hwdb: add new database file for PDA devices + +Add a new database for handhelds (PDAs, calculators, etc.) that should be +accessible the seat owner. + +The database is initially populated with Texas Instruments calculators +and linking cables, which removes the need to installing dedicated udev +rules for them. + +(cherry picked from commit 7d75376e1f0a83dba76d3a08edbb50923e02e3d3) + +Related: #2087778 +--- + hwdb.d/70-pda.hwdb | 39 +++++++++++++++++++++++++++++++++++++++ + hwdb.d/meson.build | 1 + + hwdb.d/parse_hwdb.py | 1 + + 3 files changed, 41 insertions(+) + create mode 100644 hwdb.d/70-pda.hwdb + +diff --git a/hwdb.d/70-pda.hwdb b/hwdb.d/70-pda.hwdb +new file mode 100644 +index 0000000000..e122acca6f +--- /dev/null ++++ b/hwdb.d/70-pda.hwdb +@@ -0,0 +1,39 @@ ++# This file is part of systemd. ++# ++# Database for handhelds (PDAs, calculators, etc.) that should be accessible ++# the seat owner. ++# ++# Permitted keys: ++# Specify if a device is a signal analyzer ++# ID_PDA=1|0 ++ ++########################################################### ++# Texas Instruments ++########################################################### ++# SilverLink ++usb:v0451pE001* ++ ID_PDA=1 ++ ++# TI-84 Plus DirectLink ++usb:v0451pE003* ++ ID_PDA=1 ++ ++# TI-89 Titanium DirectLink ++usb:v0451pE004* ++ ID_PDA=1 ++ ++# TI-84 Plus Silver Edition DirectLink ++usb:v0451pE008* ++ ID_PDA=1 ++ ++# TI-Nspire DirectLink ++usb:v0451pE012* ++ ID_PDA=1 ++ ++# TI-Nspire Lab Cradle ++usb:v0451pE01C* ++ ID_PDA=1 ++ ++# TI-Nspire CX II DirectLink ++usb:v0451pE022* ++ ID_PDA=1 +diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build +index 8ff044131c..fc72ebb2bd 100644 +--- a/hwdb.d/meson.build ++++ b/hwdb.d/meson.build +@@ -31,6 +31,7 @@ hwdb_files_test = files(''' + 70-cameras.hwdb + 70-joystick.hwdb + 70-mouse.hwdb ++ 70-pda.hwdb + 70-pointingstick.hwdb + 70-touchpad.hwdb + 80-ieee1394-unit-function.hwdb +diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py +index aef0331ace..194a71ac08 100755 +--- a/hwdb.d/parse_hwdb.py ++++ b/hwdb.d/parse_hwdb.py +@@ -136,6 +136,7 @@ def property_grammar(): + ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER), + ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))), + ('ID_PERSIST', Or((Literal('0'), Literal('1')))), ++ ('ID_PDA', Or((Literal('0'), Literal('1')))), + ('ID_INPUT', Or((Literal('0'), Literal('1')))), + ('ID_INPUT_ACCELEROMETER', Or((Literal('0'), Literal('1')))), + ('ID_INPUT_JOYSTICK', Or((Literal('0'), Literal('1')))), diff --git a/SOURCES/0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch b/SOURCES/0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch new file mode 100644 index 0000000..a5f1eef --- /dev/null +++ b/SOURCES/0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch @@ -0,0 +1,41 @@ +From 5d3c35c19083053128ec2c48e6393c2a9803d57e Mon Sep 17 00:00:00 2001 +From: Dorian Clay +Date: Sun, 30 Jan 2022 11:50:09 -0800 +Subject: [PATCH] hwdb: add support for Surface Laptop 2 & 3 (#22303) + +(cherry picked from commit 156d01b9ca4cb6d7b3877a3db7d20ed600dc40c0) + +Related: #2087778 +--- + hwdb.d/60-evdev.hwdb | 18 ++++++++++++++++++ + 1 file changed, 18 insertions(+) + +diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb +index f896dde357..9fcb4a3ddf 100644 +--- a/hwdb.d/60-evdev.hwdb ++++ b/hwdb.d/60-evdev.hwdb +@@ -591,6 +591,24 @@ evdev:name:MSFT0001:02 04F3:304B Touchpad:dmi:*svnLENOVO:*pvrLenovoLegionY9000X2 + EVDEV_ABS_35=::31 + EVDEV_ABS_36=::30 + ++######################################### ++# Microsoft ++######################################### ++ ++# Surface Laptop 2 (13") ++evdev:name:Microsoft Surface 045E:0933 Touchpad:dmi:*svnMicrosoftCorporation:*pnSurfaceLaptop2** ++ EVDEV_ABS_00=::38 ++ EVDEV_ABS_01=::38 ++ EVDEV_ABS_35=::38 ++ EVDEV_ABS_36=::38 ++ ++# Surface Laptop 3 (15") ++evdev:name:Microsoft Surface 045E:09AF Touchpad:dmi:*svnMicrosoftCorporation:*pnSurfaceLaptop3** ++ EVDEV_ABS_00=::39 ++ EVDEV_ABS_01=::37 ++ EVDEV_ABS_35=::39 ++ EVDEV_ABS_36=::37 ++ + ######################################### + # NEWYES + ######################################### diff --git a/SOURCES/0283-hwdb-add-HP-calculators.patch b/SOURCES/0283-hwdb-add-HP-calculators.patch new file mode 100644 index 0000000..fdbee4d --- /dev/null +++ b/SOURCES/0283-hwdb-add-HP-calculators.patch @@ -0,0 +1,38 @@ +From e193ca5f8828301fe569e28938f10fce3af5fcd3 Mon Sep 17 00:00:00 2001 +From: Davide Cavalca +Date: Thu, 3 Feb 2022 08:35:35 -0800 +Subject: [PATCH] hwdb: add HP calculators + +(cherry picked from commit 2b560c6e545346e9791962e37361ca044fca036e) + +Related: #2087778 +--- + hwdb.d/70-pda.hwdb | 13 ++++++++++++- + 1 file changed, 12 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/70-pda.hwdb b/hwdb.d/70-pda.hwdb +index e122acca6f..3fdb4efcdd 100644 +--- a/hwdb.d/70-pda.hwdb ++++ b/hwdb.d/70-pda.hwdb +@@ -4,9 +4,20 @@ + # the seat owner. + # + # Permitted keys: +-# Specify if a device is a signal analyzer ++# Specify if a device is a handheld + # ID_PDA=1|0 + ++########################################################### ++# HP Inc. ++########################################################### ++# HP x9G+ Calculator ++usb:v03F0p0121* ++ ID_PDA=1 ++ ++# HP Prime ++usb:v03F0p1541* ++ ID_PDA=1 ++ + ########################################################### + # Texas Instruments + ########################################################### diff --git a/SOURCES/0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch b/SOURCES/0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch new file mode 100644 index 0000000..eaf8dcd --- /dev/null +++ b/SOURCES/0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch @@ -0,0 +1,29 @@ +From 6b2ea92e5d8c4888b33a2d9f21b830933132d513 Mon Sep 17 00:00:00 2001 +From: Matt Walton +Date: Fri, 4 Feb 2022 11:47:08 -0600 +Subject: [PATCH] hwbd: 60-sensor.hwdb: Add Pipo W2Pro + +Add accelerometer matrix for Pipo W2Pro tablet. Y-axis was backwards (normal <--> bottom-up). + +(cherry picked from commit ec82f867eea000921fa0f93a9adf1f8fd7bfe2c5) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index c4ee7e0c7b..ea278913bc 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -751,6 +751,10 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnPEAQ:pnPEAQPMMC1010MD99187:* + sensor:modalias:acpi:KIOX000A*:dmi:*:svnPIPO:pnW2S:* + ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 + ++# Pipo W2Pro ++sensor:modalias:acpi:KIOX0008*:dmi:*svnPIPO:pnW2pro:* ++ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 ++ + # Pipo W4 + sensor:modalias:acpi:SMO8500*:dmi:*:bvrV8L_WIN32_CHIPHD_*_DX:*:rvnAMICorporation:rnAptioCRB:* + ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 diff --git a/SOURCES/0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch b/SOURCES/0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch new file mode 100644 index 0000000..4563435 --- /dev/null +++ b/SOURCES/0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch @@ -0,0 +1,51 @@ +From e8de40fbfab79cc86729e13b924251c1af8567ba Mon Sep 17 00:00:00 2001 +From: Lubomir Rintel +Date: Sun, 22 Jul 2018 00:25:51 +0200 +Subject: [PATCH] hwdb: 60-keyboard: Support the buttons on CZC P10T tablet + +The machine has tree buttons connected to an EC that acts as a regular +AT-compatible keyboard controller. It can be either in "Windows 7" or +"Android" mode. It boots up with the earlier, but the Android build on +the tablet switches it on bootup (Windows presumably leaves it as-is). + +The "Windows 7" mode, the behavior is very inconvenient: the Home button +emits multiple key presses that presumably do something in Windws 7 while +the second button toggles the RF Kill Switch in addition to producing a +scancode (it's labeled "Back" on Android version of the tablet). + +The "Android" mode just sends the good ol' scan codes and this patch +handles them. On mainline Linux, the "x86-android-tablets" driver makes +sure we're in the correct mode. + +(cherry picked from commit f2f11dfbb7f30d279ab3c9b3c84de5496407112d) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 3d6e56983b..66561eac35 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -1891,6 +1891,20 @@ evdev:input:b0003v1038p0310* + KEYBOARD_KEY_7002f=f11 + KEYBOARD_KEY_70046=f6 + ++########################################################### ++# CZC ++########################################################### ++ ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnCZC:pnODEON*TPC-10:* ++ KEYBOARD_KEY_01=leftmeta # Home button held for 2s ++ KEYBOARD_KEY_db=prog1 # Home button ++ KEYBOARD_KEY_dd=rfkill # Second button labeled Wi-Fi ++ ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnViewSonic:pnVPAD10:* ++ KEYBOARD_KEY_01=leftmeta # Home button held for 2s ++ KEYBOARD_KEY_db=prog1 # Home button ++ KEYBOARD_KEY_dd=back # Second button labeled Back ++ + ########################################################### + # Other + ########################################################### diff --git a/SOURCES/0286-hwdb-add-CST-Laser-Trackball-22583.patch b/SOURCES/0286-hwdb-add-CST-Laser-Trackball-22583.patch new file mode 100644 index 0000000..e65ccd6 --- /dev/null +++ b/SOURCES/0286-hwdb-add-CST-Laser-Trackball-22583.patch @@ -0,0 +1,33 @@ +From 67137663f67afa6c7ba9ef29f9b9c2e9288bb0bd Mon Sep 17 00:00:00 2001 +From: prumian <100143890+prumian@users.noreply.github.com> +Date: Tue, 22 Feb 2022 07:47:39 +0100 +Subject: [PATCH] hwdb: add CST Laser Trackball (#22583) + +Set the default to 800DPI as this is what user manual suggests. + +(cherry picked from commit d9ab110ddc453cac40a0b36cee5e5dc272e7aec7) + +Related: #2087778 +--- + hwdb.d/70-mouse.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb +index 66e74f667c..723d145e34 100644 +--- a/hwdb.d/70-mouse.hwdb ++++ b/hwdb.d/70-mouse.hwdb +@@ -166,6 +166,14 @@ mouse:bluetooth:v05acp030d:name:*:* + mouse:usb:v04f2p0963:name:Chicony 2.4G Multimedia Wireless Kit:* + MOUSE_DPI=1000@142 + ++########################################## ++# CST ++########################################## ++ ++# CST Laser Trackball ++mouse:usb:v5332p1400:name:Clearly Superior Technologies. CST Laser Trackball:* ++ MOUSE_DPI=400@1000 *800@1000 1600@1000 ++ + ########################################## + # Dell + ########################################## diff --git a/SOURCES/0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch b/SOURCES/0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch new file mode 100644 index 0000000..1ffad30 --- /dev/null +++ b/SOURCES/0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch @@ -0,0 +1,27 @@ +From 1730fc33578270d9ee83aec116d014333aacb67f Mon Sep 17 00:00:00 2001 +From: Lan Tian +Date: Tue, 22 Feb 2022 01:43:32 -0600 +Subject: [PATCH] hwdb: Force release calculator key on all HP OMEN laptops + +(cherry picked from commit 70920214b6a1c1825a2724793497e6be2ba3c0fc) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 66561eac35..2606d0b66c 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -719,8 +719,8 @@ evdev:name:gpio-keys:phys:gpio-keys/input0:ev:3:dmi:*:svnHewlett-Packard:pnHPStr + evdev:name:gpio-keys:phys:gpio-keys/input0:ev:23:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:* + KEYBOARD_KEY_0=unknown + +-# HP Omen 15 +-evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMENLaptop15*:pvr* ++# HP Omen ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMEN*:pvr* + KEYBOARD_KEY_a1=!calc + + ########################################################## diff --git a/SOURCES/0288-Add-support-for-NEC-VersaPro-VG-S.patch b/SOURCES/0288-Add-support-for-NEC-VersaPro-VG-S.patch new file mode 100644 index 0000000..c5ee0ad --- /dev/null +++ b/SOURCES/0288-Add-support-for-NEC-VersaPro-VG-S.patch @@ -0,0 +1,36 @@ +From ce32478594b4afc26c91ed63eb17c65ca988158c Mon Sep 17 00:00:00 2001 +From: 4piu <16668056+4piu@users.noreply.github.com> +Date: Mon, 7 Mar 2022 16:38:08 +0800 +Subject: [PATCH] Add support for NEC VersaPro VG-S + +The brightness control key (Fn+F7 Fn+F8) and touchpad toggle key (Fn + Space) do not work on the NEC VersaPro VG-S laptop. Add the keycode to fix the problem. + +(cherry picked from commit 19a04e807129e7790a0f2950cf67d79fe0df85cb) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 2606d0b66c..73b26089ab 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -1345,6 +1345,17 @@ evdev:name:MSI Laptop hotkeys:dmi:bvn*:bvr*:bd*:svn*:pnM[iI][cC][rR][oO]-S[tT][a + KEYBOARD_KEY_0213=f22 + KEYBOARD_KEY_0214=f23 + ++########################################## ++# NEC ++########################################## ++ ++# VersaPro VG-S ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnNEC:pnPC-VK22TGSGS:pvr* ++ KEYBOARD_KEY_a8=f21 # Fn+Space touchpad toggle ++ KEYBOARD_KEY_67=brightnessdown # Fn+F7 brightness down ++ KEYBOARD_KEY_65=brightnessup # Fn+F8 brightness up ++ KEYBOARD_KEY_71=battery # Fn+F4 ECO ++ + ########################################################### + # Olimex + ########################################################### diff --git a/SOURCES/0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch b/SOURCES/0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch new file mode 100644 index 0000000..7419d46 --- /dev/null +++ b/SOURCES/0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch @@ -0,0 +1,29 @@ +From ecf8c93eb9f181822c277746c729ab1545079c7d Mon Sep 17 00:00:00 2001 +From: tawefogo <101180464+tawefogo@users.noreply.github.com> +Date: Tue, 8 Mar 2022 15:10:51 +0100 +Subject: [PATCH] Fix mic mute on Acer TravelMate B311-31 (#22677) + +(cherry picked from commit 6c5f368646c5de893d5cf05eb9a4a3892bc8228d) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 73b26089ab..780ed6183e 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -164,6 +164,12 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredator*PH*315-52:* + KEYBOARD_KEY_ef=kbdillumup # Fn+F10 + KEYBOARD_KEY_f0=kbdillumdown # Fn+F9 + ++# Travelmate B311-31, B311R-31, B311RN-31 ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311-31*:pvr* ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311R-31*:pvr* ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMateB311RN-31*:pvr* ++ KEYBOARD_KEY_8a=f20 # Microphone mute ++ + # Travelmate C300 + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnTravelMate*C3[01]0*:* + KEYBOARD_KEY_67=f24 # FIXME: rotate screen diff --git a/SOURCES/0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch b/SOURCES/0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch new file mode 100644 index 0000000..3093d6b --- /dev/null +++ b/SOURCES/0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch @@ -0,0 +1,196 @@ +From 41d06ed98ecbe4f65cfffc3877fbe4c87fadc6b4 Mon Sep 17 00:00:00 2001 +From: Be +Date: Fri, 27 Aug 2021 22:30:50 -0500 +Subject: [PATCH] Add AV production controllers to hwdb and add uaccess + +This adds support for AV production controller devices, such +as DJ tables, music-oriented key pads, and others. + +The USB vendor and product IDs come from Mixxx, Ctlra, and +Ardour. + +Fixes #20533 + +Co-developed-by: Georges Basile Stavracas Neto +(cherry picked from commit f2c36c0e2445fa95ba109017d4b768b2fd825c43) + +Related: #2087778 +--- + hwdb.d/70-av-production.hwdb | 123 ++++++++++++++++++++++++++++++++++ + hwdb.d/meson.build | 1 + + hwdb.d/parse_hwdb.py | 1 + + src/login/70-uaccess.rules.in | 9 +++ + 4 files changed, 134 insertions(+) + create mode 100644 hwdb.d/70-av-production.hwdb + +diff --git a/hwdb.d/70-av-production.hwdb b/hwdb.d/70-av-production.hwdb +new file mode 100644 +index 0000000000..17ac1b4fb6 +--- /dev/null ++++ b/hwdb.d/70-av-production.hwdb +@@ -0,0 +1,123 @@ ++# This file is part of systemd. ++# ++# Database for AV production controllers that should be accessible to the seat owner. ++# ++# This covers DJ tables, and music-oriented key pads ++# ++# To add local entries, copy this file to ++# /etc/udev/hwdb.d/ ++# and add your rules there. To load the new rules execute (as root): ++# systemd-hwdb update ++# udevadm trigger ++ ++################ ++# Ableton ++################ ++# Push 2 ++usb:v2982p1967* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++################ ++# Eks ++################ ++# Otus ++usb:v1157p0300* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++############################# ++# Hercules (Guillemot Corp) ++############################# ++# DJ Console MP3e2 ++usb:v06F8pB105* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# DJ Console MP3 LE / Glow ++usb:v06F8pB120* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# DJ Console Mk2 ++usb:v06F8pB100* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# DJ Console Mk4 ++usb:v06F8pB107* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++##################### ++# Native Instruments ++##################### ++ ++# Maschine 2 ++usb:v17CCp1140* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Maschine 2 Mikro ++usb:v17CCp1110* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Maschine 2 Studio ++usb:v17CCp1300* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Maschine Jam ++usb:v17CCp1500* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Maschine 3 ++usb:v17CCp1600* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol D2 ++usb:v17CCp1400* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol F1 ++usb:v17CCp1120* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S2 Mk2 ++usb:v17CCp1320* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S2 Mk3 ++usb:v17CCp1710* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S3 ++usb:v17CCp1900* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S4 Mk2 ++usb:v17CCp1310* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S4 Mk3 ++usb:v17CCp1720* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S5 ++usb:v17CCp1420* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol S8 ++usb:v17CCp1370* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol X1 Mk2 ++usb:v17CCp1220* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol Z1 ++usb:v17CCp1210* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Traktor Kontrol Z2 ++usb:v17CCp1130* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++#################### ++# Pioneer ++#################### ++# CDJ 2000 NXS 2 ++usb:v2B73p0005* ++ ID_AV_PRODUCTION_CONTROLLER=1 +diff --git a/hwdb.d/meson.build b/hwdb.d/meson.build +index fc72ebb2bd..8f6a8a4486 100644 +--- a/hwdb.d/meson.build ++++ b/hwdb.d/meson.build +@@ -28,6 +28,7 @@ hwdb_files_test = files(''' + 60-seat.hwdb + 60-sensor.hwdb + 70-analyzers.hwdb ++ 70-av-production.hwdb + 70-cameras.hwdb + 70-joystick.hwdb + 70-mouse.hwdb +diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py +index 194a71ac08..93179b675c 100755 +--- a/hwdb.d/parse_hwdb.py ++++ b/hwdb.d/parse_hwdb.py +@@ -135,6 +135,7 @@ def property_grammar(): + ('MOUSE_WHEEL_CLICK_COUNT', INTEGER), + ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER), + ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))), ++ ('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))), + ('ID_PERSIST', Or((Literal('0'), Literal('1')))), + ('ID_PDA', Or((Literal('0'), Literal('1')))), + ('ID_INPUT', Or((Literal('0'), Literal('1')))), +diff --git a/src/login/70-uaccess.rules.in b/src/login/70-uaccess.rules.in +index 052194b6c9..a3301be1bc 100644 +--- a/src/login/70-uaccess.rules.in ++++ b/src/login/70-uaccess.rules.in +@@ -87,4 +87,13 @@ ENV{ID_SIGNAL_ANALYZER}=="?*", ENV{DEVTYPE}=="usb_device", TAG+="uaccess" + # rfkill / radio killswitches + KERNEL=="rfkill", SUBSYSTEM=="misc", TAG+="uaccess" + ++# AV production controllers ++# Most of these devices use HID for the knobs, faders, buttons, encoders, and jog wheels. ++SUBSYSTEM=="hidraw", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess" ++ ++# Some devices use vendor defined protocols on USB Bulk endpoints for controllers. ++# Other devices transfer graphics to screens on the device through USB Bulk endpoints. ++# This also allows accessing HID devices with the libusb backend of hidapi. ++SUBSYSTEM=="usb", ENV{ID_AV_PRODUCTION_CONTROLLER}=="1", TAG+="uaccess" ++ + LABEL="uaccess_end" diff --git a/SOURCES/0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch b/SOURCES/0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch new file mode 100644 index 0000000..691a613 --- /dev/null +++ b/SOURCES/0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch @@ -0,0 +1,65 @@ +From 3467ee329568bf6a1b37de9c37ba914adf436291 Mon Sep 17 00:00:00 2001 +From: Georges Basile Stavracas Neto +Date: Mon, 14 Mar 2022 10:50:45 -0300 +Subject: [PATCH] hwdb: Add AV production access to Elgado Stream Deck devices + +The Stream Deck products from Elgato are simple key pads +intended to be used as macro pads. They're popular within +the streaming community. + +This commit adds all 5 Stream Deck variants available to +the AV production file. + +See https://www.elgato.com/en/stream-deck + +(cherry picked from commit e982320b44486b26c4d39f7c81012f6a0e2aaf77) + +Related: #2087778 +--- + hwdb.d/70-av-production.hwdb | 26 +++++++++++++++++++++++++- + 1 file changed, 25 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/70-av-production.hwdb b/hwdb.d/70-av-production.hwdb +index 17ac1b4fb6..a13d6981eb 100644 +--- a/hwdb.d/70-av-production.hwdb ++++ b/hwdb.d/70-av-production.hwdb +@@ -2,7 +2,8 @@ + # + # Database for AV production controllers that should be accessible to the seat owner. + # +-# This covers DJ tables, and music-oriented key pads ++# This covers DJ tables, music-oriented key pads, and streaming-oriented key pads ++# such as Elgato Stream Deck + # + # To add local entries, copy this file to + # /etc/udev/hwdb.d/ +@@ -24,6 +25,29 @@ usb:v2982p1967* + usb:v1157p0300* + ID_AV_PRODUCTION_CONTROLLER=1 + ++################ ++# Elgato ++################ ++# Stream Deck Original (gen 1) ++usb:v0FD9p0060* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Stream Deck Mini ++usb:v0FD9p0063* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Stream Deck XL ++usb:v0FD9p006C* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Stream Deck Original (gen 2) ++usb:v0FD9p006D* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ ++# Stream Deck MK.2 ++usb:v0FD9p0080* ++ ID_AV_PRODUCTION_CONTROLLER=1 ++ + ############################# + # Hercules (Guillemot Corp) + ############################# diff --git a/SOURCES/0292-Add-HP-Elitebook-2760p-support-22766.patch b/SOURCES/0292-Add-HP-Elitebook-2760p-support-22766.patch new file mode 100644 index 0000000..a0bfbbb --- /dev/null +++ b/SOURCES/0292-Add-HP-Elitebook-2760p-support-22766.patch @@ -0,0 +1,35 @@ +From aaca6dc45b898607afea3bf3d50ba7120458b054 Mon Sep 17 00:00:00 2001 +From: AlexCatze +Date: Fri, 18 Mar 2022 14:45:43 +0200 +Subject: [PATCH] Add HP Elitebook 2760p support (#22766) + +(cherry picked from commit 1a34f913a6cfa22abfb6b3f69e2ba20112e19d87) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 12 ++++++++++++ + 1 file changed, 12 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 780ed6183e..eeadd1a059 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -602,6 +602,18 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*G60*Notebook*PC:* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2570p*:* + KEYBOARD_KEY_f8=wlan # Wireless HW switch button + ++# Elitebook 2760p ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*2760p*:* ++ KEYBOARD_KEY_89=battery # Fn+F8 ++ KEYBOARD_KEY_f8=unknown # rfkill is also reported by HP Wireless hotkeys ++ KEYBOARD_KEY_86=volumeup ++ KEYBOARD_KEY_87=volumedown ++ KEYBOARD_KEY_92=brightnessdown ++ KEYBOARD_KEY_97=brightnessup ++ KEYBOARD_KEY_d8=!f23 # touchpad off ++ KEYBOARD_KEY_d9=!f22 # touchpad on ++ KEYBOARD_KEY_b3=unknown # FIXME: Auto brightness ++ + # TX2 + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pn*[tT][xX]2*:* + KEYBOARD_KEY_c2=media diff --git a/SOURCES/0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch b/SOURCES/0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch new file mode 100644 index 0000000..4646e72 --- /dev/null +++ b/SOURCES/0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch @@ -0,0 +1,30 @@ +From bfb6b8e75721c0d56d3a9ea8561f50f0f820b8a3 Mon Sep 17 00:00:00 2001 +From: Andy Chi +Date: Tue, 29 Mar 2022 15:36:13 +0800 +Subject: [PATCH] hwdb: Add mic mute key mapping for HP Elite x360 + +On the new Elite x360 2 in 1 HP laptops, the microphone mute hotkey is "Fn+F8" and +the scancode for this hotkey is 0x81, but this scancode was mapped to +fn_esc in the HP generic keymap section. To fix this problem, we add +a machine specific keymap section to add the correct keymap rule. + +(cherry picked from commit f09f6dc2c8f59b2b58159cc413b605a547c8646e) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index eeadd1a059..c196a1fd64 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -651,6 +651,8 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPLicrice:* + # HP EliteBook + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBook*:* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook*:* ++# HP Elite x360 ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPElite*x360*:* + # HP Elite Dragonfly + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteDragonfly*:* + # HP ProBook 440 G2 diff --git a/SOURCES/0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch b/SOURCES/0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch new file mode 100644 index 0000000..77c475b --- /dev/null +++ b/SOURCES/0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch @@ -0,0 +1,73 @@ +From 72d3b0c995403293f65ee9a47043ebd2fdafc1cd Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 29 Mar 2022 12:17:51 +0200 +Subject: [PATCH] hwdb: fix parser to work with newer pyparsing + +The handling of whitespace in pyparsing is a bother. There's some +global state, and per-element state, and it's hard to get a handle on +things. With python3-pyparsing-2.4.7-10.fc36.noarch the grammar would +not match. After handling of tabs was fixed to not accept duplicate tabs, +the grammar passes. + +It seems that the entry for usb:v8087p8087* +was generated incorrectly because we treated the interface line +(with two TABs) as a device line (with one TAB). + +(cherry picked from commit f73d6895872cb9caffc523e1eddc53c9b98cfdec) + +Related: #2087778 +--- + hwdb.d/20-usb-vendor-model.hwdb | 3 --- + hwdb.d/ids_parser.py | 10 ++++++++-- + 2 files changed, 8 insertions(+), 5 deletions(-) + +diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb +index f40a3947c7..9f457d9f65 100644 +--- a/hwdb.d/20-usb-vendor-model.hwdb ++++ b/hwdb.d/20-usb-vendor-model.hwdb +@@ -69815,9 +69815,6 @@ usb:v8087p8008* + usb:v8087p800A* + ID_MODEL_FROM_DATABASE=Hub + +-usb:v8087p8087* +- ID_MODEL_FROM_DATABASE=07da Centrino Advanced-N 6235 +- + usb:v80EE* + ID_VENDOR_FROM_DATABASE=VirtualBox + +diff --git a/hwdb.d/ids_parser.py b/hwdb.d/ids_parser.py +index 0ce79cd97e..811c12559b 100755 +--- a/hwdb.d/ids_parser.py ++++ b/hwdb.d/ids_parser.py +@@ -6,7 +6,7 @@ import sys + from pyparsing import (Word, White, Literal, Regex, + LineEnd, SkipTo, + ZeroOrMore, OneOrMore, Combine, Optional, Suppress, +- Group, ++ Group, ParserElement, + stringEnd, pythonStyleComment) + + EOL = LineEnd().suppress() +@@ -20,6 +20,8 @@ COMMENTLINE = pythonStyleComment + EOL + EMPTYLINE = LineEnd() + text_eol = lambda name: Regex(r'[^\n]+')(name) + EOL + ++ParserElement.set_default_whitespace_chars(' \n') ++ + def klass_grammar(): + klass_line = Literal('C ').suppress() + NUM2('klass') + text_eol('text') + subclass_line = TAB + NUM2('subclass') + text_eol('text') +@@ -35,8 +37,12 @@ def klass_grammar(): + def usb_ids_grammar(): + vendor_line = NUM4('vendor') + text_eol('text') + device_line = TAB + NUM4('device') + text_eol('text') ++ interface_line = TAB + TAB + NUM4('interface') + NUM4('interface2') + text_eol('text') ++ device = (device_line + ++ ZeroOrMore(Group(interface_line) ++ ^ COMMENTLINE.suppress())) + vendor = (vendor_line('VENDOR') + +- ZeroOrMore(Group(device_line)('VENDOR_DEV*') ^ COMMENTLINE.suppress())) ++ ZeroOrMore(Group(device)('VENDOR_DEV*') ^ COMMENTLINE.suppress())) + + klass = klass_grammar() + diff --git a/SOURCES/0295-hwdb-update-for-v251.patch b/SOURCES/0295-hwdb-update-for-v251.patch new file mode 100644 index 0000000..0dd6528 --- /dev/null +++ b/SOURCES/0295-hwdb-update-for-v251.patch @@ -0,0 +1,16379 @@ +From dec0bd75d3163e45086825bb28b99fce94b8c8d3 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 9 Dec 2021 11:05:15 +0100 +Subject: [PATCH] hwdb: update for v251 + +As usual, there are mostly additions of new entries, and some spelling +correction and company renames, no big removals. + +(cherry picked from commit c53e6f641eb763e9cb7762c106d8ce000591000e) + +Related: #2087778 +--- + hwdb.d/20-OUI.hwdb | 2415 ++++++++++++++++++- + hwdb.d/20-acpi-vendor.hwdb | 18 + + hwdb.d/20-acpi-vendor.hwdb.patch | 98 +- + hwdb.d/20-pci-classes.hwdb | 2 +- + hwdb.d/20-pci-vendor-model.hwdb | 724 +++++- + hwdb.d/20-usb-vendor-model.hwdb | 94 +- + hwdb.d/acpi_id_registry.html | 3 + + hwdb.d/ma-large.txt | 3713 +++++++++++++++++++++++++++--- + hwdb.d/ma-medium.txt | 998 +++++++- + hwdb.d/ma-small.txt | 966 +++++++- + hwdb.d/pci.ids | 300 ++- + hwdb.d/pnp_id_registry.html | 3 + + hwdb.d/usb.ids | 51 +- + 13 files changed, 8782 insertions(+), 603 deletions(-) + +diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb +index a97406d45d..4b8f83cc99 100644 +--- a/hwdb.d/20-OUI.hwdb ++++ b/hwdb.d/20-OUI.hwdb +@@ -573,7 +573,7 @@ OUI:0000BC* + ID_OUI_FROM_DATABASE=Rockwell Automation + + OUI:0000BD* +- ID_OUI_FROM_DATABASE=Mitsubishi Cable Industries, Ltd. / Ryosei Systems ++ ID_OUI_FROM_DATABASE=RYOSEI, Ltd. + + OUI:0000BE* + ID_OUI_FROM_DATABASE=THE NTI GROUP +@@ -10413,7 +10413,7 @@ OUI:000DA8* + ID_OUI_FROM_DATABASE=Teletronics Technology Corporation + + OUI:000DA9* +- ID_OUI_FROM_DATABASE=T.E.A.M. S.L. ++ ID_OUI_FROM_DATABASE=INGETEAM + + OUI:000DAA* + ID_OUI_FROM_DATABASE=S.A.Tehnology co.,Ltd. +@@ -11922,7 +11922,7 @@ OUI:000F9F* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + + OUI:000FA0* +- ID_OUI_FROM_DATABASE=CANON KOREA BUSINESS SOLUTIONS INC. ++ ID_OUI_FROM_DATABASE=Canon Korea Inc. + + OUI:000FA1* + ID_OUI_FROM_DATABASE=Gigabit Systems Inc. +@@ -14187,7 +14187,7 @@ OUI:001292* + ID_OUI_FROM_DATABASE=Griffin Technology + + OUI:001293* +- ID_OUI_FROM_DATABASE=ABB Power Protection (CH) ++ ID_OUI_FROM_DATABASE=ABB Switzerland Ltd. + + OUI:001294* + ID_OUI_FROM_DATABASE=SUMITOMO ELECTRIC DEVICE INNOVATIONS, INC +@@ -14961,7 +14961,7 @@ OUI:001394* + ID_OUI_FROM_DATABASE=Infohand Co.,Ltd + + OUI:001395* +- ID_OUI_FROM_DATABASE=congatec AG ++ ID_OUI_FROM_DATABASE=congatec GmbH + + OUI:001396* + ID_OUI_FROM_DATABASE=Acbel Polytech Inc. +@@ -15054,7 +15054,7 @@ OUI:0013B3* + ID_OUI_FROM_DATABASE=Ecom Communications Technology Co., Ltd. + + OUI:0013B4* +- ID_OUI_FROM_DATABASE=Appear TV ++ ID_OUI_FROM_DATABASE=Appear AS + + OUI:0013B5* + ID_OUI_FROM_DATABASE=Wavesat +@@ -17307,7 +17307,7 @@ OUI:0016A2* + ID_OUI_FROM_DATABASE=CentraLite Systems, Inc. + + OUI:0016A3* +- ID_OUI_FROM_DATABASE=Ingeteam Transmission&Distribution, S.A. ++ ID_OUI_FROM_DATABASE=INGETEAM + + OUI:0016A4* + ID_OUI_FROM_DATABASE=Ezurio Ltd +@@ -29529,7 +29529,7 @@ OUI:0025C9* + ID_OUI_FROM_DATABASE=SHENZHEN HUAPU DIGITAL CO., LTD + + OUI:0025CA* +- ID_OUI_FROM_DATABASE=LS Research, LLC ++ ID_OUI_FROM_DATABASE=Laird Connectivity + + OUI:0025CB* + ID_OUI_FROM_DATABASE=Reiner SCT +@@ -29700,7 +29700,7 @@ OUI:002603* + ID_OUI_FROM_DATABASE=Shenzhen Wistar Technology Co., Ltd + + OUI:002604* +- ID_OUI_FROM_DATABASE=Audio Processing Technology Ltd ++ ID_OUI_FROM_DATABASE=WorldCast Systems + + OUI:002605* + ID_OUI_FROM_DATABASE=CC Systems AB +@@ -35768,6 +35768,9 @@ OUI:009569* + OUI:0097FF* + ID_OUI_FROM_DATABASE=Heimann Sensor GmbH + ++OUI:00991D* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:009ACD* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -36563,6 +36566,9 @@ OUI:00A0FF* + OUI:00A1DE* + ID_OUI_FROM_DATABASE=ShenZhen ShiHua Technology CO.,LTD + ++OUI:00A265* ++ ID_OUI_FROM_DATABASE=M2Motive Technology Inc. ++ + OUI:00A289* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -36593,6 +36599,9 @@ OUI:00A45F* + OUI:00A509* + ID_OUI_FROM_DATABASE=WigWag Inc. + ++OUI:00A554* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:00A5BF* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -37694,6 +37703,9 @@ OUI:00CB00* + OUI:00CB51* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:00CB7A* ++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. ++ + OUI:00CBB4* + ID_OUI_FROM_DATABASE=SHENZHEN ATEKO PHOTOELECTRICITY CO.,LTD + +@@ -38507,6 +38519,9 @@ OUI:00D318* + OUI:00D38D* + ID_OUI_FROM_DATABASE=Hotel Technology Next Generation + ++OUI:00D49E* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:00D632* + ID_OUI_FROM_DATABASE=GE Energy + +@@ -39401,6 +39416,9 @@ OUI:00E421* + OUI:00E5E4* + ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD + ++OUI:00E5F1* ++ ID_OUI_FROM_DATABASE=BUFFALO.INC ++ + OUI:00E666* + ID_OUI_FROM_DATABASE=ARIMA Communications Corp. + +@@ -39728,6 +39746,9 @@ OUI:0425C5* + OUI:0425E0* + ID_OUI_FROM_DATABASE=Taicang T&W Electronics + ++OUI:0425F0* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:042605* + ID_OUI_FROM_DATABASE=GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH + +@@ -39932,6 +39953,9 @@ OUI:046273* + OUI:0462D7* + ID_OUI_FROM_DATABASE=ALSTOM HYDRO FRANCE + ++OUI:0463D0* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:0463E0* + ID_OUI_FROM_DATABASE=Nome Oy + +@@ -39944,6 +39968,9 @@ OUI:046785* + OUI:046865* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:04698F* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:0469F8* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -40061,6 +40088,9 @@ OUI:047AAE* + OUI:047BCB* + ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd. + ++OUI:047C16* ++ ID_OUI_FROM_DATABASE=Micro-Star INTL CO., LTD. ++ + OUI:047D50* + ID_OUI_FROM_DATABASE=Shenzhen Kang Ying Technology Co.Ltd. + +@@ -40151,6 +40181,9 @@ OUI:0498F3* + OUI:0499B9* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:0499BB* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:0499E6* + ID_OUI_FROM_DATABASE=Shenzhen Yoostar Technology Co., Ltd + +@@ -40226,9 +40259,15 @@ OUI:04B466* + OUI:04B648* + ID_OUI_FROM_DATABASE=ZENNER + ++OUI:04B6BE* ++ ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD ++ + OUI:04B86A* + ID_OUI_FROM_DATABASE=BSkyB Ltd + ++OUI:04B97D* ++ ID_OUI_FROM_DATABASE=AiVIS Co., Itd. ++ + OUI:04B9E3* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -40241,12 +40280,18 @@ OUI:04BA36* + OUI:04BA8D* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:04BAD6* ++ ID_OUI_FROM_DATABASE=D-Link Corporation ++ + OUI:04BBF9* + ID_OUI_FROM_DATABASE=Pavilion Data Systems Inc + + OUI:04BC87* + ID_OUI_FROM_DATABASE=Shenzhen JustLink Technology Co., LTD + ++OUI:04BC9F* ++ ID_OUI_FROM_DATABASE=Calix Inc. ++ + OUI:04BD70* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -40517,6 +40562,9 @@ OUI:04E229* + OUI:04E2F8* + ID_OUI_FROM_DATABASE=AEP Ticketing solutions srl + ++OUI:04E31A* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:04E451* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -40547,6 +40595,9 @@ OUI:04E77E* + OUI:04E795* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:04E892* ++ ID_OUI_FROM_DATABASE=SHENNAN CIRCUITS CO.,LTD ++ + OUI:04E9E5* + ID_OUI_FROM_DATABASE=PJRC.COM, LLC + +@@ -41274,7 +41325,7 @@ OUI:0826AE9* + ID_OUI_FROM_DATABASE=Annapurna labs + + OUI:0826AEA* +- ID_OUI_FROM_DATABASE=Flextronics International Kft. ++ ID_OUI_FROM_DATABASE=Flextronics International Kft + + OUI:0826AEB* + ID_OUI_FROM_DATABASE=F-Plus Mobile LLC +@@ -41318,6 +41369,9 @@ OUI:082FE9* + OUI:08306B* + ID_OUI_FROM_DATABASE=Palo Alto Networks + ++OUI:0830CE* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:08318B* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -41432,6 +41486,9 @@ OUI:084FA9* + OUI:084FF9* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:085104* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:085114* + ID_OUI_FROM_DATABASE=QINGDAO TOPSCOMM COMMUNICATION CO., LTD + +@@ -41891,6 +41948,9 @@ OUI:08E4DF* + OUI:08E5DA* + ID_OUI_FROM_DATABASE=NANJING FUJITSU COMPUTER PRODUCTS CO.,LTD. + ++OUI:08E63B* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:08E672* + ID_OUI_FROM_DATABASE=JEBSEE ELECTRONICS CO.,LTD. + +@@ -41921,6 +41981,9 @@ OUI:08EB74* + OUI:08EBED* + ID_OUI_FROM_DATABASE=World Elite Technology Co.,LTD + ++OUI:08EBF6* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:08ECA9* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -42521,12 +42584,18 @@ OUI:0C771A* + OUI:0C7A15* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:0C7BC8* ++ ID_OUI_FROM_DATABASE=Cisco Meraki ++ + OUI:0C7C28* + ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG + + OUI:0C7D7C* + ID_OUI_FROM_DATABASE=Kexiang Information Technology Co, Ltd. + ++OUI:0C7FB2* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:0C8063* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -42575,6 +42644,54 @@ OUI:0C8525* + OUI:0C8610* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:0C86290* ++ ID_OUI_FROM_DATABASE=Shanghai Prophet Electronic Technology Co.,Ltd ++ ++OUI:0C86291* ++ ID_OUI_FROM_DATABASE=Beijing Qinmu Data Technology Co., Ltd. ++ ++OUI:0C86292* ++ ID_OUI_FROM_DATABASE=BADA SYSTEM co., Ltd ++ ++OUI:0C86293* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:0C86294* ++ ID_OUI_FROM_DATABASE=Ag Express Electronics ++ ++OUI:0C86295* ++ ID_OUI_FROM_DATABASE=Shenzhen protostellar technology Co., Ltd ++ ++OUI:0C86296* ++ ID_OUI_FROM_DATABASE=C&A Marketing, INC. ++ ++OUI:0C86297* ++ ID_OUI_FROM_DATABASE=HagerEnergy GmbH ++ ++OUI:0C86298* ++ ID_OUI_FROM_DATABASE=MyGregor Ltd ++ ++OUI:0C86299* ++ ID_OUI_FROM_DATABASE=HONGKONG SAINT TECH INDUSTRIAL LIMITED ++ ++OUI:0C8629A* ++ ID_OUI_FROM_DATABASE=Nipron Co.,Ltd ++ ++OUI:0C8629B* ++ ID_OUI_FROM_DATABASE=Akribis Systems ++ ++OUI:0C8629C* ++ ID_OUI_FROM_DATABASE=SHENZHEN YINGMU TECHNOLOGY.,LTD ++ ++OUI:0C8629D* ++ ID_OUI_FROM_DATABASE=BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD ++ ++OUI:0C8629E* ++ ID_OUI_FROM_DATABASE=FX TECHNOLOGY LIMITED ++ ++OUI:0C86C7* ++ ID_OUI_FROM_DATABASE=Jabil Circuit (Guangzhou) Limited ++ + OUI:0C8910* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -42584,6 +42701,9 @@ OUI:0C8A87* + OUI:0C8B7D* + ID_OUI_FROM_DATABASE=Vizio, Inc + ++OUI:0C8B95* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:0C8BD3* + ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED + +@@ -42647,6 +42767,9 @@ OUI:0C96CD* + OUI:0C96E6* + ID_OUI_FROM_DATABASE=Cloud Network Technology (Samoa) Limited + ++OUI:0C975F* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:0C9838* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -42695,6 +42818,9 @@ OUI:0CAAEE* + OUI:0CAC05* + ID_OUI_FROM_DATABASE=Unitend Technologies Inc. + ++OUI:0CAC8A* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:0CAE7D* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -43127,6 +43253,9 @@ OUI:100645* + OUI:1006ED* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:10071D* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:1007230* + ID_OUI_FROM_DATABASE=RippleTek Tech Ltd + +@@ -43274,6 +43403,9 @@ OUI:101F74* + OUI:102279* + ID_OUI_FROM_DATABASE=ZeroDesktop, Inc. + ++OUI:102407* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:102779* + ID_OUI_FROM_DATABASE=Sadel S.p.A. + +@@ -43436,6 +43568,9 @@ OUI:104A7D* + OUI:104B46* + ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation + ++OUI:104D15* ++ ID_OUI_FROM_DATABASE=Viaanix Inc ++ + OUI:104D77* + ID_OUI_FROM_DATABASE=Innovative Computer Engineering + +@@ -43466,6 +43601,12 @@ OUI:10521C* + OUI:105403* + ID_OUI_FROM_DATABASE=INTARSO GmbH + ++OUI:1054D20* ++ ID_OUI_FROM_DATABASE=GIPS Technology Co., Ltd. ++ ++OUI:1054D21* ++ ID_OUI_FROM_DATABASE=Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd. ++ + OUI:1054D22* + ID_OUI_FROM_DATABASE=ComNav Technology Ltd. + +@@ -43475,6 +43616,12 @@ OUI:1054D23* + OUI:1054D24* + ID_OUI_FROM_DATABASE=Raylogic Control Systems Private Limited + ++OUI:1054D25* ++ ID_OUI_FROM_DATABASE=Sybersense ++ ++OUI:1054D26* ++ ID_OUI_FROM_DATABASE=Lanao Communication Technology Limited ++ + OUI:1054D27* + ID_OUI_FROM_DATABASE=SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD + +@@ -43484,6 +43631,9 @@ OUI:1054D28* + OUI:1054D29* + ID_OUI_FROM_DATABASE=Bamboo Dynamics Corporation., Ltd. + ++OUI:1054D2A* ++ ID_OUI_FROM_DATABASE=Embion B.V. ++ + OUI:1054D2B* + ID_OUI_FROM_DATABASE=Shenzhen Dinstech Technology Co.,Ltd. + +@@ -43493,6 +43643,9 @@ OUI:1054D2C* + OUI:1054D2D* + ID_OUI_FROM_DATABASE=Sun wealth technology corporation limited + ++OUI:1054D2E* ++ ID_OUI_FROM_DATABASE=COSMO AIOT TECHNOLOGY CO LTD ++ + OUI:1055E4* + ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd + +@@ -43553,6 +43706,9 @@ OUI:1062E5* + OUI:1062EB* + ID_OUI_FROM_DATABASE=D-Link International + ++OUI:10634B* ++ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++ + OUI:1063C8* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -43589,6 +43745,9 @@ OUI:1070FD* + OUI:107100* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:1071B3* ++ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation ++ + OUI:1071F9* + ID_OUI_FROM_DATABASE=Cloud Telecomputers, LLC + +@@ -43706,6 +43865,9 @@ OUI:1094BB* + OUI:10954B* + ID_OUI_FROM_DATABASE=Megabyte Ltd. + ++OUI:10961A* ++ ID_OUI_FROM_DATABASE=CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. ++ + OUI:109693* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -43757,6 +43919,9 @@ OUI:10A4DA* + OUI:10A51D* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:10A562* ++ ID_OUI_FROM_DATABASE=Iton Technology Corp. ++ + OUI:10A5D0* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. + +@@ -43784,6 +43949,9 @@ OUI:10B1DF* + OUI:10B1F8* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:10B232* ++ ID_OUI_FROM_DATABASE=Qingdao Intelligent&Precise Electronics Co.,Ltd. ++ + OUI:10B26B* + ID_OUI_FROM_DATABASE=base Co.,Ltd. + +@@ -43940,6 +44108,9 @@ OUI:10D7B0* + OUI:10DA43* + ID_OUI_FROM_DATABASE=NETGEAR + ++OUI:10DA49* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:10DC4A* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + +@@ -44003,6 +44174,9 @@ OUI:10DF8B* + OUI:10DFFC* + ID_OUI_FROM_DATABASE=Siemens AG + ++OUI:10E177* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:10E2D5* + ID_OUI_FROM_DATABASE=Qi Hardware Inc. + +@@ -44051,6 +44225,9 @@ OUI:10EED9* + OUI:10F005* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:10F068* ++ ID_OUI_FROM_DATABASE=Ruckus Wireless ++ + OUI:10F163* + ID_OUI_FROM_DATABASE=TNK CO.,LTD + +@@ -44069,6 +44246,9 @@ OUI:10F49A* + OUI:10F605* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + ++OUI:10F60A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:10F681* + ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. + +@@ -44165,6 +44345,9 @@ OUI:141114* + OUI:14115D* + ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd + ++OUI:14130B* ++ ID_OUI_FROM_DATABASE=Garmin International ++ + OUI:141330* + ID_OUI_FROM_DATABASE=Anakreon UK LLP + +@@ -44318,6 +44501,9 @@ OUI:142C78* + OUI:142D27* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:142D4D* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:142D8B* + ID_OUI_FROM_DATABASE=Incipio Technologies, Inc + +@@ -44405,6 +44591,9 @@ OUI:144319* + OUI:14444A* + ID_OUI_FROM_DATABASE=Apollo Seiko Ltd. + ++OUI:14448F* ++ ID_OUI_FROM_DATABASE=Edgecore Networks Corporation ++ + OUI:144658* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -44546,6 +44735,9 @@ OUI:145A83* + OUI:145AFC* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + ++OUI:145BB9* ++ ID_OUI_FROM_DATABASE=ConMet ++ + OUI:145BD1* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -44603,6 +44795,9 @@ OUI:147373* + OUI:147411* + ID_OUI_FROM_DATABASE=RIM + ++OUI:14755B* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:147590* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -44693,6 +44888,9 @@ OUI:14942F* + OUI:149448* + ID_OUI_FROM_DATABASE=BLU CASTLE S.A. + ++OUI:14946C* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:1495CE* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -44717,6 +44915,9 @@ OUI:149B2F* + OUI:149BD7* + ID_OUI_FROM_DATABASE=MULI MUWAI FURNITURE QIDONG CO., LTD + ++OUI:149BF3* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:149D09* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -45023,12 +45224,18 @@ OUI:14EFCF* + OUI:14F0C5* + ID_OUI_FROM_DATABASE=Xtremio Ltd. + ++OUI:14F287* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:14F28E* + ID_OUI_FROM_DATABASE=ShenYang ZhongKe-Allwin Technology Co.LTD + + OUI:14F42A* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:14F592* ++ ID_OUI_FROM_DATABASE=Shenzhen SDG DONZHI Technology Co., Ltd ++ + OUI:14F65A* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -45242,6 +45449,9 @@ OUI:18339D* + OUI:183451* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:1834AF* ++ ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD. ++ + OUI:1835D1* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -45278,6 +45488,9 @@ OUI:183A48* + OUI:183BD2* + ID_OUI_FROM_DATABASE=BYD Precision Manufacture Company Ltd. + ++OUI:183C98* ++ ID_OUI_FROM_DATABASE=Shenzhen Hengyi Technology Co., LTD ++ + OUI:183CB7* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -45518,6 +45731,9 @@ OUI:1866DA* + OUI:1866E3* + ID_OUI_FROM_DATABASE=Veros Systems, Inc. + ++OUI:1866F0* ++ ID_OUI_FROM_DATABASE=Jupiter Systems ++ + OUI:18673F* + ID_OUI_FROM_DATABASE=Hanover Displays Limited + +@@ -45536,6 +45752,9 @@ OUI:186882* + OUI:1868CB* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + ++OUI:1869D4* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:1869D8* + ID_OUI_FROM_DATABASE=Tuya Smart Inc. + +@@ -45806,6 +46025,51 @@ OUI:18A3E8* + OUI:18A4A9* + ID_OUI_FROM_DATABASE=Vanu Inc. + ++OUI:18A59C0* ++ ID_OUI_FROM_DATABASE=Omwave ++ ++OUI:18A59C1* ++ ID_OUI_FROM_DATABASE=Cuman ++ ++OUI:18A59C2* ++ ID_OUI_FROM_DATABASE=Actiontec Electronics Inc. ++ ++OUI:18A59C3* ++ ID_OUI_FROM_DATABASE=Beijing QS Medical Technology Co., Ltd. ++ ++OUI:18A59C4* ++ ID_OUI_FROM_DATABASE=IT-1 ++ ++OUI:18A59C5* ++ ID_OUI_FROM_DATABASE=Thermia AB ++ ++OUI:18A59C6* ++ ID_OUI_FROM_DATABASE=INTEGRAL PLUS ++ ++OUI:18A59C7* ++ ID_OUI_FROM_DATABASE=ePower Network Solution Co., Ltd. ++ ++OUI:18A59C8* ++ ID_OUI_FROM_DATABASE=Residence Control Ltd ++ ++OUI:18A59C9* ++ ID_OUI_FROM_DATABASE=estun automation co.,ltd ++ ++OUI:18A59CA* ++ ID_OUI_FROM_DATABASE=Erba Lachema s.r.o. ++ ++OUI:18A59CB* ++ ID_OUI_FROM_DATABASE=CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA ++ ++OUI:18A59CC* ++ ID_OUI_FROM_DATABASE=BlueEyes Technology ++ ++OUI:18A59CD* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:18A59CE* ++ ID_OUI_FROM_DATABASE=BMC Messsysteme GmbH ++ + OUI:18A6F7* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -45860,6 +46124,9 @@ OUI:18AF9F* + OUI:18B169* + ID_OUI_FROM_DATABASE=Sonicwall + ++OUI:18B185* ++ ID_OUI_FROM_DATABASE=Qiao Information Technology (Zhengzhou) Co., Ltd. ++ + OUI:18B209* + ID_OUI_FROM_DATABASE=Torrey Pines Logic, Inc + +@@ -45890,12 +46157,18 @@ OUI:18B905* + OUI:18B96E* + ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd. + ++OUI:18BB1C* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:18BB26* + ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED + + OUI:18BB41* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:18BC57* ++ ID_OUI_FROM_DATABASE=ADVA Optical Networking Ltd. ++ + OUI:18BC5A* + ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd. + +@@ -45911,6 +46184,9 @@ OUI:18BF1C* + OUI:18BFB3* + ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd., Memory Division + ++OUI:18C007* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:18C04D* + ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. + +@@ -46169,6 +46445,9 @@ OUI:18FC26* + OUI:18FC9F* + ID_OUI_FROM_DATABASE=Changhe Electronics Co., Ltd. + ++OUI:18FD74* ++ ID_OUI_FROM_DATABASE=Routerboard.com ++ + OUI:18FDCB0* + ID_OUI_FROM_DATABASE=Shenzhen Rui jiali Electronic Technology Co. Ltd. + +@@ -46244,6 +46523,9 @@ OUI:1C08C1* + OUI:1C0B52* + ID_OUI_FROM_DATABASE=EPICOM S.A + ++OUI:1C0D7D* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:1C0FAF* + ID_OUI_FROM_DATABASE=Lucid Vision Labs + +@@ -46514,6 +46796,9 @@ OUI:1C45C2* + OUI:1C472F* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:1C47F6* ++ ID_OUI_FROM_DATABASE=Zhidao Network Technology(Shenzhen) Co.,Ltd ++ + OUI:1C4840* + ID_OUI_FROM_DATABASE=IMS Messsysteme GmbH + +@@ -46580,6 +46865,51 @@ OUI:1C57D8* + OUI:1C57DC* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:1C59740* ++ ID_OUI_FROM_DATABASE=Shenzhen Hanshine Technology Co.Ltd. ++ ++OUI:1C59741* ++ ID_OUI_FROM_DATABASE=Logical Infrastructure PTY LTD ++ ++OUI:1C59742* ++ ID_OUI_FROM_DATABASE=Chongqing Taishan Cable Co., Ltd ++ ++OUI:1C59743* ++ ID_OUI_FROM_DATABASE=Jiangsu Welm Technology Co.,Ltd ++ ++OUI:1C59744* ++ ID_OUI_FROM_DATABASE=Syntax technology(tianjin)Co.,LTD ++ ++OUI:1C59745* ++ ID_OUI_FROM_DATABASE=Shenzhen Shi Fang Communication Technology Co., Ltd ++ ++OUI:1C59746* ++ ID_OUI_FROM_DATABASE=Square Inc. ++ ++OUI:1C59747* ++ ID_OUI_FROM_DATABASE=Lynxi Technologies Co.,Ltd. ++ ++OUI:1C59748* ++ ID_OUI_FROM_DATABASE=Topway Global Technology Limited ++ ++OUI:1C59749* ++ ID_OUI_FROM_DATABASE=Shanghai Laisi Information Technology Co.,Ltd ++ ++OUI:1C5974A* ++ ID_OUI_FROM_DATABASE=Council Rock ++ ++OUI:1C5974B* ++ ID_OUI_FROM_DATABASE=Beijing Flintec Electronic Technology Co.,Ltd. ++ ++OUI:1C5974C* ++ ID_OUI_FROM_DATABASE=King-On Technology Ltd. ++ ++OUI:1C5974D* ++ ID_OUI_FROM_DATABASE=Shenzhen Geshem Technology Co Ltd ++ ++OUI:1C5974E* ++ ID_OUI_FROM_DATABASE=Globe Tracker ApS ++ + OUI:1C599B* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -46619,6 +46949,9 @@ OUI:1C60D2* + OUI:1C60DE* + ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. + ++OUI:1C61B4* ++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited ++ + OUI:1C62B8* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -46700,6 +47033,9 @@ OUI:1C7508* + OUI:1C76CA* + ID_OUI_FROM_DATABASE=Terasic Technologies Inc. + ++OUI:1C76F2* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:1C77F6* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + +@@ -47168,6 +47504,9 @@ OUI:1CA0EFE* + OUI:1CA2B1* + ID_OUI_FROM_DATABASE=ruwido austria gmbh + ++OUI:1CA410* ++ ID_OUI_FROM_DATABASE=Amlogic, Inc. ++ + OUI:1CA532* + ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT + +@@ -47249,6 +47588,9 @@ OUI:1CAECB* + OUI:1CAF05* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:1CAF4A* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:1CAFF7* + ID_OUI_FROM_DATABASE=D-Link International + +@@ -47288,6 +47630,9 @@ OUI:1CBA8C* + OUI:1CBBA8* + ID_OUI_FROM_DATABASE=OJSC Ufimskiy Zavod Promsvyaz + ++OUI:1CBCEC* ++ ID_OUI_FROM_DATABASE=silex technology, Inc. ++ + OUI:1CBD0E* + ID_OUI_FROM_DATABASE=Amplified Engineering Pty Ltd + +@@ -47618,6 +47963,9 @@ OUI:200505* + OUI:2005E8* + ID_OUI_FROM_DATABASE=OOO InProMedia + ++OUI:200889* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:2008ED* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -47669,6 +48017,9 @@ OUI:200A0DE* + OUI:200A5E* + ID_OUI_FROM_DATABASE=Xiangshan Giant Eagle Technology Developing Co., Ltd. + ++OUI:200B16* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:200BC7* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -47978,6 +48329,9 @@ OUI:206432* + OUI:2064CB* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + ++OUI:2064DE* ++ ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd ++ + OUI:20658E* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -48158,9 +48512,15 @@ OUI:208984* + OUI:208986* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:20898A* ++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd ++ + OUI:208B37* + ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd + ++OUI:208BD1* ++ ID_OUI_FROM_DATABASE=NXP Semiconductor (Tianjin) LTD. ++ + OUI:208C47* + ID_OUI_FROM_DATABASE=Tenstorrent Inc + +@@ -48545,6 +48905,9 @@ OUI:20F85E* + OUI:20FABB* + ID_OUI_FROM_DATABASE=Cambridge Executive Limited + ++OUI:20FADB* ++ ID_OUI_FROM_DATABASE=Huahao Kunpeng Technology (chengDu) Co.,Ltd. ++ + OUI:20FDF1* + ID_OUI_FROM_DATABASE=3COM EUROPE LTD + +@@ -48584,6 +48947,9 @@ OUI:2405F5* + OUI:2406AA* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + ++OUI:2406F2* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:24085D* + ID_OUI_FROM_DATABASE=Continental Aftermarket & Services GmbH + +@@ -48626,6 +48992,9 @@ OUI:240D6C* + OUI:240DC2* + ID_OUI_FROM_DATABASE=TCT mobile ltd + ++OUI:240F5E* ++ ID_OUI_FROM_DATABASE=Shenzhen z-router Technology Co., Ltd ++ + OUI:240F9B* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + +@@ -48704,6 +49073,9 @@ OUI:24169D* + OUI:24181D* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + ++OUI:2418C0* ++ ID_OUI_FROM_DATABASE=E. Wehrle GmbH ++ + OUI:2418C6* + ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED + +@@ -48737,6 +49109,9 @@ OUI:241F2C* + OUI:241FA0* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:241FBD* ++ ID_OUI_FROM_DATABASE=Extreme Networks, Inc. ++ + OUI:2420C7* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + +@@ -48755,12 +49130,18 @@ OUI:242642* + OUI:2426BA* + ID_OUI_FROM_DATABASE=Shenzhen Toptel Technology Co., Ltd. + ++OUI:2426D6* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:2428FD* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + + OUI:2429FE* + ID_OUI_FROM_DATABASE=KYOCERA Corporation + ++OUI:242CFE* ++ ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd. ++ + OUI:242E02* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -49046,6 +49427,9 @@ OUI:2469A5* + OUI:246AAB* + ID_OUI_FROM_DATABASE=IT-IS International + ++OUI:246C60* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:246C8A* + ID_OUI_FROM_DATABASE=YUKAI Engineering + +@@ -49070,6 +49454,9 @@ OUI:247260* + OUI:2474F7* + ID_OUI_FROM_DATABASE=GoPro + ++OUI:24753A* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:247625* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -49346,6 +49733,9 @@ OUI:24CE33* + OUI:24CF21* + ID_OUI_FROM_DATABASE=Shenzhen State Micro Technology Co., Ltd + ++OUI:24CF24* ++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd ++ + OUI:24D0DF* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -49445,6 +49835,9 @@ OUI:24EA40* + OUI:24EB65* + ID_OUI_FROM_DATABASE=SAET I.S. S.r.l. + ++OUI:24EBED* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:24EC51* + ID_OUI_FROM_DATABASE=ADF Technologies Sdn Bhd + +@@ -49580,6 +49973,9 @@ OUI:2811A8* + OUI:2811EC* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:281293* ++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. ++ + OUI:281471* + ID_OUI_FROM_DATABASE=Lantis co., LTD. + +@@ -49856,6 +50252,12 @@ OUI:283B96* + OUI:283CE4* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:283DC2* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ ++OUI:283E0C* ++ ID_OUI_FROM_DATABASE=Preferred Robotics, Inc. ++ + OUI:283E76* + ID_OUI_FROM_DATABASE=Common Networks + +@@ -49976,6 +50378,9 @@ OUI:286AB8* + OUI:286ABA* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:286B35* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:286C07* + ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD + +@@ -49988,6 +50393,9 @@ OUI:286DCD* + OUI:286ED4* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:286F40* ++ ID_OUI_FROM_DATABASE=Tonly Technology Co. Ltd ++ + OUI:286F7F* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -50000,6 +50408,9 @@ OUI:2872C5* + OUI:2872F0* + ID_OUI_FROM_DATABASE=ATHENA + ++OUI:2874F5* ++ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG ++ + OUI:2875D8* + ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD + +@@ -50039,6 +50450,9 @@ OUI:288088* + OUI:2880A2* + ID_OUI_FROM_DATABASE=Novatel Wireless Solutions, Inc. + ++OUI:28827C* ++ ID_OUI_FROM_DATABASE=Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++ + OUI:288335* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -50135,6 +50549,12 @@ OUI:28A241* + OUI:28A24B* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:28A331* ++ ID_OUI_FROM_DATABASE=Sierra Wireless ++ ++OUI:28A53F* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:28A574* + ID_OUI_FROM_DATABASE=Miller Electric Mfg. Co. + +@@ -50255,6 +50675,9 @@ OUI:28BD89* + OUI:28BE03* + ID_OUI_FROM_DATABASE=TCT mobile ltd + ++OUI:28BE43* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:28BE9B* + ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. + +@@ -50330,6 +50753,9 @@ OUI:28CD4C* + OUI:28CD9C* + ID_OUI_FROM_DATABASE=Shenzhen Dynamax Software Development Co.,Ltd. + ++OUI:28CDC1* ++ ID_OUI_FROM_DATABASE=Raspberry Pi Trading Ltd ++ + OUI:28CDC4* + ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD. + +@@ -50537,9 +50963,15 @@ OUI:28F537D* + OUI:28F537E* + ID_OUI_FROM_DATABASE=Performance Motion Devices + ++OUI:28F5D1* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:28F606* + ID_OUI_FROM_DATABASE=Syes srl + ++OUI:28F7D6* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:28FA19* + ID_OUI_FROM_DATABASE=Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd + +@@ -50660,6 +51092,9 @@ OUI:2C073C* + OUI:2C0786* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:2C07F6* ++ ID_OUI_FROM_DATABASE=SKG Health Technologies Co., Ltd. ++ + OUI:2C081C* + ID_OUI_FROM_DATABASE=OVH + +@@ -50990,6 +51425,9 @@ OUI:2C3AE8* + OUI:2C3AFD* + ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH + ++OUI:2C3B70* ++ ID_OUI_FROM_DATABASE=AzureWave Technology Inc. ++ + OUI:2C3BFD* + ID_OUI_FROM_DATABASE=Netstor Technology Co., Ltd. + +@@ -51129,7 +51567,7 @@ OUI:2C54CF* + ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications) + + OUI:2C553C* +- ID_OUI_FROM_DATABASE=Gainspeed, Inc. ++ ID_OUI_FROM_DATABASE=Vecima Networks Inc. + + OUI:2C557C* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd +@@ -51188,6 +51626,9 @@ OUI:2C5FF3* + OUI:2C600C* + ID_OUI_FROM_DATABASE=Quanta Computer Inc. + ++OUI:2C60CD* ++ ID_OUI_FROM_DATABASE=NR ELECTRIC CO., LTD ++ + OUI:2C6104* + ID_OUI_FROM_DATABASE=SHENZHEN FENGLIAN TECHNOLOGY CO., LTD. + +@@ -51335,6 +51776,9 @@ OUI:2C8065* + OUI:2C8158* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:2C8217* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:2C86D2* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -51386,6 +51830,9 @@ OUI:2C9AA4* + OUI:2C9D1E* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:2C9D65* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:2C9E5F* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -51428,6 +51875,9 @@ OUI:2CA59C* + OUI:2CA780* + ID_OUI_FROM_DATABASE=True Technologies Inc. + ++OUI:2CA79E* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:2CA835* + ID_OUI_FROM_DATABASE=RIM + +@@ -51629,6 +52079,9 @@ OUI:2CD974* + OUI:2CDB07* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:2CDC78* ++ ID_OUI_FROM_DATABASE=Descartes Systems (USA) LLC ++ + OUI:2CDCAD* + ID_OUI_FROM_DATABASE=Wistron Neweb Corporation + +@@ -51713,6 +52166,9 @@ OUI:2CF89B* + OUI:2CFAA2* + ID_OUI_FROM_DATABASE=Alcatel-Lucent Enterprise + ++OUI:2CFC8B* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:2CFCE4* + ID_OUI_FROM_DATABASE=CTEK Sweden AB + +@@ -51740,6 +52196,9 @@ OUI:2CFFEE* + OUI:3003C8* + ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + ++OUI:30045C* ++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd. ++ + OUI:30053F* + ID_OUI_FROM_DATABASE=JTI Co.,Ltd. + +@@ -51980,6 +52439,9 @@ OUI:302952* + OUI:3029BE* + ID_OUI_FROM_DATABASE=Shanghai MRDcom Co.,Ltd + ++OUI:302BDC* ++ ID_OUI_FROM_DATABASE=Top-Unum Electronics Co., LTD ++ + OUI:302DE8* + ID_OUI_FROM_DATABASE=JDA, LLC (JDA Systems) + +@@ -52040,9 +52502,15 @@ OUI:303ABA* + OUI:303D08* + ID_OUI_FROM_DATABASE=GLINTT TES S.A. + ++OUI:303EA7* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:303EAD* + ID_OUI_FROM_DATABASE=Sonavox Canada Inc + ++OUI:303F5D* ++ ID_OUI_FROM_DATABASE=PT HAN SUNG ELECTORONICS INDONESIA ++ + OUI:303F7B* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd + +@@ -52061,6 +52529,51 @@ OUI:304240* + OUI:3042A1* + ID_OUI_FROM_DATABASE=ilumisys Inc. DBA Toggled + ++OUI:3043D70* ++ ID_OUI_FROM_DATABASE=SYMES SA ++ ++OUI:3043D71* ++ ID_OUI_FROM_DATABASE=Shenzhen juduoping Technology Co.,Ltd ++ ++OUI:3043D72* ++ ID_OUI_FROM_DATABASE=Apollo Infoways Private Limited ++ ++OUI:3043D73* ++ ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD ++ ++OUI:3043D74* ++ ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC ++ ++OUI:3043D75* ++ ID_OUI_FROM_DATABASE=Shenzhen Mees Hi-Tech Co., Ltd ++ ++OUI:3043D76* ++ ID_OUI_FROM_DATABASE=Sprocomm Technologies Co., Ltd.Guangming Branch ++ ++OUI:3043D77* ++ ID_OUI_FROM_DATABASE=DIGICITI Technology Co.,Ltd ++ ++OUI:3043D78* ++ ID_OUI_FROM_DATABASE=Kesu (Shanghai) Electronic Technology Co., Ltd ++ ++OUI:3043D79* ++ ID_OUI_FROM_DATABASE=PK Solutions LLC ++ ++OUI:3043D7A* ++ ID_OUI_FROM_DATABASE=Bodhi ++ ++OUI:3043D7B* ++ ID_OUI_FROM_DATABASE=Motec GmbH ++ ++OUI:3043D7C* ++ ID_OUI_FROM_DATABASE=Xiaoniu network technology (Shanghai) Co., Ltd. ++ ++OUI:3043D7D* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:3043D7E* ++ ID_OUI_FROM_DATABASE=Guangdong Hongqin Telecom Technology Co. Ltd. ++ + OUI:304449* + ID_OUI_FROM_DATABASE=PLATH GmbH + +@@ -52301,6 +52814,9 @@ OUI:307CB2* + OUI:307ECB* + ID_OUI_FROM_DATABASE=SFR + ++OUI:307F10* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:30809B* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + +@@ -52334,6 +52850,9 @@ OUI:308841* + OUI:308944* + ID_OUI_FROM_DATABASE=DEVA Broadcast Ltd. + ++OUI:30894A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:308976* + ID_OUI_FROM_DATABASE=DALIAN LAMBA TECHNOLOGY CO.,LTD + +@@ -52388,6 +52907,9 @@ OUI:3095E3* + OUI:309610* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:30963B* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:3096FB* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -52511,6 +53033,9 @@ OUI:30B930* + OUI:30B9B0* + ID_OUI_FROM_DATABASE=Intracom Asia Co., Ltd + ++OUI:30BB7D* ++ ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd ++ + OUI:30BE3B* + ID_OUI_FROM_DATABASE=Mitsubishi Electric Corporation + +@@ -52541,6 +53066,9 @@ OUI:30C82A* + OUI:30C9AB* + ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + ++OUI:30CB36* ++ ID_OUI_FROM_DATABASE=Belden Singapore Pte. Ltd. ++ + OUI:30CBC7* + ID_OUI_FROM_DATABASE=Cambium Networks Limited + +@@ -52599,7 +53127,7 @@ OUI:30DF8D* + ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT + + OUI:30E090* +- ID_OUI_FROM_DATABASE=Linctronix Ltd, ++ ID_OUI_FROM_DATABASE=Genevisio Ltd. + + OUI:30E171* + ID_OUI_FROM_DATABASE=Hewlett Packard +@@ -52625,6 +53153,9 @@ OUI:30E4DB* + OUI:30E7BC* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + ++OUI:30E8E4* ++ ID_OUI_FROM_DATABASE=Qorvo International Pte. Ltd. ++ + OUI:30E98E* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -52919,6 +53450,9 @@ OUI:34243E* + OUI:34255D* + ID_OUI_FROM_DATABASE=Shenzhen Loadcom Technology Co.,Ltd + ++OUI:3425BE* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:342606* + ID_OUI_FROM_DATABASE=CarePredict, Inc. + +@@ -53162,6 +53696,9 @@ OUI:345D10* + OUI:345D9E* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:345DA8* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:3460F9* + ID_OUI_FROM_DATABASE=TP-Link Corporation Limited + +@@ -53351,6 +53888,9 @@ OUI:348F27* + OUI:34916F* + ID_OUI_FROM_DATABASE=UserGate Ltd. + ++OUI:3492C2* ++ ID_OUI_FROM_DATABASE=Square Route Co., Ltd. ++ + OUI:349342* + ID_OUI_FROM_DATABASE=TTE Corporation + +@@ -53456,6 +53996,12 @@ OUI:34AB37* + OUI:34AB95* + ID_OUI_FROM_DATABASE=Espressif Inc. + ++OUI:34AC11* ++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. ++ ++OUI:34AD61* ++ ID_OUI_FROM_DATABASE=CELESTICA INC. ++ + OUI:34ADE4* + ID_OUI_FROM_DATABASE=Shanghai Chint Power Systems Co., Ltd. + +@@ -53513,6 +54059,9 @@ OUI:34BB26* + OUI:34BCA6* + ID_OUI_FROM_DATABASE=Beijing Ding Qing Technology, Ltd. + ++OUI:34BD20* ++ ID_OUI_FROM_DATABASE=Hangzhou Hikrobot Technology Co., Ltd. ++ + OUI:34BDC8* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -53585,6 +54134,9 @@ OUI:34CE69* + OUI:34CE94* + ID_OUI_FROM_DATABASE=Parsec (Pty) Ltd + ++OUI:34CF6C* ++ ID_OUI_FROM_DATABASE=Hangzhou Taili wireless communication equipment Co.,Ltd ++ + OUI:34CFF6* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -53675,6 +54227,9 @@ OUI:34DB9C* + OUI:34DBFD* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:34DD04* ++ ID_OUI_FROM_DATABASE=Minut AB ++ + OUI:34DD7E* + ID_OUI_FROM_DATABASE=Umeox Innovations Co.,Ltd + +@@ -53789,6 +54344,9 @@ OUI:34ED0B* + OUI:34ED1B* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:34EE2A* ++ ID_OUI_FROM_DATABASE=ConMet ++ + OUI:34EF44* + ID_OUI_FROM_DATABASE=2Wire Inc + +@@ -53936,6 +54494,9 @@ OUI:3810D5* + OUI:3810F0* + ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company + ++OUI:38127B* ++ ID_OUI_FROM_DATABASE=Crenet Labs Co., Ltd. ++ + OUI:381428* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -53984,6 +54545,51 @@ OUI:381DD9* + OUI:381EC7* + ID_OUI_FROM_DATABASE=Chipsea Technologies(Shenzhen) Corp. + ++OUI:381F260* ++ ID_OUI_FROM_DATABASE=JAESUNG INFORMATION & COMMUNICATION CO.LTD ++ ++OUI:381F261* ++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ ++OUI:381F262* ++ ID_OUI_FROM_DATABASE=Synamedia ++ ++OUI:381F263* ++ ID_OUI_FROM_DATABASE=Bosch Automotive Electronics India Pvt. Ltd. ++ ++OUI:381F264* ++ ID_OUI_FROM_DATABASE=Airmaster A/S ++ ++OUI:381F265* ++ ID_OUI_FROM_DATABASE=Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++ ++OUI:381F266* ++ ID_OUI_FROM_DATABASE=NOITAC sp. z o.o. sp.k. ++ ++OUI:381F267* ++ ID_OUI_FROM_DATABASE=RCE systems s.r.o. ++ ++OUI:381F268* ++ ID_OUI_FROM_DATABASE=Avon Protection ++ ++OUI:381F269* ++ ID_OUI_FROM_DATABASE=SMS Evoko Group AB ++ ++OUI:381F26A* ++ ID_OUI_FROM_DATABASE=Sercomm Corporation. ++ ++OUI:381F26B* ++ ID_OUI_FROM_DATABASE=Deutronic Elektronik GmbH ++ ++OUI:381F26C* ++ ID_OUI_FROM_DATABASE=Jade Bird Fire Co., Ltd. ++ ++OUI:381F26D* ++ ID_OUI_FROM_DATABASE=HWACHANG CORPORATION ++ ++OUI:381F26E* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ + OUI:381F8D* + ID_OUI_FROM_DATABASE=Tuya Smart Inc. + +@@ -54257,6 +54863,9 @@ OUI:386893* + OUI:3868A4* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD + ++OUI:3868BE* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:3868DD* + ID_OUI_FROM_DATABASE=INVENTEC CORPORATION + +@@ -54407,12 +55016,18 @@ OUI:388E7A* + OUI:388EE7* + ID_OUI_FROM_DATABASE=Fanhattan LLC + ++OUI:388F30* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:389052* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + + OUI:3890A5* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:3891B7* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:3891D5* + ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited + +@@ -54542,6 +55157,9 @@ OUI:38A9EA* + OUI:38AA3C* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD. + ++OUI:38AB41* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:38AC3D* + ID_OUI_FROM_DATABASE=Nephos Inc + +@@ -54962,6 +55580,9 @@ OUI:38FB14* + OUI:38FC98* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:38FDF5* ++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd. ++ + OUI:38FDF8* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -55202,6 +55823,9 @@ OUI:3C25D7* + OUI:3C26D5* + ID_OUI_FROM_DATABASE=Sotera Wireless + ++OUI:3C26E4* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:3C2763* + ID_OUI_FROM_DATABASE=SLE quality engineering GmbH & Co. KG + +@@ -55379,6 +56003,9 @@ OUI:3C438E* + OUI:3C457A* + ID_OUI_FROM_DATABASE=BSkyB Ltd + ++OUI:3C4645* ++ ID_OUI_FROM_DATABASE=Shanghai Infinity Wireless Technologies Co.,Ltd. ++ + OUI:3C46D8* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -55493,6 +56120,9 @@ OUI:3C678C* + OUI:3C6816* + ID_OUI_FROM_DATABASE=VXi Corporation + ++OUI:3C69D1* ++ ID_OUI_FROM_DATABASE=ADC Automotive Distance Control System GmbH ++ + OUI:3C6A2C0* + ID_OUI_FROM_DATABASE=Rio Lago Technologies LLC + +@@ -55613,6 +56243,9 @@ OUI:3C80AA* + OUI:3C81D8* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:3C82C0* ++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. ++ + OUI:3C831E* + ID_OUI_FROM_DATABASE=CKD Corporation + +@@ -55898,6 +56531,9 @@ OUI:3CCD5D* + OUI:3CCD93* + ID_OUI_FROM_DATABASE=LG ELECTRONICS INC + ++OUI:3CCE0D* ++ ID_OUI_FROM_DATABASE=Shenzhen juduoping Technology Co.,Ltd ++ + OUI:3CCE15* + ID_OUI_FROM_DATABASE=Mercedes-Benz USA, LLC + +@@ -56237,6 +56873,9 @@ OUI:401C83* + OUI:401D59* + ID_OUI_FROM_DATABASE=Biometric Associates, LP + ++OUI:402230* ++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd. ++ + OUI:4022ED* + ID_OUI_FROM_DATABASE=Digital Projection Ltd + +@@ -56339,9 +56978,15 @@ OUI:40331A* + OUI:40336C* + ID_OUI_FROM_DATABASE=Godrej & Boyce Mfg. co. ltd + ++OUI:4035E6* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:4037AD* + ID_OUI_FROM_DATABASE=Macro Image Technology, Inc. + ++OUI:403B7B* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:403CFC* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -56372,6 +57017,9 @@ OUI:404101* + OUI:404229* + ID_OUI_FROM_DATABASE=Layer3TV, Inc + ++OUI:404244* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:4044FD* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + +@@ -56654,6 +57302,9 @@ OUI:408C4C* + OUI:408D5C* + ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. + ++OUI:408EDF* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:408F9D* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -56798,6 +57449,9 @@ OUI:40AC8D* + OUI:40ACBF* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + ++OUI:40B02F* ++ ID_OUI_FROM_DATABASE=Miele & Cie. KG ++ + OUI:40B034* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -56963,6 +57617,9 @@ OUI:40D63C* + OUI:40D855* + ID_OUI_FROM_DATABASE=IEEE Registration Authority + ++OUI:40D95A* ++ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc. ++ + OUI:40DC9D* + ID_OUI_FROM_DATABASE=HAJEN + +@@ -57341,6 +57998,9 @@ OUI:4427F3* + OUI:4428A3* + ID_OUI_FROM_DATABASE=Jiangsu fulian Communication Technology Co., Ltd. + ++OUI:44291E* ++ ID_OUI_FROM_DATABASE=AltoBeam (China) Inc. ++ + OUI:442938* + ID_OUI_FROM_DATABASE=NietZsche enterprise Co.Ltd. + +@@ -57362,6 +58022,9 @@ OUI:443192* + OUI:44322A* + ID_OUI_FROM_DATABASE=Avaya Inc + ++OUI:4432C2* ++ ID_OUI_FROM_DATABASE=GOAL Co., Ltd. ++ + OUI:4432C8* + ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. + +@@ -57405,7 +58068,7 @@ OUI:443C88* + ID_OUI_FROM_DATABASE=FICOSA MAROC INTERNATIONAL + + OUI:443C9C* +- ID_OUI_FROM_DATABASE=Pintsch Tiefenbach GmbH ++ ID_OUI_FROM_DATABASE=Pintsch GmbH + + OUI:443D21* + ID_OUI_FROM_DATABASE=Nuvolt +@@ -57584,6 +58247,9 @@ OUI:446D57* + OUI:446D6C* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:446D7F* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:446EE5* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -57701,6 +58367,9 @@ OUI:4487DB* + OUI:4487FC* + ID_OUI_FROM_DATABASE=Elitegroup Computer Systems Co.,Ltd. + ++OUI:448816* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:4488CB* + ID_OUI_FROM_DATABASE=Camco Technologies NV + +@@ -57905,6 +58574,9 @@ OUI:44B433* + OUI:44B462* + ID_OUI_FROM_DATABASE=Flextronics Tech.(Ind) Pvt Ltd + ++OUI:44B4B2* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:44B6BE* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -58349,6 +59021,9 @@ OUI:4826E8* + OUI:482759* + ID_OUI_FROM_DATABASE=Levven Electronics Ltd. + ++OUI:4827C5* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:4827EA* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -58439,6 +59114,9 @@ OUI:4844F7* + OUI:484520* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:48468D* ++ ID_OUI_FROM_DATABASE=Zepcam B.V. ++ + OUI:4846C1* + ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED + +@@ -58514,6 +59192,9 @@ OUI:48555F* + OUI:485702* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:4857D2* ++ ID_OUI_FROM_DATABASE=Broadcom Limited ++ + OUI:4857DD* + ID_OUI_FROM_DATABASE=Facebook Inc + +@@ -58778,6 +59459,9 @@ OUI:489A42* + OUI:489BD5* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:489BE0* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:489BE2* + ID_OUI_FROM_DATABASE=SCI Innovations Ltd + +@@ -58862,6 +59546,9 @@ OUI:48B25D* + OUI:48B423* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + ++OUI:48B4C3* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:48B5A7* + ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd. + +@@ -58937,6 +59624,9 @@ OUI:48CAC6* + OUI:48CB6E* + ID_OUI_FROM_DATABASE=Cello Electronics (UK) Ltd + ++OUI:48CDD3* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:48D0CF* + ID_OUI_FROM_DATABASE=Universal Electronics, Inc. + +@@ -58994,6 +59684,9 @@ OUI:48DB50* + OUI:48DC2D* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:48DC9D* ++ ID_OUI_FROM_DATABASE=Grandprint(Beijing) Technology Co., LTD. ++ + OUI:48DCFB* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -59153,6 +59846,9 @@ OUI:4C09B4* + OUI:4C09D4* + ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation + ++OUI:4C09FA* ++ ID_OUI_FROM_DATABASE=FRONTIER SMART TECHNOLOGIES LTD ++ + OUI:4C0A3D* + ID_OUI_FROM_DATABASE=ADNACOM INC. + +@@ -59267,6 +59963,12 @@ OUI:4C2C80* + OUI:4C2C83* + ID_OUI_FROM_DATABASE=Zhejiang KaNong Network Technology Co.,Ltd. + ++OUI:4C2E5E* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ ++OUI:4C2EB4* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:4C2EFE* + ID_OUI_FROM_DATABASE=Shenzhen Comnect Technology Co.,LTD + +@@ -59420,6 +60122,9 @@ OUI:4C5262* + OUI:4C52EC* + ID_OUI_FROM_DATABASE=SOLARWATT GmbH + ++OUI:4C5369* ++ ID_OUI_FROM_DATABASE=YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++ + OUI:4C53FD* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -59561,6 +60266,9 @@ OUI:4C7274* + OUI:4C72B9* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION + ++OUI:4C734F* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:4C7367* + ID_OUI_FROM_DATABASE=Genius Bytes Software Solutions GmbH + +@@ -59774,6 +60482,12 @@ OUI:4C962D* + OUI:4C98EF* + ID_OUI_FROM_DATABASE=Zeo + ++OUI:4C9D22* ++ ID_OUI_FROM_DATABASE=ACES Co.,Ltd ++ ++OUI:4C9E6C* ++ ID_OUI_FROM_DATABASE=BROADEX TECHNOLOGIES CO.LTD ++ + OUI:4C9E80* + ID_OUI_FROM_DATABASE=KYOKKO ELECTRIC Co., Ltd. + +@@ -60020,6 +60734,9 @@ OUI:4CD08A* + OUI:4CD0CB* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:4CD0DD* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:4CD1A1* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -60380,6 +61097,9 @@ OUI:502690* + OUI:5027C7* + ID_OUI_FROM_DATABASE=TECHNART Co.,Ltd + ++OUI:50284A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:502873* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -60455,6 +61175,9 @@ OUI:5033F0* + OUI:50382F* + ID_OUI_FROM_DATABASE=ASE Group Chung-Li + ++OUI:50392F* ++ ID_OUI_FROM_DATABASE=INGRAM MICRO SERVICES ++ + OUI:503955* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -60503,6 +61226,9 @@ OUI:50411C* + OUI:5041B9* + ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC. + ++OUI:504289* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:504348* + ID_OUI_FROM_DATABASE=ThingsMatrix Inc. + +@@ -60713,6 +61439,9 @@ OUI:5067F0* + OUI:50680A* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:5068AC* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:506A03* + ID_OUI_FROM_DATABASE=NETGEAR + +@@ -60908,6 +61637,9 @@ OUI:509F3B* + OUI:50A009* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:50A015* ++ ID_OUI_FROM_DATABASE=Shenzhen Yipingfang Network Technology Co., Ltd. ++ + OUI:50A0300* + ID_OUI_FROM_DATABASE=Gopod Group Limited + +@@ -61091,6 +61823,9 @@ OUI:50C006* + OUI:50C0F0* + ID_OUI_FROM_DATABASE=Artek Microelectronics Co.,Ltd. + ++OUI:50C1F0* ++ ID_OUI_FROM_DATABASE=NXP Semiconductor (Tianjin) LTD. ++ + OUI:50C271* + ID_OUI_FROM_DATABASE=SECURETECH INC + +@@ -61184,6 +61919,9 @@ OUI:50DAD6* + OUI:50DB3F* + ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT + ++OUI:50DCD0* ++ ID_OUI_FROM_DATABASE=Observint Technologies, Inc. ++ + OUI:50DCE7* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -61265,6 +62003,9 @@ OUI:50E24E* + OUI:50E549* + ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. + ++OUI:50E636* ++ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH ++ + OUI:50E666* + ID_OUI_FROM_DATABASE=Shenzhen Techtion Electronics Co., Ltd. + +@@ -61368,7 +62109,7 @@ OUI:50FF990* + ID_OUI_FROM_DATABASE=Simicon + + OUI:50FF991* +- ID_OUI_FROM_DATABASE=Coyote Sytem ++ ID_OUI_FROM_DATABASE=COYOTE SYSTEM + + OUI:50FF992* + ID_OUI_FROM_DATABASE=SHENZHEN KINGVT ELECTRONICS CO.,LTD +@@ -61571,6 +62312,9 @@ OUI:542BDE* + OUI:542CEA* + ID_OUI_FROM_DATABASE=PROTECTRON + ++OUI:542F04* ++ ID_OUI_FROM_DATABASE=Shanghai Longcheer Technology Co., Ltd. ++ + OUI:542F89* + ID_OUI_FROM_DATABASE=Euclid Laboratories, Inc. + +@@ -61622,6 +62366,9 @@ OUI:5440AD* + OUI:544249* + ID_OUI_FROM_DATABASE=Sony Corporation + ++OUI:5443B2* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:544408* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -61790,6 +62537,9 @@ OUI:54778A* + OUI:54781A* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:5478C9* ++ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc. ++ + OUI:547975* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -62036,6 +62786,9 @@ OUI:54A6DB* + OUI:54A703* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:54A9C8* ++ ID_OUI_FROM_DATABASE=Home Control Singapore Pte Ltd ++ + OUI:54A9D4* + ID_OUI_FROM_DATABASE=Minibar Systems + +@@ -62198,6 +62951,9 @@ OUI:54E061* + OUI:54E140* + ID_OUI_FROM_DATABASE=INGENICO + ++OUI:54E15B* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:54E1AD* + ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd + +@@ -62309,6 +63065,9 @@ OUI:54FF82* + OUI:54FFCF* + ID_OUI_FROM_DATABASE=Mopria Alliance + ++OUI:580032* ++ ID_OUI_FROM_DATABASE=Genexis B.V. ++ + OUI:5800BB* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -62351,6 +63110,9 @@ OUI:58108C* + OUI:5810B7* + ID_OUI_FROM_DATABASE=Infinix mobility limited + ++OUI:581122* ++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. ++ + OUI:581243* + ID_OUI_FROM_DATABASE=AcSiP Technology Corp. + +@@ -62375,6 +63137,9 @@ OUI:581CBD* + OUI:581D91* + ID_OUI_FROM_DATABASE=Advanced Mobile Telecom co.,ltd. + ++OUI:581DD8* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:581F28* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -62615,6 +63380,9 @@ OUI:58528A* + OUI:5853C0* + ID_OUI_FROM_DATABASE=Beijing Guang Runtong Technology Development Company co.,Ltd + ++OUI:585595* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:5855CA* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -62693,6 +63461,9 @@ OUI:587521* + OUI:587675* + ID_OUI_FROM_DATABASE=Beijing ECHO Technologies Co.,Ltd + ++OUI:5876AC* ++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ + OUI:5876C5* + ID_OUI_FROM_DATABASE=DIGI I'S LTD + +@@ -62750,6 +63521,9 @@ OUI:588694* + OUI:58874C* + ID_OUI_FROM_DATABASE=LITE-ON CLEAN ENERGY TECHNOLOGY CORP. + ++OUI:58879F* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:5887E2* + ID_OUI_FROM_DATABASE=Shenzhen Coship Electronics Co., Ltd. + +@@ -62981,6 +63755,9 @@ OUI:58C17A* + OUI:58C232* + ID_OUI_FROM_DATABASE=NEC Corporation + ++OUI:58C356* ++ ID_OUI_FROM_DATABASE=EM Microelectronic ++ + OUI:58C38B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -63272,6 +64049,9 @@ OUI:5C0272* + OUI:5C0339* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:5C045A* ++ ID_OUI_FROM_DATABASE=Company NA Stage & Light ++ + OUI:5C076F* + ID_OUI_FROM_DATABASE=Thought Creator + +@@ -63338,6 +64118,9 @@ OUI:5C18B5* + OUI:5C1A6F* + ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd. + ++OUI:5C1BF4* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:5C1CB9* + ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. + +@@ -63359,6 +64142,9 @@ OUI:5C2443* + OUI:5C2479* + ID_OUI_FROM_DATABASE=Baltech AG + ++OUI:5C24E2* ++ ID_OUI_FROM_DATABASE=Suzhou Denbom Electronic S&T Co., Ltd ++ + OUI:5C254C* + ID_OUI_FROM_DATABASE=Avire Global Pte Ltd + +@@ -63488,6 +64274,9 @@ OUI:5C521E* + OUI:5C5230* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:5C53C3* ++ ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited ++ + OUI:5C546D* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -63722,6 +64511,9 @@ OUI:5C89D4* + OUI:5C8A38* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:5C8C30* ++ ID_OUI_FROM_DATABASE=Taicang T&W Electronics ++ + OUI:5C8D2D* + ID_OUI_FROM_DATABASE=Shanghai Wellpay Information Technology Co., Ltd + +@@ -63800,6 +64592,9 @@ OUI:5CA48A* + OUI:5CA4A4* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + ++OUI:5CA4F4* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:5CA5BC* + ID_OUI_FROM_DATABASE=eero inc. + +@@ -63905,6 +64700,9 @@ OUI:5CC307* + OUI:5CC336* + ID_OUI_FROM_DATABASE=ittim + ++OUI:5CC563* ++ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED ++ + OUI:5CC5D4* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -63923,6 +64721,9 @@ OUI:5CC8E3* + OUI:5CC999* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + ++OUI:5CC9C0* ++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd. ++ + OUI:5CC9D3* + ID_OUI_FROM_DATABASE=PALLADIUM ENERGY ELETRONICA DA AMAZONIA LTDA + +@@ -64061,6 +64862,9 @@ OUI:5CE8B7* + OUI:5CE8EB* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:5CE91E* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:5CEA1D* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -64073,6 +64877,9 @@ OUI:5CEB68* + OUI:5CED8C* + ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise + ++OUI:5CEDF4* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:5CEE79* + ID_OUI_FROM_DATABASE=Global Digitech Co LTD + +@@ -64172,6 +64979,9 @@ OUI:5CF9F0* + OUI:5CF9FD* + ID_OUI_FROM_DATABASE=Taicang T&W Electronics + ++OUI:5CFA25* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:5CFAFB* + ID_OUI_FROM_DATABASE=Acubit + +@@ -64316,6 +65126,9 @@ OUI:601803* + OUI:60182E* + ID_OUI_FROM_DATABASE=ShenZhen Protruly Electronic Ltd co. + ++OUI:60183A* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:601888* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -64346,6 +65159,9 @@ OUI:601D9D* + OUI:601E02* + ID_OUI_FROM_DATABASE=EltexAlatau + ++OUI:601E98* ++ ID_OUI_FROM_DATABASE=Axevast Technology ++ + OUI:602101* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + +@@ -64529,6 +65345,9 @@ OUI:605718* + OUI:60577D* + ID_OUI_FROM_DATABASE=eero inc. + ++OUI:605B30* ++ ID_OUI_FROM_DATABASE=Dell Inc. ++ + OUI:605BB4* + ID_OUI_FROM_DATABASE=AzureWave Technology Inc. + +@@ -64628,6 +65447,9 @@ OUI:607771* + OUI:6077E2* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:607D09* ++ ID_OUI_FROM_DATABASE=Luxshare Precision Industry Co., Ltd ++ + OUI:607DDD* + ID_OUI_FROM_DATABASE=Shenzhen Shichuangyi Electronics Co.,Ltd + +@@ -64724,6 +65546,9 @@ OUI:6092F5* + OUI:609316* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:6095BD* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:6095CE0* + ID_OUI_FROM_DATABASE=Siema Applications + +@@ -64907,6 +65732,9 @@ OUI:60BC4C* + OUI:60BD91* + ID_OUI_FROM_DATABASE=Move Innovation + ++OUI:60BEB4* ++ ID_OUI_FROM_DATABASE=S-Bluetech co., limited ++ + OUI:60BEB5* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + +@@ -65111,6 +65939,9 @@ OUI:60E85B* + OUI:60E956* + ID_OUI_FROM_DATABASE=Ayla Networks, Inc + ++OUI:60E9AA* ++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ + OUI:60EB5A* + ID_OUI_FROM_DATABASE=Asterfusion Data Technologies Co.,Ltd + +@@ -65273,6 +66104,9 @@ OUI:640F28* + OUI:641084* + ID_OUI_FROM_DATABASE=HEXIUM Technical Development Co., Ltd. + ++OUI:6411A4* ++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company ++ + OUI:641225* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -65423,6 +66257,9 @@ OUI:643139E* + OUI:643150* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:643172* ++ ID_OUI_FROM_DATABASE=ZHEJIANG HISING TECHNOLOGY CO.,LTD ++ + OUI:64317E* + ID_OUI_FROM_DATABASE=Dexin Corporation + +@@ -65513,6 +66350,9 @@ OUI:6444D5* + OUI:6447E0* + ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd + ++OUI:64497D* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:644BC3* + ID_OUI_FROM_DATABASE=Shanghai WOASiS Telecommunications Ltd., Co. + +@@ -65594,6 +66434,9 @@ OUI:645D92* + OUI:645DD7* + ID_OUI_FROM_DATABASE=Shenzhen Lifesense Medical Electronics Co., Ltd. + ++OUI:645DF4* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:645E10* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -65822,6 +66665,9 @@ OUI:649714* + OUI:649829* + ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd. + ++OUI:64989E* ++ ID_OUI_FROM_DATABASE=TRINNOV AUDIO ++ + OUI:64995D* + ID_OUI_FROM_DATABASE=LGE + +@@ -65972,6 +66818,9 @@ OUI:64BE63* + OUI:64BF6B* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:64C269* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:64C2DE* + ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications) + +@@ -65987,6 +66836,9 @@ OUI:64C3D6* + OUI:64C403* + ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd. + ++OUI:64C582* ++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. ++ + OUI:64C5AA* + ID_OUI_FROM_DATABASE=South African Broadcasting Corporation + +@@ -66263,6 +67115,9 @@ OUI:64FB92* + OUI:64FC8C* + ID_OUI_FROM_DATABASE=Zonar Systems + ++OUI:64FD96* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:64FF0A* + ID_OUI_FROM_DATABASE=Wistron Neweb Corporation + +@@ -66317,6 +67172,9 @@ OUI:681605* + OUI:681729* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:6818D9* ++ ID_OUI_FROM_DATABASE=Hill AFB - CAPRE Group ++ + OUI:68193F* + ID_OUI_FROM_DATABASE=Digital Airways + +@@ -66479,6 +67337,9 @@ OUI:684B88* + OUI:684CA8* + ID_OUI_FROM_DATABASE=Shenzhen Herotel Tech. Co., Ltd. + ++OUI:684E05* ++ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED ++ + OUI:684F64* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -66533,6 +67394,9 @@ OUI:685B36* + OUI:685D43* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:685E1C* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:685E6B* + ID_OUI_FROM_DATABASE=PowerRay Co., Ltd. + +@@ -66848,6 +67712,9 @@ OUI:68A47D* + OUI:68A682* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd + ++OUI:68A7B4* ++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. ++ + OUI:68A828* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -66896,6 +67763,12 @@ OUI:68B43A* + OUI:68B599* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:68B691* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ ++OUI:68B6B3* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:68B6FC* + ID_OUI_FROM_DATABASE=Hitron Technologies. Inc + +@@ -67016,6 +67889,9 @@ OUI:68E41F* + OUI:68E478* + ID_OUI_FROM_DATABASE=Qingdao Haier Technology Co.,Ltd + ++OUI:68E74A* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:68E7C2* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -67121,6 +67997,9 @@ OUI:6C05D5* + OUI:6C06D6* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:6C0831* ++ ID_OUI_FROM_DATABASE=ANALOG SYSTEMS ++ + OUI:6C090A* + ID_OUI_FROM_DATABASE=GEMATICA SRL + +@@ -67151,6 +68030,9 @@ OUI:6C0EE6* + OUI:6C0F0B* + ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. + ++OUI:6C0F61* ++ ID_OUI_FROM_DATABASE=Hypervolt Ltd ++ + OUI:6C0F6A* + ID_OUI_FROM_DATABASE=JDC Tech Co., Ltd. + +@@ -67172,6 +68054,51 @@ OUI:6C146E* + OUI:6C14F7* + ID_OUI_FROM_DATABASE=Erhardt+Leimer GmbH + ++OUI:6C15240* ++ ID_OUI_FROM_DATABASE=DEFA AS ++ ++OUI:6C15241* ++ ID_OUI_FROM_DATABASE=Telsonic AG ++ ++OUI:6C15242* ++ ID_OUI_FROM_DATABASE=Linkplay ++ ++OUI:6C15243* ++ ID_OUI_FROM_DATABASE=Forcite Helmet Systems Pty Ltd ++ ++OUI:6C15244* ++ ID_OUI_FROM_DATABASE=Magicyo Technology CO., LTD. ++ ++OUI:6C15245* ++ ID_OUI_FROM_DATABASE=Shenzhen Electron Technology Co., LTD. ++ ++OUI:6C15246* ++ ID_OUI_FROM_DATABASE=Kunshan Abram Software Technology Co.,Ltd. ++ ++OUI:6C15247* ++ ID_OUI_FROM_DATABASE=Motium Pty Ltd ++ ++OUI:6C15248* ++ ID_OUI_FROM_DATABASE=ShenZhen Chainway Information Technology Co., Ltd. ++ ++OUI:6C15249* ++ ID_OUI_FROM_DATABASE=D-HOME SMAART ++ ++OUI:6C1524A* ++ ID_OUI_FROM_DATABASE=STERIS ++ ++OUI:6C1524B* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:6C1524C* ++ ID_OUI_FROM_DATABASE=CORAL-TAIYI ++ ++OUI:6C1524D* ++ ID_OUI_FROM_DATABASE=SYMLINK CORPORATION ++ ++OUI:6C1524E* ++ ID_OUI_FROM_DATABASE=AEC s.r.l. ++ + OUI:6C15F9* + ID_OUI_FROM_DATABASE=Nautronix Limited + +@@ -67226,6 +68153,9 @@ OUI:6C23B9* + OUI:6C23CB* + ID_OUI_FROM_DATABASE=Wattty Corporation + ++OUI:6C2408* ++ ID_OUI_FROM_DATABASE=LCFC(Hefei) Electronics Technology Co., Ltd ++ + OUI:6C2483* + ID_OUI_FROM_DATABASE=Microsoft Mobile Oy + +@@ -67508,6 +68438,9 @@ OUI:6C639C* + OUI:6C641A* + ID_OUI_FROM_DATABASE=Penguin Computing + ++OUI:6C67EF* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:6C6A77* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -67610,6 +68543,51 @@ OUI:6C9106* + OUI:6C92BF* + ID_OUI_FROM_DATABASE=Inspur Electronic Information Industry Co.,Ltd. + ++OUI:6C93080* ++ ID_OUI_FROM_DATABASE=Braums ++ ++OUI:6C93081* ++ ID_OUI_FROM_DATABASE=WATERFORD CONSULTANTS LLC ++ ++OUI:6C93082* ++ ID_OUI_FROM_DATABASE=ZHEJIANG XIAN DA Environmental Technology Co., Ltd ++ ++OUI:6C93083* ++ ID_OUI_FROM_DATABASE=LightnTec GmbH ++ ++OUI:6C93084* ++ ID_OUI_FROM_DATABASE=Estelar s.r.o ++ ++OUI:6C93085* ++ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd. ++ ++OUI:6C93086* ++ ID_OUI_FROM_DATABASE=Uconfree technology(shenzhen)limited ++ ++OUI:6C93087* ++ ID_OUI_FROM_DATABASE=Liberty AV Solutions ++ ++OUI:6C93088* ++ ID_OUI_FROM_DATABASE=Hangzhou Risco System Co.,Ltd ++ ++OUI:6C93089* ++ ID_OUI_FROM_DATABASE=Shenzhen DOOGEE Hengtong Technology CO., LTD ++ ++OUI:6C9308A* ++ ID_OUI_FROM_DATABASE=Shenzhen TOPWAY Technology Co.,LTD ++ ++OUI:6C9308B* ++ ID_OUI_FROM_DATABASE=Shenzhen EZpro Sound & Light Technology Co., Ltd. ++ ++OUI:6C9308C* ++ ID_OUI_FROM_DATABASE=Shenzhen haichangxing Technology Co., Ltd. ++ ++OUI:6C9308D* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:6C9308E* ++ ID_OUI_FROM_DATABASE=ANDDORO LLC ++ + OUI:6C9354* + ID_OUI_FROM_DATABASE=Yaojin Technology (Shenzhen) Co., LTD. + +@@ -67628,6 +68606,9 @@ OUI:6C9522* + OUI:6C96CF* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:6C976D* ++ ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company ++ + OUI:6C98EB* + ID_OUI_FROM_DATABASE=Riverbed Technology, Inc. + +@@ -67637,6 +68618,9 @@ OUI:6C9961* + OUI:6C9989* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:6C999D* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:6C9AC9* + ID_OUI_FROM_DATABASE=Valentine Research, Inc. + +@@ -67661,6 +68645,9 @@ OUI:6CA0B4* + OUI:6CA100* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:6CA401* ++ ID_OUI_FROM_DATABASE=essensys plc ++ + OUI:6CA4D1* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + +@@ -67727,6 +68714,9 @@ OUI:6CADF8* + OUI:6CAE8B* + ID_OUI_FROM_DATABASE=IBM Corporation + ++OUI:6CAEE3* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:6CAEF6* + ID_OUI_FROM_DATABASE=eero inc. + +@@ -67739,12 +68729,18 @@ OUI:6CB0CE* + OUI:6CB0FD* + ID_OUI_FROM_DATABASE=Shenzhen Xinghai Iot Technology Co.,Ltd + ++OUI:6CB158* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:6CB227* + ID_OUI_FROM_DATABASE=Sony Video & Sound Products Inc. + + OUI:6CB2AE* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:6CB2FD* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:6CB311* + ID_OUI_FROM_DATABASE=Shenzhen Lianrui Electronics Co.,Ltd + +@@ -68222,6 +69218,9 @@ OUI:70305D* + OUI:70305E* + ID_OUI_FROM_DATABASE=Nanjing Zhongke Menglian Information Technology Co.,LTD + ++OUI:70317F* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:703187* + ID_OUI_FROM_DATABASE=ACX GmbH + +@@ -68345,6 +69344,51 @@ OUI:704FB8* + OUI:7050AF* + ID_OUI_FROM_DATABASE=BSkyB Ltd + ++OUI:7050E70* ++ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd. ++ ++OUI:7050E71* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:7050E72* ++ ID_OUI_FROM_DATABASE=Electronic's Time SRL ++ ++OUI:7050E73* ++ ID_OUI_FROM_DATABASE=Skychers Creations ShenZhen Limited ++ ++OUI:7050E74* ++ ID_OUI_FROM_DATABASE=Quantumdoor Technologies, Inc. ++ ++OUI:7050E75* ++ ID_OUI_FROM_DATABASE=Wall Box Chargers, S.L. ++ ++OUI:7050E76* ++ ID_OUI_FROM_DATABASE=Nippon Pulse America, Inc. ++ ++OUI:7050E77* ++ ID_OUI_FROM_DATABASE=Yoctopuce ++ ++OUI:7050E78* ++ ID_OUI_FROM_DATABASE=Shenzhen Dangs Science and Technology CO.,Ltd. ++ ++OUI:7050E79* ++ ID_OUI_FROM_DATABASE=Elastics.cloud ++ ++OUI:7050E7A* ++ ID_OUI_FROM_DATABASE=Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company ++ ++OUI:7050E7B* ++ ID_OUI_FROM_DATABASE=Beijing Shannoncyber Technology Co.,Ltd ++ ++OUI:7050E7C* ++ ID_OUI_FROM_DATABASE=shenzhen newbridge communication equipment CO.,LTD ++ ++OUI:7050E7D* ++ ID_OUI_FROM_DATABASE=Eta Compute Inc. ++ ++OUI:7050E7E* ++ ID_OUI_FROM_DATABASE=KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD) ++ + OUI:7052C5* + ID_OUI_FROM_DATABASE=Avaya Inc + +@@ -68447,6 +69491,9 @@ OUI:7065A3* + OUI:70661B* + ID_OUI_FROM_DATABASE=Sonova AG + ++OUI:70662A* ++ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc. ++ + OUI:706655* + ID_OUI_FROM_DATABASE=AzureWave Technology Inc. + +@@ -68531,6 +69578,9 @@ OUI:70708B* + OUI:7070AA* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + ++OUI:7070FC* ++ ID_OUI_FROM_DATABASE=GOLD&WATER INDUSTRIAL LIMITED ++ + OUI:7071B3* + ID_OUI_FROM_DATABASE=Brain Corporation + +@@ -68618,6 +69668,9 @@ OUI:708540* + OUI:7085C2* + ID_OUI_FROM_DATABASE=ASRock Incorporation + ++OUI:7085C4* ++ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD ++ + OUI:7085C6* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -68765,6 +69818,9 @@ OUI:70A56A* + OUI:70A66A* + ID_OUI_FROM_DATABASE=Prox Dynamics AS + ++OUI:70A6BD* ++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. ++ + OUI:70A6CC* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -68780,9 +69836,15 @@ OUI:70A8D3* + OUI:70A8E3* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:70A983* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:70AAB2* + ID_OUI_FROM_DATABASE=BlackBerry RTS + ++OUI:70AC08* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:70ACD7* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd + +@@ -79665,7 +80727,7 @@ OUI:70B3D5E2E* + ID_OUI_FROM_DATABASE=Merz s.r.o. + + OUI:70B3D5E2F* +- ID_OUI_FROM_DATABASE=Flextronics International Kft. ++ ID_OUI_FROM_DATABASE=Flextronics International Kft + + OUI:70B3D5E30* + ID_OUI_FROM_DATABASE=QUISS AG +@@ -79875,7 +80937,7 @@ OUI:70B3D5E74* + ID_OUI_FROM_DATABASE=Exfrontier Co., Ltd. + + OUI:70B3D5E75* +- ID_OUI_FROM_DATABASE=Nke ++ ID_OUI_FROM_DATABASE=Watteco + + OUI:70B3D5E76* + ID_OUI_FROM_DATABASE=Dorsett Technologies Inc +@@ -81161,6 +82223,9 @@ OUI:70D5E7* + OUI:70D6B6* + ID_OUI_FROM_DATABASE=Metrum Technologies + ++OUI:70D823* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:70D880* + ID_OUI_FROM_DATABASE=Upos System sp. z o.o. + +@@ -81365,6 +82430,9 @@ OUI:74042B* + OUI:7404F0* + ID_OUI_FROM_DATABASE=Mobiwire Mobiles (NingBo) Co., LTD + ++OUI:7404F1* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:7405A5* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -81677,6 +82745,9 @@ OUI:74547D* + OUI:745612* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:74563C* ++ ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. ++ + OUI:745798* + ID_OUI_FROM_DATABASE=TRUMPF Laser GmbH + Co. KG + +@@ -81764,6 +82835,9 @@ OUI:745F90* + OUI:745FAE* + ID_OUI_FROM_DATABASE=TSL PPL + ++OUI:74604C* ++ ID_OUI_FROM_DATABASE=RØDE ++ + OUI:7460FA* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -81788,6 +82862,9 @@ OUI:746630* + OUI:7467F7* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:74694A* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:746A3A* + ID_OUI_FROM_DATABASE=Aperi Corporation + +@@ -81812,6 +82889,9 @@ OUI:746F19* + OUI:746F3D* + ID_OUI_FROM_DATABASE=Contec GmbH + ++OUI:746F88* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:746FF7* + ID_OUI_FROM_DATABASE=Wistron Neweb Corporation + +@@ -81821,6 +82901,9 @@ OUI:747069* + OUI:7470FD* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:74718B* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:74721E* + ID_OUI_FROM_DATABASE=Edison Labs Inc. + +@@ -81845,6 +82928,9 @@ OUI:747548* + OUI:74765B* + ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd. + ++OUI:74767D* ++ ID_OUI_FROM_DATABASE=shenzhen kexint technology co.,ltd ++ + OUI:747818* + ID_OUI_FROM_DATABASE=Jurumani Solutions + +@@ -81881,6 +82967,9 @@ OUI:7483C2* + OUI:7483EF* + ID_OUI_FROM_DATABASE=Arista Networks + ++OUI:748469* ++ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd ++ + OUI:7484E1* + ID_OUI_FROM_DATABASE=Dongguan Haoyuan Electronics Co.,Ltd + +@@ -81974,6 +83063,9 @@ OUI:7495EC* + OUI:749637* + ID_OUI_FROM_DATABASE=Todaair Electronic Co., Ltd + ++OUI:749779* ++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ + OUI:749781* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -82073,6 +83165,9 @@ OUI:74B587* + OUI:74B6B6* + ID_OUI_FROM_DATABASE=eero inc. + ++OUI:74B725* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:74B7B3* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd + +@@ -82163,6 +83258,9 @@ OUI:74D285* + OUI:74D435* + ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. + ++OUI:74D4DD* ++ ID_OUI_FROM_DATABASE=Quanta Computer Inc. ++ + OUI:74D637* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -82187,6 +83285,9 @@ OUI:74D83E* + OUI:74D850* + ID_OUI_FROM_DATABASE=Evrisko Systems + ++OUI:74D9EB* ++ ID_OUI_FROM_DATABASE=Petabit Scale, Inc. ++ + OUI:74DA38* + ID_OUI_FROM_DATABASE=Edimax Technology Co. Ltd. + +@@ -82202,6 +83303,9 @@ OUI:74DAEA* + OUI:74DBD1* + ID_OUI_FROM_DATABASE=Ebay Inc + ++OUI:74DDCB* ++ ID_OUI_FROM_DATABASE=China Leadshine Technology Co.,Ltd ++ + OUI:74DE2B* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -82463,6 +83567,9 @@ OUI:7802B7* + OUI:7802F8* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:78034F* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:780473* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -82565,6 +83672,9 @@ OUI:781305E* + OUI:7813E0* + ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD + ++OUI:78152D* ++ ID_OUI_FROM_DATABASE=UNION CHIP TECHNOLOGY LIMITED ++ + OUI:781735* + ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd. + +@@ -82607,6 +83717,9 @@ OUI:782079* + OUI:7820A5* + ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd + ++OUI:7820BD* ++ ID_OUI_FROM_DATABASE=Polysense (Beijing) Technologies Co. Ltd ++ + OUI:782184* + ID_OUI_FROM_DATABASE=Espressif Inc. + +@@ -82682,6 +83795,9 @@ OUI:78321B* + OUI:78324F* + ID_OUI_FROM_DATABASE=Millennium Group, Inc. + ++OUI:783486* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:7835A0* + ID_OUI_FROM_DATABASE=Zurn Industries LLC + +@@ -82835,6 +83951,9 @@ OUI:78595E* + OUI:785968* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:785B64* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:785C28* + ID_OUI_FROM_DATABASE=Prime Motion Inc. + +@@ -82919,6 +84038,9 @@ OUI:78653B* + OUI:786559* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:78669D* ++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD ++ + OUI:7866AE* + ID_OUI_FROM_DATABASE=ZTEC Instruments, Inc. + +@@ -82952,6 +84074,9 @@ OUI:786DEB* + OUI:787052* + ID_OUI_FROM_DATABASE=Welotec GmbH + ++OUI:787104* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:78719C* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -83090,6 +84215,9 @@ OUI:788E33* + OUI:7890A2* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:7891DE* ++ ID_OUI_FROM_DATABASE=Guangdong ACIGA Science&Technology Co.,Ltd ++ + OUI:7891E9* + ID_OUI_FROM_DATABASE=Raisecom Technology CO.,LTD + +@@ -83222,6 +84350,9 @@ OUI:78ACC0* + OUI:78AE0C* + ID_OUI_FROM_DATABASE=Far South Networks + ++OUI:78AF08* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:78AF58* + ID_OUI_FROM_DATABASE=GIMASI SA + +@@ -83469,7 +84600,7 @@ OUI:78D4F10* + ID_OUI_FROM_DATABASE=Burisch Elektronik Bauteile GmbH + + OUI:78D4F11* +- ID_OUI_FROM_DATABASE=Cartender ++ ID_OUI_FROM_DATABASE=Silla Industries + + OUI:78D4F12* + ID_OUI_FROM_DATABASE=Lyngsoe Systems +@@ -84137,6 +85268,9 @@ OUI:7C696B* + OUI:7C69F6* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:7C6A60* ++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. ++ + OUI:7C6AB3* + ID_OUI_FROM_DATABASE=IBC TECHNOLOGIES INC. + +@@ -84216,7 +85350,7 @@ OUI:7C70BC9* + ID_OUI_FROM_DATABASE=dogtra + + OUI:7C70BCA* +- ID_OUI_FROM_DATABASE=Ametek VIS ++ ID_OUI_FROM_DATABASE=Motec GmbH + + OUI:7C70BCB* + ID_OUI_FROM_DATABASE=Tohan Engineering Corporation +@@ -84809,6 +85943,9 @@ OUI:7CDFA1* + OUI:7CE044* + ID_OUI_FROM_DATABASE=NEON Inc + ++OUI:7CE152* ++ ID_OUI_FROM_DATABASE=THE GOODYEAR TIRE & RUBBER COMPANY ++ + OUI:7CE1FF* + ID_OUI_FROM_DATABASE=Computer Performance, Inc. DBA Digital Loggers, Inc. + +@@ -84845,12 +85982,18 @@ OUI:7CEC79* + OUI:7CEC9B* + ID_OUI_FROM_DATABASE=Fuzhou Teraway Information Technology Co.,Ltd + ++OUI:7CECB1* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:7CED8D* + ID_OUI_FROM_DATABASE=Microsoft + + OUI:7CEF18* + ID_OUI_FROM_DATABASE=Creative Product Design Pty. Ltd. + ++OUI:7CEF40* ++ ID_OUI_FROM_DATABASE=Nextorage Corporation ++ + OUI:7CEF61* + ID_OUI_FROM_DATABASE=STR Elektronik Josef Schlechtinger GmbH + +@@ -84947,6 +86090,27 @@ OUI:80029C* + OUI:8002DF* + ID_OUI_FROM_DATABASE=ORA Inc. + ++OUI:8002F40* ++ ID_OUI_FROM_DATABASE=BK Networks Co,. Ltd. ++ ++OUI:8002F41* ++ ID_OUI_FROM_DATABASE=Sichuan lookout environment protection technology co.,Ltd ++ ++OUI:8002F43* ++ ID_OUI_FROM_DATABASE=Shenzhen Suanzi Technology Co., Ltd ++ ++OUI:8002F45* ++ ID_OUI_FROM_DATABASE=Sichuan Fanyi Technology Co. Ltd. ++ ++OUI:8002F49* ++ ID_OUI_FROM_DATABASE=XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++ ++OUI:8002F4A* ++ ID_OUI_FROM_DATABASE=PassiveLogic ++ ++OUI:8002F4C* ++ ID_OUI_FROM_DATABASE=Wuhan Glory Road Intelligent Technology Co., Ltd. ++ + OUI:800384* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -85172,6 +86336,9 @@ OUI:803B9A* + OUI:803BF6* + ID_OUI_FROM_DATABASE=LOOK EASY INTERNATIONAL LIMITED + ++OUI:803C20* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:803E48* + ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT + +@@ -85259,6 +86426,9 @@ OUI:8059FD* + OUI:805A04* + ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications) + ++OUI:805B65* ++ ID_OUI_FROM_DATABASE=LG Innotek ++ + OUI:805E0C* + ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD. + +@@ -85274,6 +86444,9 @@ OUI:805FC5* + OUI:806007* + ID_OUI_FROM_DATABASE=RIM + ++OUI:806036* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:8060B7* + ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + +@@ -85304,6 +86477,9 @@ OUI:8065E9* + OUI:806629* + ID_OUI_FROM_DATABASE=Prescope Technologies CO.,LTD. + ++OUI:80691A* ++ ID_OUI_FROM_DATABASE=Belkin International Inc. ++ + OUI:806933* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -85535,6 +86711,9 @@ OUI:8096CA* + OUI:80971B* + ID_OUI_FROM_DATABASE=Altenergy Power System,Inc. + ++OUI:809733* ++ ID_OUI_FROM_DATABASE=Shenzhen Elebao Technology Co., Ltd ++ + OUI:809B20* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -85644,7 +86823,7 @@ OUI:80C16E* + ID_OUI_FROM_DATABASE=Hewlett Packard + + OUI:80C3BA* +- ID_OUI_FROM_DATABASE=Sennheiser electronic GmbH & Co. KG ++ ID_OUI_FROM_DATABASE=Sennheiser Consumer Audio GmbH + + OUI:80C501* + ID_OUI_FROM_DATABASE=OctoGate IT Security Systems GmbH +@@ -86300,6 +87479,9 @@ OUI:8468C8* + OUI:846991* + ID_OUI_FROM_DATABASE=Nokia + ++OUI:846993* ++ ID_OUI_FROM_DATABASE=HP Inc. ++ + OUI:846A66* + ID_OUI_FROM_DATABASE=Sumitomo Kizai Co.,Ltd. + +@@ -86315,6 +87497,9 @@ OUI:846EB1* + OUI:846FCE* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + ++OUI:8470D7* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:847127* + ID_OUI_FROM_DATABASE=Silicon Laboratories + +@@ -86408,6 +87593,9 @@ OUI:848506* + OUI:84850A* + ID_OUI_FROM_DATABASE=Hella Sonnen- und Wetterschutztechnik GmbH + ++OUI:848553* ++ ID_OUI_FROM_DATABASE=Biznes Systema Telecom, LLC ++ + OUI:8485E6* + ID_OUI_FROM_DATABASE=Guangdong Asano Technology CO.,Ltd. + +@@ -86540,6 +87728,9 @@ OUI:84930C* + OUI:8493A0* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:8493B2* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:84948C* + ID_OUI_FROM_DATABASE=Hitron Technologies. Inc + +@@ -86711,6 +87902,9 @@ OUI:84C3E8* + OUI:84C5A6* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:84C692* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:84C727* + ID_OUI_FROM_DATABASE=Gnodal Ltd + +@@ -86918,6 +88112,9 @@ OUI:84F129* + OUI:84F147* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:84F1D0* ++ ID_OUI_FROM_DATABASE=EHOOME IOT PRIVATE LIMITED ++ + OUI:84F3EB* + ID_OUI_FROM_DATABASE=Espressif Inc. + +@@ -86960,6 +88157,12 @@ OUI:880118* + OUI:8801F2* + ID_OUI_FROM_DATABASE=Vitec System Engineering Inc. + ++OUI:8801F9* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ ++OUI:88034C* ++ ID_OUI_FROM_DATABASE=WEIFANG GOERTEK ELECTRONICS CO.,LTD ++ + OUI:880355* + ID_OUI_FROM_DATABASE=Arcadyan Technology Corporation + +@@ -87128,6 +88331,9 @@ OUI:883C1C* + OUI:883D24* + ID_OUI_FROM_DATABASE=Google, Inc. + ++OUI:883F0C* ++ ID_OUI_FROM_DATABASE=system a.v. co., ltd. ++ + OUI:883F4A* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -87359,6 +88565,9 @@ OUI:8866A5* + OUI:88685C* + ID_OUI_FROM_DATABASE=Shenzhen ChuangDao & Perpetual Eternal Technology Co.,Ltd + ++OUI:88693D* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:886AB1* + ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. + +@@ -87482,6 +88691,9 @@ OUI:888E68* + OUI:888E7F* + ID_OUI_FROM_DATABASE=ATOP CORPORATION + ++OUI:888FA4* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:889009* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -87722,6 +88934,9 @@ OUI:88BFE4* + OUI:88C08B* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:88C174* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:88C227* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -87797,6 +89012,9 @@ OUI:88C9B3E* + OUI:88C9D0* + ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications) + ++OUI:88C9E8* ++ ID_OUI_FROM_DATABASE=Sony Corporation ++ + OUI:88CB87* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -87941,6 +89159,9 @@ OUI:88F031* + OUI:88F077* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:88F2BD* ++ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd. ++ + OUI:88F488* + ID_OUI_FROM_DATABASE=cellon communications technology(shenzhen)Co.,Ltd. + +@@ -87959,6 +89180,9 @@ OUI:88F7C7* + OUI:88F872* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:88FC5D* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:88FCA6* + ID_OUI_FROM_DATABASE=devolo AG + +@@ -88079,12 +89303,18 @@ OUI:8C147DE* + OUI:8C14B4* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:8C1553* ++ ID_OUI_FROM_DATABASE=Beijing Memblaze Technology Co Ltd ++ + OUI:8C15C7* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + + OUI:8C1645* + ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd + ++OUI:8C1759* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:8C17B6* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -88193,6 +89423,9 @@ OUI:8C1CDAE* + OUI:8C1D96* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:8C1E80* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:8C1ED9* + ID_OUI_FROM_DATABASE=Beijing Unigroup Tsingteng Microsystem Co., LTD. + +@@ -88202,6 +89435,24 @@ OUI:8C1F64000* + OUI:8C1F64003* + ID_OUI_FROM_DATABASE=Brighten Controls LLP + ++OUI:8C1F64017* ++ ID_OUI_FROM_DATABASE=Farmote Limited ++ ++OUI:8C1F6401A* ++ ID_OUI_FROM_DATABASE=Paragraf ++ ++OUI:8C1F6401E* ++ ID_OUI_FROM_DATABASE=SCIREQ Scientific Respiratory Equipment Inc ++ ++OUI:8C1F64045* ++ ID_OUI_FROM_DATABASE=VEILUX INC. ++ ++OUI:8C1F64059* ++ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme ++ ++OUI:8C1F6405F* ++ ID_OUI_FROM_DATABASE=ESCAD AUTOMATION GmbH ++ + OUI:8C1F6406D* + ID_OUI_FROM_DATABASE=Monnit Corporation + +@@ -88223,6 +89474,9 @@ OUI:8C1F64086* + OUI:8C1F6408B* + ID_OUI_FROM_DATABASE=Shanghai Shenxu Technology Co., Ltd + ++OUI:8C1F6408F* ++ ID_OUI_FROM_DATABASE=AixControl GmbH ++ + OUI:8C1F64099* + ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd + +@@ -88238,9 +89492,18 @@ OUI:8C1F640A8* + OUI:8C1F640AB* + ID_OUI_FROM_DATABASE=Norbit ODM AS + ++OUI:8C1F640AF* ++ ID_OUI_FROM_DATABASE=FORSEE POWER ++ ++OUI:8C1F640B0* ++ ID_OUI_FROM_DATABASE=Bunka Shutter Co., Ltd. ++ + OUI:8C1F640B8* + ID_OUI_FROM_DATABASE=Signatrol Ltd + ++OUI:8C1F640C0* ++ ID_OUI_FROM_DATABASE=Active Research Limited ++ + OUI:8C1F640C5* + ID_OUI_FROM_DATABASE=TechnipFMC + +@@ -88250,6 +89513,9 @@ OUI:8C1F640D6* + OUI:8C1F640E0* + ID_OUI_FROM_DATABASE=Autopharma + ++OUI:8C1F640E6* ++ ID_OUI_FROM_DATABASE=Cleanwatts Digital, S.A. ++ + OUI:8C1F640EA* + ID_OUI_FROM_DATABASE=SmartSky Networks LLC + +@@ -88268,6 +89534,9 @@ OUI:8C1F64103* + OUI:8C1F64111* + ID_OUI_FROM_DATABASE=ISAC SRL + ++OUI:8C1F64115* ++ ID_OUI_FROM_DATABASE=Neuralog LP ++ + OUI:8C1F64118* + ID_OUI_FROM_DATABASE=Automata GmbH & Co. KG + +@@ -88277,6 +89546,9 @@ OUI:8C1F6411F* + OUI:8C1F64128* + ID_OUI_FROM_DATABASE=YULISTA INTEGRATED SOLUTION + ++OUI:8C1F6412B* ++ ID_OUI_FROM_DATABASE=Beijing Tongtech Technology Co., Ltd. ++ + OUI:8C1F64135* + ID_OUI_FROM_DATABASE=Yuval Fichman + +@@ -88304,6 +89576,9 @@ OUI:8C1F64177* + OUI:8C1F64193* + ID_OUI_FROM_DATABASE=Sicon srl + ++OUI:8C1F64194* ++ ID_OUI_FROM_DATABASE=TIFLEX ++ + OUI:8C1F6419B* + ID_OUI_FROM_DATABASE=FeedFlo + +@@ -88325,6 +89600,9 @@ OUI:8C1F641BF* + OUI:8C1F641C2* + ID_OUI_FROM_DATABASE=Solid Invent Ltda. + ++OUI:8C1F641CB* ++ ID_OUI_FROM_DATABASE=SASYS e.K. ++ + OUI:8C1F641D1* + ID_OUI_FROM_DATABASE=AS Strömungstechnik GmbH + +@@ -88337,6 +89615,9 @@ OUI:8C1F641E1* + OUI:8C1F641E3* + ID_OUI_FROM_DATABASE=WBNet + ++OUI:8C1F641EF* ++ ID_OUI_FROM_DATABASE=Tantronic AG ++ + OUI:8C1F64204* + ID_OUI_FROM_DATABASE=castcore + +@@ -88352,9 +89633,15 @@ OUI:8C1F64224* + OUI:8C1F64227* + ID_OUI_FROM_DATABASE=Digilens + ++OUI:8C1F6422E* ++ ID_OUI_FROM_DATABASE=Jide Car Rastreamento e Monitoramento LTDA ++ + OUI:8C1F64242* + ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA + ++OUI:8C1F64254* ++ ID_OUI_FROM_DATABASE=Zhuhai Yunzhou Intelligence Technology Ltd. ++ + OUI:8C1F64256* + ID_OUI_FROM_DATABASE=Landinger + +@@ -88370,9 +89657,15 @@ OUI:8C1F64264* + OUI:8C1F64270* + ID_OUI_FROM_DATABASE=Xi‘an Hangguang Satellite and Control Technology Co.,Ltd + ++OUI:8C1F64274* ++ ID_OUI_FROM_DATABASE=INVIXIUM ACCESS INC ++ + OUI:8C1F6428A* + ID_OUI_FROM_DATABASE=Arcopie + ++OUI:8C1F6428C* ++ ID_OUI_FROM_DATABASE=Sakura Seiki Co.,Ltd. ++ + OUI:8C1F64296* + ID_OUI_FROM_DATABASE=Roog zhi tong Technology(Beijing) Co.,Ltd + +@@ -88391,6 +89684,9 @@ OUI:8C1F642B6* + OUI:8C1F642C2* + ID_OUI_FROM_DATABASE=TEX COMPUTER SRL + ++OUI:8C1F642C3* ++ ID_OUI_FROM_DATABASE=TeraDiode / Panasonic ++ + OUI:8C1F642C8* + ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos + +@@ -88403,6 +89699,9 @@ OUI:8C1F642EF* + OUI:8C1F642F5* + ID_OUI_FROM_DATABASE=Florida R&D Associates LLC + ++OUI:8C1F642FD* ++ ID_OUI_FROM_DATABASE=Enestone Corporation ++ + OUI:8C1F64304* + ID_OUI_FROM_DATABASE=Jemac Sweden AB + +@@ -88412,6 +89711,9 @@ OUI:8C1F64306* + OUI:8C1F6430A* + ID_OUI_FROM_DATABASE=XCOM Labs + ++OUI:8C1F64316* ++ ID_OUI_FROM_DATABASE=Potter Electric Signal Company ++ + OUI:8C1F6431A* + ID_OUI_FROM_DATABASE=Asiga Pty Ltd + +@@ -88421,6 +89723,9 @@ OUI:8C1F64328* + OUI:8C1F64330* + ID_OUI_FROM_DATABASE=Vision Systems Safety Tech + ++OUI:8C1F6435C* ++ ID_OUI_FROM_DATABASE=Opgal Optronic Industries ltd ++ + OUI:8C1F6435D* + ID_OUI_FROM_DATABASE=Security&Best + +@@ -88436,9 +89741,15 @@ OUI:8C1F64382* + OUI:8C1F64385* + ID_OUI_FROM_DATABASE=Multilane Inc + ++OUI:8C1F6438B* ++ ID_OUI_FROM_DATABASE=Borrell USA Corp ++ + OUI:8C1F6438D* + ID_OUI_FROM_DATABASE=Wilson Electronics + ++OUI:8C1F6438E* ++ ID_OUI_FROM_DATABASE=Wartsila Voyage Limited ++ + OUI:8C1F64391* + ID_OUI_FROM_DATABASE=CPC (UK) + +@@ -88454,6 +89765,9 @@ OUI:8C1F643A4* + OUI:8C1F643AD* + ID_OUI_FROM_DATABASE=TowerIQ + ++OUI:8C1F643B2* ++ ID_OUI_FROM_DATABASE=Real Digital ++ + OUI:8C1F643B5* + ID_OUI_FROM_DATABASE=SVMS + +@@ -88463,18 +89777,30 @@ OUI:8C1F643C4* + OUI:8C1F643C6* + ID_OUI_FROM_DATABASE=Wavestream Corp + ++OUI:8C1F643D1* ++ ID_OUI_FROM_DATABASE=EMIT GmbH ++ + OUI:8C1F643E0* + ID_OUI_FROM_DATABASE=YPP Corporation + + OUI:8C1F643E8* + ID_OUI_FROM_DATABASE=Ruichuangte + ++OUI:8C1F643F4* ++ ID_OUI_FROM_DATABASE=ACTELSER S.L. ++ + OUI:8C1F643FE* + ID_OUI_FROM_DATABASE=Plum sp. z.o.o. + + OUI:8C1F643FF* + ID_OUI_FROM_DATABASE=UISEE(SHANGHAI) AUTOMOTIVE TECHNOLOGIES LTD. + ++OUI:8C1F6440C* ++ ID_OUI_FROM_DATABASE=Sichuan Aiyijan Technology Company Ltd. ++ ++OUI:8C1F6440E* ++ ID_OUI_FROM_DATABASE=Baker Hughes EMEA ++ + OUI:8C1F64414* + ID_OUI_FROM_DATABASE=INSEVIS GmbH + +@@ -88484,6 +89810,9 @@ OUI:8C1F64417* + OUI:8C1F6441D* + ID_OUI_FROM_DATABASE=Aspen Spectra Sdn Bhd + ++OUI:8C1F64429* ++ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS ++ + OUI:8C1F6442B* + ID_OUI_FROM_DATABASE=Gamber Johnson-LLC + +@@ -88508,12 +89837,21 @@ OUI:8C1F64466* + OUI:8C1F64472* + ID_OUI_FROM_DATABASE=Surge Networks, Inc. + ++OUI:8C1F6447A* ++ ID_OUI_FROM_DATABASE=Missing Link Electronics, Inc. ++ ++OUI:8C1F64489* ++ ID_OUI_FROM_DATABASE=HUPI ++ + OUI:8C1F64493* + ID_OUI_FROM_DATABASE=Security Products International, LLC + + OUI:8C1F64498* + ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd + ++OUI:8C1F644AC* ++ ID_OUI_FROM_DATABASE=Vekto ++ + OUI:8C1F644B0* + ID_OUI_FROM_DATABASE=U -MEI-DAH INT'L ENTERPRISE CO.,LTD. + +@@ -88529,6 +89867,9 @@ OUI:8C1F644C7* + OUI:8C1F644CD* + ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd. + ++OUI:8C1F644D6* ++ ID_OUI_FROM_DATABASE=Dan Smith LLC ++ + OUI:8C1F644DA* + ID_OUI_FROM_DATABASE=DTDS Technology Pte Ltd + +@@ -88538,6 +89879,12 @@ OUI:8C1F644DB* + OUI:8C1F644DD* + ID_OUI_FROM_DATABASE=Griffyn Robotech Private Limited + ++OUI:8C1F644E0* ++ ID_OUI_FROM_DATABASE=PuS GmbH und Co. KG ++ ++OUI:8C1F644E5* ++ ID_OUI_FROM_DATABASE=Renukas Castle Hard- and Software ++ + OUI:8C1F644EC* + ID_OUI_FROM_DATABASE=XOR UK Corporation Limited + +@@ -88547,6 +89894,9 @@ OUI:8C1F644F0* + OUI:8C1F644FA* + ID_OUI_FROM_DATABASE=Sanskruti + ++OUI:8C1F64504* ++ ID_OUI_FROM_DATABASE=EA Elektroautomatik GmbH & Co. KG ++ + OUI:8C1F6450A* + ID_OUI_FROM_DATABASE=BELLCO TRADING COMPANY (PVT) LTD + +@@ -88562,6 +89912,12 @@ OUI:8C1F64517* + OUI:8C1F64521* + ID_OUI_FROM_DATABASE=MP-SENSOR GmbH + ++OUI:8C1F64525* ++ ID_OUI_FROM_DATABASE=United States Technologies Inc. ++ ++OUI:8C1F6452D* ++ ID_OUI_FROM_DATABASE=Cubic ITS, Inc. dba GRIDSMART Technologies ++ + OUI:8C1F64534* + ID_OUI_FROM_DATABASE=SURYA ELECTRONICS + +@@ -88574,6 +89930,9 @@ OUI:8C1F64536* + OUI:8C1F6453A* + ID_OUI_FROM_DATABASE=TPVision Europe B.V + ++OUI:8C1F6453B* ++ ID_OUI_FROM_DATABASE=REFU Storage System GmbH ++ + OUI:8C1F6453D* + ID_OUI_FROM_DATABASE=NEXCONTECH + +@@ -88589,6 +89948,15 @@ OUI:8C1F64549* + OUI:8C1F6454C* + ID_OUI_FROM_DATABASE=Gemini Electronics B.V. + ++OUI:8C1F6454F* ++ ID_OUI_FROM_DATABASE=Toolplanet Co., Ltd. ++ ++OUI:8C1F64552* ++ ID_OUI_FROM_DATABASE=Proterra, Inc ++ ++OUI:8C1F64557* ++ ID_OUI_FROM_DATABASE=In-lite Design BV ++ + OUI:8C1F6455E* + ID_OUI_FROM_DATABASE=HANATEKSYSTEM + +@@ -88607,9 +89975,18 @@ OUI:8C1F6457A* + OUI:8C1F6457B* + ID_OUI_FROM_DATABASE=Potter Electric Signal Company + ++OUI:8C1F64581* ++ ID_OUI_FROM_DATABASE=SpectraDynamics, Inc. ++ ++OUI:8C1F6459F* ++ ID_OUI_FROM_DATABASE=Delta Computers LLC. ++ + OUI:8C1F645AE* + ID_OUI_FROM_DATABASE=Suzhou Motorcomm Electronic Technology Co., Ltd + ++OUI:8C1F645B3* ++ ID_OUI_FROM_DATABASE=eumig industrie-TV GmbH. ++ + OUI:8C1F645BC* + ID_OUI_FROM_DATABASE=HEITEC AG + +@@ -88640,6 +90017,12 @@ OUI:8C1F64619* + OUI:8C1F6461F* + ID_OUI_FROM_DATABASE=Lightworks GmbH + ++OUI:8C1F64622* ++ ID_OUI_FROM_DATABASE=Logical Product ++ ++OUI:8C1F64634* ++ ID_OUI_FROM_DATABASE=AML ++ + OUI:8C1F64638* + ID_OUI_FROM_DATABASE=THUNDER DATA TAIWAN CO., LTD. + +@@ -88664,15 +90047,27 @@ OUI:8C1F64656* + OUI:8C1F6465F* + ID_OUI_FROM_DATABASE=Astrometric Instruments, Inc. + ++OUI:8C1F64660* ++ ID_OUI_FROM_DATABASE=LLC NTPC ++ + OUI:8C1F64663* + ID_OUI_FROM_DATABASE=mal-tech Technological Solutions Ltd/CRISP + + OUI:8C1F6466C* + ID_OUI_FROM_DATABASE=LINEAGE POWER PVT LTD., + ++OUI:8C1F64672* ++ ID_OUI_FROM_DATABASE=Farmobile LLC ++ + OUI:8C1F64675* + ID_OUI_FROM_DATABASE=Transit Solutions, LLC. + ++OUI:8C1F6467A* ++ ID_OUI_FROM_DATABASE=MG s.r.l. ++ ++OUI:8C1F64697* ++ ID_OUI_FROM_DATABASE=Sontay Ltd. ++ + OUI:8C1F6469E* + ID_OUI_FROM_DATABASE=AT-Automation Technology GmbH + +@@ -88709,9 +90104,18 @@ OUI:8C1F646EA* + OUI:8C1F646F4* + ID_OUI_FROM_DATABASE=Elsist Srl + ++OUI:8C1F646F9* ++ ID_OUI_FROM_DATABASE=ANDDORO LLC ++ + OUI:8C1F646FC* + ID_OUI_FROM_DATABASE=HM Systems A/S + ++OUI:8C1F64702* ++ ID_OUI_FROM_DATABASE=AIDirections ++ ++OUI:8C1F64703* ++ ID_OUI_FROM_DATABASE=Calnex Solutions plc ++ + OUI:8C1F64707* + ID_OUI_FROM_DATABASE=OAS AG + +@@ -88724,6 +90128,9 @@ OUI:8C1F6470E* + OUI:8C1F64712* + ID_OUI_FROM_DATABASE=Nexion Data Systems P/L + ++OUI:8C1F64721* ++ ID_OUI_FROM_DATABASE=M/S MILIND RAMACHANDRA RAJWADE ++ + OUI:8C1F64726* + ID_OUI_FROM_DATABASE=DAVE SRL + +@@ -88733,6 +90140,9 @@ OUI:8C1F6472A* + OUI:8C1F6472C* + ID_OUI_FROM_DATABASE=Antai technology Co.,Ltd + ++OUI:8C1F6473C* ++ ID_OUI_FROM_DATABASE=REO AG ++ + OUI:8C1F6473D* + ID_OUI_FROM_DATABASE=NewAgeMicro + +@@ -88745,12 +90155,18 @@ OUI:8C1F64747* + OUI:8C1F6475F* + ID_OUI_FROM_DATABASE=ASTRACOM Co. Ltd + ++OUI:8C1F64765* ++ ID_OUI_FROM_DATABASE=Micro Electroninc Products ++ + OUI:8C1F64768* + ID_OUI_FROM_DATABASE=mapna group + + OUI:8C1F64774* + ID_OUI_FROM_DATABASE=navXperience GmbH + ++OUI:8C1F64775* ++ ID_OUI_FROM_DATABASE=Becton Dickinson ++ + OUI:8C1F6477C* + ID_OUI_FROM_DATABASE=Orange Tree Technologies Ltd + +@@ -88778,6 +90194,15 @@ OUI:8C1F647A1* + OUI:8C1F647A6* + ID_OUI_FROM_DATABASE=OTMetric + ++OUI:8C1F647A7* ++ ID_OUI_FROM_DATABASE=Timegate Instruments Ltd. ++ ++OUI:8C1F647AA* ++ ID_OUI_FROM_DATABASE=XSENSOR Technology Corp. ++ ++OUI:8C1F647B7* ++ ID_OUI_FROM_DATABASE=Weidmann Tecnologia Electrica de Mexico ++ + OUI:8C1F647B8* + ID_OUI_FROM_DATABASE=TimeMachines Inc. + +@@ -88790,12 +90215,18 @@ OUI:8C1F647C8* + OUI:8C1F647D2* + ID_OUI_FROM_DATABASE=Enlaps + ++OUI:8C1F647D3* ++ ID_OUI_FROM_DATABASE=Suntech Engineering ++ + OUI:8C1F647D6* + ID_OUI_FROM_DATABASE=Algodue Elettronica Srl + + OUI:8C1F647DD* + ID_OUI_FROM_DATABASE=TAKASAKI KYODO COMPUTING CENTER Co.,LTD. + ++OUI:8C1F647DE* ++ ID_OUI_FROM_DATABASE=SOCNOC AI Inc ++ + OUI:8C1F647EC* + ID_OUI_FROM_DATABASE=Methods2Business B.V. + +@@ -88805,12 +90236,18 @@ OUI:8C1F647F1* + OUI:8C1F64801* + ID_OUI_FROM_DATABASE=Zhejiang Laolan Information Technology Co., Ltd + ++OUI:8C1F64807* ++ ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA ++ + OUI:8C1F6481A* + ID_OUI_FROM_DATABASE=Gemini Electronics B.V. + + OUI:8C1F64820* + ID_OUI_FROM_DATABASE=TIAMA + ++OUI:8C1F64837* ++ ID_OUI_FROM_DATABASE=Rumble, Inc ++ + OUI:8C1F6483A* + ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG + +@@ -88820,9 +90257,15 @@ OUI:8C1F6483C* + OUI:8C1F64848* + ID_OUI_FROM_DATABASE=Jena-Optronik GmbH + ++OUI:8C1F6484C* ++ ID_OUI_FROM_DATABASE=AvMap srlu ++ + OUI:8C1F6484E* + ID_OUI_FROM_DATABASE=West Pharmaceutical Services, Inc. + ++OUI:8C1F64855* ++ ID_OUI_FROM_DATABASE=e.kundenservice Netz GmbH ++ + OUI:8C1F64856* + ID_OUI_FROM_DATABASE=Garten Automation + +@@ -88832,12 +90275,18 @@ OUI:8C1F6485B* + OUI:8C1F64878* + ID_OUI_FROM_DATABASE=Green Access Ltd + ++OUI:8C1F64883* ++ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH ++ + OUI:8C1F6488D* + ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd + + OUI:8C1F64892* + ID_OUI_FROM_DATABASE=MDI Industrial + ++OUI:8C1F6489E* ++ ID_OUI_FROM_DATABASE=Cinetix Srl ++ + OUI:8C1F648A4* + ID_OUI_FROM_DATABASE=Genesis Technologies AG + +@@ -88865,27 +90314,42 @@ OUI:8C1F648C2* + OUI:8C1F648C4* + ID_OUI_FROM_DATABASE=Hermes Network Inc + ++OUI:8C1F648CF* ++ ID_OUI_FROM_DATABASE=Diffraction Limited ++ + OUI:8C1F648D1* + ID_OUI_FROM_DATABASE=Orlaco Products B.V. + + OUI:8C1F648D4* + ID_OUI_FROM_DATABASE=Recab Sweden AB + ++OUI:8C1F648D9* ++ ID_OUI_FROM_DATABASE=Pietro Fiorentini Spa ++ + OUI:8C1F648E2* + ID_OUI_FROM_DATABASE=ALPHA Corporation + ++OUI:8C1F648E9* ++ ID_OUI_FROM_DATABASE=Vesperix Corporation ++ + OUI:8C1F648EE* + ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS + + OUI:8C1F64903* + ID_OUI_FROM_DATABASE=Portrait Displays, Inc. + ++OUI:8C1F64905* ++ ID_OUI_FROM_DATABASE=Qualitrol LLC ++ + OUI:8C1F64909* + ID_OUI_FROM_DATABASE=MATELEX + + OUI:8C1F6490E* + ID_OUI_FROM_DATABASE=Xacti Corporation + ++OUI:8C1F64911* ++ ID_OUI_FROM_DATABASE=EOLANE ++ + OUI:8C1F64918* + ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS + +@@ -88898,15 +90362,30 @@ OUI:8C1F6492A* + OUI:8C1F6492D* + ID_OUI_FROM_DATABASE=IVOR Intelligent Electrical Appliance Co., Ltd + ++OUI:8C1F64939* ++ ID_OUI_FROM_DATABASE=SPIT Technology, Inc ++ ++OUI:8C1F64943* ++ ID_OUI_FROM_DATABASE=Autark GmbH ++ + OUI:8C1F64947* + ID_OUI_FROM_DATABASE=LLC TC Vympel + ++OUI:8C1F6494E* ++ ID_OUI_FROM_DATABASE=Monnit Corporation ++ + OUI:8C1F64956* + ID_OUI_FROM_DATABASE=Paulmann Licht GmbH + ++OUI:8C1F64958* ++ ID_OUI_FROM_DATABASE=Sanchar Telesystems limited ++ + OUI:8C1F6495A* + ID_OUI_FROM_DATABASE=Shenzhen Longyun Lighting Electric Appliances Co., Ltd + ++OUI:8C1F64967* ++ ID_OUI_FROM_DATABASE=DAVE SRL ++ + OUI:8C1F64971* + ID_OUI_FROM_DATABASE=INFRASAFE/ ADVANTOR SYSTEMS + +@@ -88925,6 +90404,12 @@ OUI:8C1F64998* + OUI:8C1F649A6* + ID_OUI_FROM_DATABASE=INSTITUTO DE GESTÃO, REDES TECNOLÓGICAS E NERGIAS + ++OUI:8C1F649BA* ++ ID_OUI_FROM_DATABASE=WINTUS SYSTEM ++ ++OUI:8C1F649BD* ++ ID_OUI_FROM_DATABASE=ATM SOLUTIONS ++ + OUI:8C1F649C1* + ID_OUI_FROM_DATABASE=RealWear + +@@ -88937,6 +90422,9 @@ OUI:8C1F649CE* + OUI:8C1F649CF* + ID_OUI_FROM_DATABASE=ASAP Electronics GmbH + ++OUI:8C1F649D4* ++ ID_OUI_FROM_DATABASE=Wolfspyre Labs ++ + OUI:8C1F649D8* + ID_OUI_FROM_DATABASE=Integer.pl S.A. + +@@ -88946,6 +90434,9 @@ OUI:8C1F649F0* + OUI:8C1F649F2* + ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme + ++OUI:8C1F649FA* ++ ID_OUI_FROM_DATABASE=METRONA-Union GmbH ++ + OUI:8C1F649FD* + ID_OUI_FROM_DATABASE=Vishay Nobel AB + +@@ -88958,6 +90449,9 @@ OUI:8C1F64A01* + OUI:8C1F64A07* + ID_OUI_FROM_DATABASE=GJD Manufacturing + ++OUI:8C1F64A1B* ++ ID_OUI_FROM_DATABASE=Zilica Limited ++ + OUI:8C1F64A29* + ID_OUI_FROM_DATABASE=Ringtail Security + +@@ -88970,8 +90464,14 @@ OUI:8C1F64A32* + OUI:8C1F64A38* + ID_OUI_FROM_DATABASE=NuGrid Power + ++OUI:8C1F64A42* ++ ID_OUI_FROM_DATABASE=Rodgers Instruments US LLC ++ ++OUI:8C1F64A44* ++ ID_OUI_FROM_DATABASE=Rapidev Pvt Ltd ++ + OUI:8C1F64A4C* +- ID_OUI_FROM_DATABASE=Flextronics International Kft. ++ ID_OUI_FROM_DATABASE=Flextronics International Kft + + OUI:8C1F64A4E* + ID_OUI_FROM_DATABASE=Syscom Instruments SA +@@ -88982,12 +90482,27 @@ OUI:8C1F64A57* + OUI:8C1F64A5C* + ID_OUI_FROM_DATABASE=Prosys + ++OUI:8C1F64A5D* ++ ID_OUI_FROM_DATABASE=Shenzhen zhushida Technology lnformation Co.,Ltd ++ ++OUI:8C1F64A6A* ++ ID_OUI_FROM_DATABASE=Sphere Com Services Pvt Ltd ++ ++OUI:8C1F64A6D* ++ ID_OUI_FROM_DATABASE=CyberneX Co., Ltd ++ + OUI:8C1F64A76* + ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH + ++OUI:8C1F64A84* ++ ID_OUI_FROM_DATABASE=Beijing Wenrise Technology Co., Ltd. ++ + OUI:8C1F64A94* + ID_OUI_FROM_DATABASE=Future wave ultra tech Company + ++OUI:8C1F64A97* ++ ID_OUI_FROM_DATABASE=Integer.pl S.A. ++ + OUI:8C1F64A9A* + ID_OUI_FROM_DATABASE=Signasystems Elektronik San. ve Tic. Ltd. Sti. + +@@ -88997,9 +90512,18 @@ OUI:8C1F64AA4* + OUI:8C1F64AAB* + ID_OUI_FROM_DATABASE=BlueSword Intelligent Technology Co., Ltd. + ++OUI:8C1F64AB4* ++ ID_OUI_FROM_DATABASE=Beijing Zhongchen Microelectronics Co.,Ltd ++ + OUI:8C1F64AB5* + ID_OUI_FROM_DATABASE=JUSTMORPH PTE. LTD. + ++OUI:8C1F64AC0* ++ ID_OUI_FROM_DATABASE=AIQuatro ++ ++OUI:8C1F64AC5* ++ ID_OUI_FROM_DATABASE=Forever Engineering Systems Pvt. Ltd. ++ + OUI:8C1F64ACE* + ID_OUI_FROM_DATABASE=Rayhaan Networks + +@@ -89009,6 +90533,9 @@ OUI:8C1F64AD2* + OUI:8C1F64AE1* + ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd + ++OUI:8C1F64AE8* ++ ID_OUI_FROM_DATABASE=ADETEC SAS ++ + OUI:8C1F64AED* + ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme + +@@ -89018,6 +90545,9 @@ OUI:8C1F64AEF* + OUI:8C1F64AF7* + ID_OUI_FROM_DATABASE=ard sa + ++OUI:8C1F64B01* ++ ID_OUI_FROM_DATABASE=noah ++ + OUI:8C1F64B03* + ID_OUI_FROM_DATABASE=Shenzhen Pisoftware Technology Co.,Ltd. + +@@ -89033,6 +90563,9 @@ OUI:8C1F64B22* + OUI:8C1F64B2C* + ID_OUI_FROM_DATABASE=SANMINA ISRAEL MEDICAL SYSTEMS LTD + ++OUI:8C1F64B3B* ++ ID_OUI_FROM_DATABASE=Sicon srl ++ + OUI:8C1F64B3D* + ID_OUI_FROM_DATABASE=RealD, Inc. + +@@ -89051,6 +90584,12 @@ OUI:8C1F64B64* + OUI:8C1F64B77* + ID_OUI_FROM_DATABASE=Carestream Dental LLC + ++OUI:8C1F64B7B* ++ ID_OUI_FROM_DATABASE=Gateview Technologies ++ ++OUI:8C1F64B7C* ++ ID_OUI_FROM_DATABASE=EVERNET CO,.LTD TAIWAN ++ + OUI:8C1F64B82* + ID_OUI_FROM_DATABASE=Seed Core Co., LTD. + +@@ -89060,6 +90599,9 @@ OUI:8C1F64B84* + OUI:8C1F64B8D* + ID_OUI_FROM_DATABASE=Tongye lnnovation Science and Technology (Shenzhen) Co.,Ltd + ++OUI:8C1F64B92* ++ ID_OUI_FROM_DATABASE=Neurable ++ + OUI:8C1F64B97* + ID_OUI_FROM_DATABASE=Gemini Electronics B.V. + +@@ -89072,18 +90614,33 @@ OUI:8C1F64BA3* + OUI:8C1F64BC0* + ID_OUI_FROM_DATABASE=GS Elektromedizinsiche Geräte G. Stemple GmbH + ++OUI:8C1F64BC2* ++ ID_OUI_FROM_DATABASE=Huz Electronics Ltd ++ + OUI:8C1F64BC6* + ID_OUI_FROM_DATABASE=Chengdu ZiChen Time&Frequency Technology Co.,Ltd + ++OUI:8C1F64BD3* ++ ID_OUI_FROM_DATABASE=IO Master Technology ++ ++OUI:8C1F64BD6* ++ ID_OUI_FROM_DATABASE=NOVA Products GmbH ++ + OUI:8C1F64BD7* + ID_OUI_FROM_DATABASE=Union Electronic. + + OUI:8C1F64BEE* + ID_OUI_FROM_DATABASE=Sirius LLC + ++OUI:8C1F64BF0* ++ ID_OUI_FROM_DATABASE=Newtec A/S ++ + OUI:8C1F64BF4* + ID_OUI_FROM_DATABASE=Fluid Components Intl + ++OUI:8C1F64BFB* ++ ID_OUI_FROM_DATABASE=TechArgos ++ + OUI:8C1F64C01* + ID_OUI_FROM_DATABASE=HORIBA ABX SAS + +@@ -89096,6 +90653,9 @@ OUI:8C1F64C0C* + OUI:8C1F64C1F* + ID_OUI_FROM_DATABASE=Esys Srl + ++OUI:8C1F64C24* ++ ID_OUI_FROM_DATABASE=Alifax S.r.l. ++ + OUI:8C1F64C27* + ID_OUI_FROM_DATABASE=Lift Ventures, Inc + +@@ -89105,21 +90665,39 @@ OUI:8C1F64C28* + OUI:8C1F64C2F* + ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L. + ++OUI:8C1F64C38* ++ ID_OUI_FROM_DATABASE=ECO-ADAPT ++ + OUI:8C1F64C40* + ID_OUI_FROM_DATABASE=Sciospec Scientific Instruments GmbH + + OUI:8C1F64C41* + ID_OUI_FROM_DATABASE=Katronic AG & Co. KG + ++OUI:8C1F64C4C* ++ ID_OUI_FROM_DATABASE=Lumiplan Duhamel ++ + OUI:8C1F64C50* + ID_OUI_FROM_DATABASE=Spacee + + OUI:8C1F64C54* + ID_OUI_FROM_DATABASE=First Mode + ++OUI:8C1F64C68* ++ ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC ++ ++OUI:8C1F64C6B* ++ ID_OUI_FROM_DATABASE=Mediana ++ + OUI:8C1F64C7C* + ID_OUI_FROM_DATABASE=MERKLE Schweissanlagen-Technik GmbH + ++OUI:8C1F64C80* ++ ID_OUI_FROM_DATABASE=VECOS Europe B.V. ++ ++OUI:8C1F64C8F* ++ ID_OUI_FROM_DATABASE=JW Froehlich Maschinenfabrik GmbH ++ + OUI:8C1F64C97* + ID_OUI_FROM_DATABASE=Magnet-Physik Dr. Steingroever GmbH + +@@ -89135,12 +90713,18 @@ OUI:8C1F64CAD* + OUI:8C1F64CBE* + ID_OUI_FROM_DATABASE=Circa Enterprises Inc + ++OUI:8C1F64CCB* ++ ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD ++ + OUI:8C1F64CD6* + ID_OUI_FROM_DATABASE=USM Pty Ltd + + OUI:8C1F64CD8* + ID_OUI_FROM_DATABASE=Gogo Business Aviation + ++OUI:8C1F64CD9* ++ ID_OUI_FROM_DATABASE=Fingoti Limited ++ + OUI:8C1F64CDF* + ID_OUI_FROM_DATABASE=Canway Technology GmbH + +@@ -89159,6 +90743,12 @@ OUI:8C1F64CF1* + OUI:8C1F64CF3* + ID_OUI_FROM_DATABASE=ABB S.p.A. + ++OUI:8C1F64D02* ++ ID_OUI_FROM_DATABASE=Flextronics International Kft ++ ++OUI:8C1F64D08* ++ ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L. ++ + OUI:8C1F64D0E* + ID_OUI_FROM_DATABASE=Labforge Inc. + +@@ -89189,12 +90779,24 @@ OUI:8C1F64D54* + OUI:8C1F64D56* + ID_OUI_FROM_DATABASE=Wisdom Audio + ++OUI:8C1F64D69* ++ ID_OUI_FROM_DATABASE=ADiCo Corporation ++ + OUI:8C1F64D78* + ID_OUI_FROM_DATABASE=Hunan Oushi Electronic Technology Co.,Ltd + ++OUI:8C1F64D7C* ++ ID_OUI_FROM_DATABASE=QUERCUS TECHNOLOGIES, S.L. ++ + OUI:8C1F64D7E* + ID_OUI_FROM_DATABASE=Thales Belgium + ++OUI:8C1F64D92* ++ ID_OUI_FROM_DATABASE=Mitsubishi Electric India Pvt. Ltd. ++ ++OUI:8C1F64D9A* ++ ID_OUI_FROM_DATABASE=Beijing Redlink Information Technology Co., Ltd. ++ + OUI:8C1F64DAA* + ID_OUI_FROM_DATABASE=Davetech Limited + +@@ -89210,21 +90812,36 @@ OUI:8C1F64DB9* + OUI:8C1F64DBD* + ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA + ++OUI:8C1F64DC0* ++ ID_OUI_FROM_DATABASE=Pigs Can Fly Labs LLC ++ + OUI:8C1F64DC9* + ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG + + OUI:8C1F64DCA* + ID_OUI_FROM_DATABASE=Porsche engineering + ++OUI:8C1F64DD5* ++ ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co ++ + OUI:8C1F64DE1* + ID_OUI_FROM_DATABASE=Franke Aquarotter GmbH + ++OUI:8C1F64DF8* ++ ID_OUI_FROM_DATABASE=Wittra Networks AB ++ + OUI:8C1F64E02* + ID_OUI_FROM_DATABASE=ITS Teknik A/S + ++OUI:8C1F64E0E* ++ ID_OUI_FROM_DATABASE=Nokeval Oy ++ + OUI:8C1F64E21* + ID_OUI_FROM_DATABASE=LG-LHT Aircraft Solutions GmbH + ++OUI:8C1F64E30* ++ ID_OUI_FROM_DATABASE=VMukti Solutions Private Limited ++ + OUI:8C1F64E41* + ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG + +@@ -89234,6 +90851,9 @@ OUI:8C1F64E43* + OUI:8C1F64E49* + ID_OUI_FROM_DATABASE=Samwell International Inc + ++OUI:8C1F64E4C* ++ ID_OUI_FROM_DATABASE=TTC TELEKOMUNIKACE, s.r.o. ++ + OUI:8C1F64E52* + ID_OUI_FROM_DATABASE=LcmVeloci ApS + +@@ -89243,9 +90863,15 @@ OUI:8C1F64E5C* + OUI:8C1F64E5D* + ID_OUI_FROM_DATABASE=JinYuan International Corporation + ++OUI:8C1F64E5E* ++ ID_OUI_FROM_DATABASE=BRICKMAKERS GmbH ++ + OUI:8C1F64E61* + ID_OUI_FROM_DATABASE=Stange Elektronik GmbH + ++OUI:8C1F64E64* ++ ID_OUI_FROM_DATABASE=Indefac company ++ + OUI:8C1F64E73* + ID_OUI_FROM_DATABASE=GTR Industries + +@@ -89255,6 +90881,9 @@ OUI:8C1F64E77* + OUI:8C1F64E7B* + ID_OUI_FROM_DATABASE=Dongguan Pengchen Earth Instrument CO. LT + ++OUI:8C1F64E7C* ++ ID_OUI_FROM_DATABASE=Ashinne Technology Co., Ltd ++ + OUI:8C1F64E98* + ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD + +@@ -89270,6 +90899,9 @@ OUI:8C1F64EAC* + OUI:8C1F64EB2* + ID_OUI_FROM_DATABASE=Aqua Broadcast Ltd + ++OUI:8C1F64EB5* ++ ID_OUI_FROM_DATABASE=Meiryo Denshi Corp. ++ + OUI:8C1F64EB7* + ID_OUI_FROM_DATABASE=Delta Solutions LLC + +@@ -89285,9 +90917,15 @@ OUI:8C1F64EC1* + OUI:8C1F64ED4* + ID_OUI_FROM_DATABASE=ZHEJIANG CHITIC-SAFEWAY NEW ENERGY TECHNICAL CO.,LTD. + ++OUI:8C1F64ED9* ++ ID_OUI_FROM_DATABASE=NETGEN HITECH SOLUTIONS LLP ++ + OUI:8C1F64EE8* + ID_OUI_FROM_DATABASE=Global Organ Group B.V. + ++OUI:8C1F64EEA* ++ ID_OUI_FROM_DATABASE=AMESS ++ + OUI:8C1F64EEF* + ID_OUI_FROM_DATABASE=AiUnion Co.,Ltd + +@@ -89303,18 +90941,36 @@ OUI:8C1F64F04* + OUI:8C1F64F25* + ID_OUI_FROM_DATABASE=Misaka Network, Inc. + ++OUI:8C1F64F27* ++ ID_OUI_FROM_DATABASE=Tesat-Spacecom GmbH & Co. KG ++ ++OUI:8C1F64F2C* ++ ID_OUI_FROM_DATABASE=Tunstall A/S ++ + OUI:8C1F64F31* + ID_OUI_FROM_DATABASE=International Water Treatment Maritime AS + + OUI:8C1F64F32* + ID_OUI_FROM_DATABASE=Shenzhen INVT Electric Co.,Ltd + ++OUI:8C1F64F3C* ++ ID_OUI_FROM_DATABASE=Microlynx Systems Ltd ++ + OUI:8C1F64F3F* + ID_OUI_FROM_DATABASE=Industrial Laser Machines, LLC + + OUI:8C1F64F41* + ID_OUI_FROM_DATABASE=AUTOMATIZACION Y CONECTIVIDAD SA DE CV + ++OUI:8C1F64F45* ++ ID_OUI_FROM_DATABASE=JBF ++ ++OUI:8C1F64F4E* ++ ID_OUI_FROM_DATABASE=ADAMCZEWSKI elektronische Messtechnik GmbH ++ ++OUI:8C1F64F52* ++ ID_OUI_FROM_DATABASE=AMF Medical SA ++ + OUI:8C1F64F59* + ID_OUI_FROM_DATABASE=Inovonics Inc. + +@@ -89322,7 +90978,7 @@ OUI:8C1F64F5A* + ID_OUI_FROM_DATABASE=Telco Antennas Pty Ltd + + OUI:8C1F64F5C* +- ID_OUI_FROM_DATABASE=Flextronics International Kft. ++ ID_OUI_FROM_DATABASE=Flextronics International Kft + + OUI:8C1F64F72* + ID_OUI_FROM_DATABASE=Contrader +@@ -89333,6 +90989,9 @@ OUI:8C1F64F74* + OUI:8C1F64F78* + ID_OUI_FROM_DATABASE=Ternary Research Corporation + ++OUI:8C1F64F7A* ++ ID_OUI_FROM_DATABASE=SiEngine Technology Co., Ltd. ++ + OUI:8C1F64F86* + ID_OUI_FROM_DATABASE=INFOSTECH Co., Ltd. + +@@ -89345,12 +91004,21 @@ OUI:8C1F64F96* + OUI:8C1F64F9E* + ID_OUI_FROM_DATABASE=DREAMSWELL Technology CO.,Ltd + ++OUI:8C1F64FA2* ++ ID_OUI_FROM_DATABASE=AZD Praha s.r.o., ZOZ Olomouc ++ + OUI:8C1F64FB0* + ID_OUI_FROM_DATABASE=MARIAN GmbH + + OUI:8C1F64FB1* + ID_OUI_FROM_DATABASE=ABB + ++OUI:8C1F64FB7* ++ ID_OUI_FROM_DATABASE=Grace Design/Lunatec LLC ++ ++OUI:8C1F64FBA* ++ ID_OUI_FROM_DATABASE=Onto Innovation ++ + OUI:8C1F64FBD* + ID_OUI_FROM_DATABASE=SAN-AI Electronic Industries Co.,Ltd. + +@@ -89363,12 +91031,24 @@ OUI:8C1F64FD1* + OUI:8C1F64FD3* + ID_OUI_FROM_DATABASE=SMILICS TECHNOLOGIES, S.L. + ++OUI:8C1F64FD4* ++ ID_OUI_FROM_DATABASE=EMBSYS SISTEMAS EMBARCADOS ++ + OUI:8C1F64FE0* + ID_OUI_FROM_DATABASE=Potter Electric Signal Company + + OUI:8C1F64FE3* + ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L. + ++OUI:8C1F64FED* ++ ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH ++ ++OUI:8C1F64FF4* ++ ID_OUI_FROM_DATABASE=SMS group GmbH ++ ++OUI:8C1F64FF6* ++ ID_OUI_FROM_DATABASE=Ascon Tecnologic S.r.l. ++ + OUI:8C1F94* + ID_OUI_FROM_DATABASE=RF Surgical System Inc. + +@@ -89525,6 +91205,9 @@ OUI:8C4962* + OUI:8C497A* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:8C49B6* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:8C4AEE* + ID_OUI_FROM_DATABASE=GIGA TMS INC + +@@ -89720,6 +91403,9 @@ OUI:8C6A8D* + OUI:8C6AE4* + ID_OUI_FROM_DATABASE=Viogem Limited + ++OUI:8C6BDB* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:8C6D50* + ID_OUI_FROM_DATABASE=SHENZHEN MTC CO LTD + +@@ -89744,6 +91430,9 @@ OUI:8C736E* + OUI:8C73A0* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + ++OUI:8C763F* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:8C76C1* + ID_OUI_FROM_DATABASE=Goden Tech Limited + +@@ -89903,6 +91592,9 @@ OUI:8C965F* + OUI:8C97EA* + ID_OUI_FROM_DATABASE=FREEBOX SAS + ++OUI:8C9806* ++ ID_OUI_FROM_DATABASE=SHENZHEN SEI ROBOTICS CO.,LTD ++ + OUI:8C99E6* + ID_OUI_FROM_DATABASE=TCT mobile ltd + +@@ -90107,6 +91799,9 @@ OUI:8CC8F4D* + OUI:8CC8F4E* + ID_OUI_FROM_DATABASE=Evaporcool Solutions + ++OUI:8CCBDF* ++ ID_OUI_FROM_DATABASE=FOXCONN INTERCONNECT TECHNOLOGY ++ + OUI:8CCDA2* + ID_OUI_FROM_DATABASE=ACTP, Inc. + +@@ -90443,6 +92138,9 @@ OUI:902155* + OUI:902181* + ID_OUI_FROM_DATABASE=Shanghai Huaqin Telecom Technology Co.,Ltd + ++OUI:90235B* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:9023B4* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + +@@ -90467,6 +92165,9 @@ OUI:902BD2* + OUI:902CC7* + ID_OUI_FROM_DATABASE=C-MAX Asia Limited + ++OUI:902CFB* ++ ID_OUI_FROM_DATABASE=CanTops Co,.Ltd. ++ + OUI:902E16* + ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd + +@@ -90560,9 +92261,15 @@ OUI:904716* + OUI:90473C* + ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. + ++OUI:90486C* ++ ID_OUI_FROM_DATABASE=Ring LLC ++ + OUI:90489A* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:904992* ++ ID_OUI_FROM_DATABASE=YSTen Technology Co.,Ltd ++ + OUI:9049FA* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -90674,6 +92381,9 @@ OUI:905C44* + OUI:905D7C* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + ++OUI:905E44* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:905F2E* + ID_OUI_FROM_DATABASE=TCT mobile ltd + +@@ -90770,6 +92480,9 @@ OUI:907910* + OUI:907990* + ID_OUI_FROM_DATABASE=Benchmark Electronics Romania SRL + ++OUI:9079CF* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:907A0A* + ID_OUI_FROM_DATABASE=Gebr. Bode GmbH & Co KG + +@@ -90875,6 +92588,9 @@ OUI:909164* + OUI:9092B4* + ID_OUI_FROM_DATABASE=Diehl BGT Defence GmbH & Co. KG + ++OUI:90935A* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:90940A* + ID_OUI_FROM_DATABASE=Analog Devices, Inc + +@@ -91109,6 +92825,9 @@ OUI:90CC24* + OUI:90CCDF* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:90CD1F* ++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd. ++ + OUI:90CDB6* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -91124,6 +92843,9 @@ OUI:90CF7D* + OUI:90D11B* + ID_OUI_FROM_DATABASE=Palomar Medical Technologies + ++OUI:90D473* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:90D74F* + ID_OUI_FROM_DATABASE=Bookeen + +@@ -91157,6 +92879,9 @@ OUI:90DD5D* + OUI:90DE80* + ID_OUI_FROM_DATABASE=Shenzhen Century Xinyang Technology Co., Ltd + ++OUI:90DF7D* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:90DFB7* + ID_OUI_FROM_DATABASE=s.m.s smart microwave sensors GmbH + +@@ -91292,6 +93017,9 @@ OUI:90F652* + OUI:90F72F* + ID_OUI_FROM_DATABASE=Phillips Machine & Welding Co., Inc. + ++OUI:90F7B2* ++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd ++ + OUI:90F891* + ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD. + +@@ -91400,6 +93128,9 @@ OUI:9408C7* + OUI:940937* + ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. + ++OUI:9409C9* ++ ID_OUI_FROM_DATABASE=ALPSALPINE CO .,LTD ++ + OUI:9409D3* + ID_OUI_FROM_DATABASE=shenzhen maxtopic technology co.,ltd + +@@ -91886,6 +93617,9 @@ OUI:94AAB8* + OUI:94ABDE* + ID_OUI_FROM_DATABASE=OMX Technology - FZE + ++OUI:94ABFE* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:94ACCA* + ID_OUI_FROM_DATABASE=trivum technologies GmbH + +@@ -91982,6 +93716,9 @@ OUI:94C3E4* + OUI:94C4E9* + ID_OUI_FROM_DATABASE=PowerLayer Microsystems HongKong Limited + ++OUI:94C5A6* ++ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED ++ + OUI:94C691* + ID_OUI_FROM_DATABASE=EliteGroup Computer Systems Co., LTD + +@@ -92120,6 +93857,9 @@ OUI:94D299* + OUI:94D2BC* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:94D331* ++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd ++ + OUI:94D417* + ID_OUI_FROM_DATABASE=GPI KOREA INC. + +@@ -92801,6 +94541,9 @@ OUI:985945* + OUI:985949* + ID_OUI_FROM_DATABASE=LUXOTTICA GROUP S.P.A. + ++OUI:98597A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:985AEB* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -93185,6 +94928,9 @@ OUI:98A5F9* + OUI:98A7B0* + ID_OUI_FROM_DATABASE=MCST ZAO + ++OUI:98A92D* ++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd ++ + OUI:98A942* + ID_OUI_FROM_DATABASE=Guangzhou Tozed Kangwei Intelligent Technology Co., LTD + +@@ -93308,6 +95054,9 @@ OUI:98C5DB* + OUI:98C7A4* + ID_OUI_FROM_DATABASE=Shenzhen HS Fiber Communication Equipment CO., LTD + ++OUI:98C81C* ++ ID_OUI_FROM_DATABASE=BAYTEC LIMITED ++ + OUI:98C845* + ID_OUI_FROM_DATABASE=PacketAccess + +@@ -93371,6 +95120,9 @@ OUI:98D863* + OUI:98D88C* + ID_OUI_FROM_DATABASE=Nortel Networks + ++OUI:98D93D* ++ ID_OUI_FROM_DATABASE=Demant Enterprise A/S ++ + OUI:98DA92* + ID_OUI_FROM_DATABASE=Vuzix Corporation + +@@ -93449,6 +95201,9 @@ OUI:98F083* + OUI:98F0AB* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:98F112* ++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. ++ + OUI:98F170* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. + +@@ -93689,6 +95444,9 @@ OUI:9C1E95* + OUI:9C1EA4* + ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd. + ++OUI:9C1FCA* ++ ID_OUI_FROM_DATABASE=Hangzhou AlmightyDigit Technology Co., Ltd ++ + OUI:9C1FDD* + ID_OUI_FROM_DATABASE=Accupix Inc. + +@@ -93698,6 +95456,9 @@ OUI:9C207B* + OUI:9C216A* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:9C2183* ++ ID_OUI_FROM_DATABASE=Broadcom Limited ++ + OUI:9C220E* + ID_OUI_FROM_DATABASE=TASCAN Systems GmbH + +@@ -93852,7 +95613,7 @@ OUI:9C431ED* + ID_OUI_FROM_DATABASE=HK ELEPHONE Communication Tech Co.,Limited + + OUI:9C431EE* +- ID_OUI_FROM_DATABASE=Phoenix Audio Technologies ++ ID_OUI_FROM_DATABASE=SHURE INCORPORATED + + OUI:9C443D* + ID_OUI_FROM_DATABASE=CHENGDU XUGUANG TECHNOLOGY CO, LTD +@@ -93888,7 +95649,7 @@ OUI:9C4EBF* + ID_OUI_FROM_DATABASE=BoxCast + + OUI:9C4F5F* +- ID_OUI_FROM_DATABASE=TAP Sound System ++ ID_OUI_FROM_DATABASE=Google, Inc. + + OUI:9C4FCF* + ID_OUI_FROM_DATABASE=TCT mobile ltd +@@ -93935,6 +95696,9 @@ OUI:9C5711* + OUI:9C57AD* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:9C57BC* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:9C583C* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -94205,6 +95969,9 @@ OUI:9C93B0* + OUI:9C93E4* + ID_OUI_FROM_DATABASE=Private + ++OUI:9C9561* ++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD ++ + OUI:9C9567* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -94253,6 +96020,9 @@ OUI:9CA10A* + OUI:9CA134* + ID_OUI_FROM_DATABASE=Nike, Inc. + ++OUI:9CA2F4* ++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited ++ + OUI:9CA3A9* + ID_OUI_FROM_DATABASE=Guangzhou Juan Optical and Electronical Tech Joint Stock Co., Ltd + +@@ -94346,6 +96116,9 @@ OUI:9CBD9D* + OUI:9CBEE0* + ID_OUI_FROM_DATABASE=Biosoundlab Co., Ltd. + ++OUI:9CBFCD* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:9CC077* + ID_OUI_FROM_DATABASE=PrintCounts, LLC + +@@ -94439,6 +96212,9 @@ OUI:9CDF03* + OUI:9CDFB1* + ID_OUI_FROM_DATABASE=Shenzhen Crave Communication Co., LTD + ++OUI:9CE041* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:9CE063* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -94898,6 +96674,9 @@ OUI:A028ED* + OUI:A02919* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:A02942* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:A029BD* + ID_OUI_FROM_DATABASE=Team Group Inc + +@@ -95042,6 +96821,9 @@ OUI:A0423F* + OUI:A04246* + ID_OUI_FROM_DATABASE=IT Telecom Co., Ltd. + ++OUI:A042D1* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:A043B0* + ID_OUI_FROM_DATABASE=Hangzhou BroadLink Technology Co.,Ltd + +@@ -95051,6 +96833,9 @@ OUI:A043DB* + OUI:A0445C* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:A04466* ++ ID_OUI_FROM_DATABASE=Intellics ++ + OUI:A047D7* + ID_OUI_FROM_DATABASE=Best IT World (India) Pvt Ltd + +@@ -95459,6 +97244,9 @@ OUI:A0B5DA* + OUI:A0B662* + ID_OUI_FROM_DATABASE=Acutvista Innovation Co., Ltd. + ++OUI:A0B765* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:A0B8F8* + ID_OUI_FROM_DATABASE=Amgen U.S.A. Inc. + +@@ -95591,6 +97379,9 @@ OUI:A0C5F2E* + OUI:A0C6EC* + ID_OUI_FROM_DATABASE=ShenZhen ANYK Technology Co.,LTD + ++OUI:A0C98B* ++ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG ++ + OUI:A0C9A0* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. + +@@ -95729,6 +97520,9 @@ OUI:A0ECF9* + OUI:A0EDCD* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:A0EDFB* ++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd. ++ + OUI:A0EF84* + ID_OUI_FROM_DATABASE=Seine Image Int'l Co., Ltd + +@@ -95840,6 +97634,9 @@ OUI:A40DBC* + OUI:A40E2B* + ID_OUI_FROM_DATABASE=Facebook Inc + ++OUI:A40F98* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:A41115* + ID_OUI_FROM_DATABASE=Robert Bosch Engineering and Business Solutions pvt. Ltd. + +@@ -95942,6 +97739,9 @@ OUI:A41B34* + OUI:A41BC0* + ID_OUI_FROM_DATABASE=Fastec Imaging Corporation + ++OUI:A41EE1* ++ ID_OUI_FROM_DATABASE=Taicang T&W Electronics ++ + OUI:A41F72* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -96455,6 +98255,9 @@ OUI:A47E36* + OUI:A47E39* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:A47EFA* ++ ID_OUI_FROM_DATABASE=Withings ++ + OUI:A4817A* + ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD + +@@ -96497,6 +98300,9 @@ OUI:A48E0A* + OUI:A49005* + ID_OUI_FROM_DATABASE=CHINA GREATWALL COMPUTER SHENZHEN CO.,LTD + ++OUI:A490CE* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:A491B1* + ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV + +@@ -96734,6 +98540,9 @@ OUI:A4CEDA* + OUI:A4CF12* + ID_OUI_FROM_DATABASE=Espressif Inc. + ++OUI:A4CF99* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:A4CFD2* + ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited + +@@ -96845,6 +98654,9 @@ OUI:A4DB30* + OUI:A4DCBE* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:A4DD58* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:A4DE26* + ID_OUI_FROM_DATABASE=Sumitomo Electric Industries, Ltd + +@@ -96989,6 +98801,9 @@ OUI:A4F522* + OUI:A4F7D0* + ID_OUI_FROM_DATABASE=LAN Accessories Co., Ltd. + ++OUI:A4F933* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:A4F9E4* + ID_OUI_FROM_DATABASE=AirVine Scientific, Inc. + +@@ -97274,6 +99089,9 @@ OUI:A85081* + OUI:A8515B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:A851AB* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:A8537D* + ID_OUI_FROM_DATABASE=Mist Systems, Inc. + +@@ -97469,6 +99287,9 @@ OUI:A8776F* + OUI:A877E5* + ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD + ++OUI:A8798D* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:A87B39* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -97625,6 +99446,9 @@ OUI:A8A159* + OUI:A8A198* + ID_OUI_FROM_DATABASE=TCT mobile ltd + ++OUI:A8A237* ++ ID_OUI_FROM_DATABASE=Arcadyan Corporation ++ + OUI:A8A5E2* + ID_OUI_FROM_DATABASE=MSF-Vathauer Antriebstechnik GmbH & Co KG + +@@ -97644,7 +99468,10 @@ OUI:A8B088* + ID_OUI_FROM_DATABASE=eero inc. + + OUI:A8B0AE* +- ID_OUI_FROM_DATABASE=LEONI ++ ID_OUI_FROM_DATABASE=BizLink Special Cables Germany GmbH ++ ++OUI:A8B13B* ++ ID_OUI_FROM_DATABASE=HP Inc. + + OUI:A8B1D4* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc +@@ -97709,6 +99536,9 @@ OUI:A8C83A* + OUI:A8C87F* + ID_OUI_FROM_DATABASE=Roqos, Inc. + ++OUI:A8C98A* ++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd ++ + OUI:A8CA7B* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -97838,6 +99668,9 @@ OUI:A8F5DD* + OUI:A8F766* + ID_OUI_FROM_DATABASE=ITE Tech Inc + ++OUI:A8F7D9* ++ ID_OUI_FROM_DATABASE=Mist Systems, Inc. ++ + OUI:A8F7E0* + ID_OUI_FROM_DATABASE=PLANET Technology Corporation + +@@ -98054,12 +99887,18 @@ OUI:AC2334* + OUI:AC233F* + ID_OUI_FROM_DATABASE=Shenzhen Minew Technologies Co., Ltd. + ++OUI:AC2929* ++ ID_OUI_FROM_DATABASE=Infinix mobility limited ++ + OUI:AC293A* + ID_OUI_FROM_DATABASE=Apple, Inc. + + OUI:AC2A0C* + ID_OUI_FROM_DATABASE=CSR ZHUZHOU INSTITUTE CO.,LTD. + ++OUI:AC2AA1* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:AC2B6E* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -98201,6 +100040,9 @@ OUI:AC512C* + OUI:AC5135* + ID_OUI_FROM_DATABASE=MPI TECH + ++OUI:AC51AB* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:AC51EE* + ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd + +@@ -98375,6 +100217,9 @@ OUI:AC6FD9* + OUI:AC710C* + ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. + ++OUI:AC712E* ++ ID_OUI_FROM_DATABASE=Fortinet, Inc. ++ + OUI:AC7236* + ID_OUI_FROM_DATABASE=Lexking Technology Co., Ltd. + +@@ -98454,7 +100299,7 @@ OUI:AC83E9* + ID_OUI_FROM_DATABASE=Beijing Zile Technology Co., Ltd + + OUI:AC83F0* +- ID_OUI_FROM_DATABASE=ImmediaTV Corporation ++ ID_OUI_FROM_DATABASE=Cobalt Digital Inc. + + OUI:AC83F3* + ID_OUI_FROM_DATABASE=AMPAK Technology, Inc. +@@ -98501,6 +100346,9 @@ OUI:AC8D14* + OUI:AC8D34* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:AC8FA9* ++ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG ++ + OUI:AC8FF8* + ID_OUI_FROM_DATABASE=Nokia + +@@ -98558,6 +100406,9 @@ OUI:ACA22C* + OUI:ACA31E* + ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company + ++OUI:ACA32F* ++ ID_OUI_FROM_DATABASE=Solidigm Technology ++ + OUI:ACA430* + ID_OUI_FROM_DATABASE=Peerless AV + +@@ -98603,6 +100454,9 @@ OUI:ACB313* + OUI:ACB3B5* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:ACB566* ++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd. ++ + OUI:ACB57D* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -98636,6 +100490,9 @@ OUI:ACBE75* + OUI:ACBEB6* + ID_OUI_FROM_DATABASE=Visualedge Technology Co., Ltd. + ++OUI:ACBF71* ++ ID_OUI_FROM_DATABASE=Bose Corporation ++ + OUI:ACC1EE* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -98651,6 +100508,9 @@ OUI:ACC33A* + OUI:ACC358* + ID_OUI_FROM_DATABASE=Continental Automotive Czech Republic s.r.o. + ++OUI:ACC4BD* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:ACC51B* + ID_OUI_FROM_DATABASE=Zhuhai Pantum Electronics Co., Ltd. + +@@ -98690,6 +100550,9 @@ OUI:ACCB51* + OUI:ACCC8E* + ID_OUI_FROM_DATABASE=Axis Communications AB + ++OUI:ACCCFC* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:ACCE8F* + ID_OUI_FROM_DATABASE=HWA YAO TECHNOLOGIES CO., LTD + +@@ -98711,6 +100574,9 @@ OUI:ACD180* + OUI:ACD1B8* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:ACD31D* ++ ID_OUI_FROM_DATABASE=Cisco Meraki ++ + OUI:ACD364* + ID_OUI_FROM_DATABASE=ABB SPA, ABB SACE DIV. + +@@ -98990,9 +100856,15 @@ OUI:B01F81E* + OUI:B01F81F* + ID_OUI_FROM_DATABASE=Private + ++OUI:B01F8C* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:B0227A* + ID_OUI_FROM_DATABASE=HP Inc. + ++OUI:B02347* ++ ID_OUI_FROM_DATABASE=Shenzhen Giant Microelectronics Company Limited ++ + OUI:B02491* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -99011,6 +100883,9 @@ OUI:B02680* + OUI:B027CF* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:B0285B* ++ ID_OUI_FROM_DATABASE=JUHUA Technology Inc. ++ + OUI:B02A1F* + ID_OUI_FROM_DATABASE=Wingtech Group (HongKong)Limited + +@@ -99056,6 +100931,9 @@ OUI:B03850* + OUI:B03893* + ID_OUI_FROM_DATABASE=Onda TLC GmbH + ++OUI:B038E2* ++ ID_OUI_FROM_DATABASE=Wanan Hongsheng Electronic Co.Ltd ++ + OUI:B03956* + ID_OUI_FROM_DATABASE=NETGEAR + +@@ -99077,6 +100955,9 @@ OUI:B03E51* + OUI:B03EB0* + ID_OUI_FROM_DATABASE=MICRODIA Ltd. + ++OUI:B03F64* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:B04089* + ID_OUI_FROM_DATABASE=Senient Systems LTD + +@@ -99128,6 +101009,9 @@ OUI:B0495F* + OUI:B04A39* + ID_OUI_FROM_DATABASE=Beijing Roborock Technology Co., Ltd. + ++OUI:B04A6A* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:B04BBF* + ID_OUI_FROM_DATABASE=PT HAN SUNG ELECTORONICS INDONESIA + +@@ -99221,6 +101105,9 @@ OUI:B06A41* + OUI:B06CBF* + ID_OUI_FROM_DATABASE=3ality Digital Systems GmbH + ++OUI:B06E72* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:B06EBF* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + +@@ -99407,6 +101294,9 @@ OUI:B0A454* + OUI:B0A460* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:B0A4F0* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:B0A651* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -99446,6 +101336,9 @@ OUI:B0ADAA* + OUI:B0AE25* + ID_OUI_FROM_DATABASE=Varikorea + ++OUI:B0AFF7* ++ ID_OUI_FROM_DATABASE=Shenzhen Yipingfang Network Technology Co., Ltd. ++ + OUI:B0B113* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -99725,6 +101618,9 @@ OUI:B0E2E5* + OUI:B0E39D* + ID_OUI_FROM_DATABASE=CAT SYSTEM CO.,LTD. + ++OUI:B0E45C* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:B0E4D5* + ID_OUI_FROM_DATABASE=Google, Inc. + +@@ -99809,6 +101705,9 @@ OUI:B0F963* + OUI:B0FAEB* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:B0FBDD* ++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd. ++ + OUI:B0FC0D* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -99947,9 +101846,15 @@ OUI:B4157E* + OUI:B41780* + ID_OUI_FROM_DATABASE=DTI Group Ltd + ++OUI:B417A8* ++ ID_OUI_FROM_DATABASE=Facebook Technologies, LLC ++ + OUI:B418D1* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:B41974* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:B41A1D* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -100118,6 +102023,9 @@ OUI:B439D6* + OUI:B43A28* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:B43AE2* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:B43D08* + ID_OUI_FROM_DATABASE=GX International BV + +@@ -100277,6 +102185,9 @@ OUI:B467E9* + OUI:B46921* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:B4695F* ++ ID_OUI_FROM_DATABASE=TCT mobile ltd ++ + OUI:B46BFC* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -100295,6 +102206,9 @@ OUI:B46E08* + OUI:B46F2D* + ID_OUI_FROM_DATABASE=Wahoo Fitness + ++OUI:B47064* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:B47356* + ID_OUI_FROM_DATABASE=Hangzhou Treebear Networking Co., Ltd. + +@@ -100334,6 +102248,9 @@ OUI:B47C59* + OUI:B47C9C* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + ++OUI:B47D76* ++ ID_OUI_FROM_DATABASE=KNS Group LLC ++ + OUI:B47F5E* + ID_OUI_FROM_DATABASE=Foresight Manufacture (S) Pte Ltd + +@@ -100355,6 +102272,9 @@ OUI:B482C5* + OUI:B482FE* + ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP + ++OUI:B48351* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:B48547* + ID_OUI_FROM_DATABASE=Amptown System Company GmbH + +@@ -100418,6 +102338,9 @@ OUI:B49EAC* + OUI:B49EE6* + ID_OUI_FROM_DATABASE=SHENZHEN TECHNOLOGY CO LTD + ++OUI:B49F4D* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:B4A25C* + ID_OUI_FROM_DATABASE=Cambium Networks Limited + +@@ -100487,6 +102410,12 @@ OUI:B4A5AC* + OUI:B4A5EF* + ID_OUI_FROM_DATABASE=Sercomm Corporation. + ++OUI:B4A678* ++ ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd. ++ ++OUI:B4A7C6* ++ ID_OUI_FROM_DATABASE=SERVERCOM (INDIA) PRIVATE LIMITED ++ + OUI:B4A828* + ID_OUI_FROM_DATABASE=Shenzhen Concox Information Technology Co., Ltd + +@@ -100922,6 +102851,9 @@ OUI:B8208E* + OUI:B820E7* + ID_OUI_FROM_DATABASE=Guangzhou Horizontal Information & Network Integration Co. Ltd + ++OUI:B8211C* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:B8224F* + ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD + +@@ -101024,6 +102956,9 @@ OUI:B83D4E* + OUI:B83E59* + ID_OUI_FROM_DATABASE=Roku, Inc. + ++OUI:B83FD2* ++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. ++ + OUI:B8415F* + ID_OUI_FROM_DATABASE=ASP AG + +@@ -101063,6 +102998,9 @@ OUI:B84FD5* + OUI:B85001* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:B850D8* ++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd ++ + OUI:B853AC* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -101102,6 +103040,9 @@ OUI:B85AFE* + OUI:B85D0A* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:B85DC3* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:B85E7B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -101198,6 +103139,9 @@ OUI:B87C6F* + OUI:B87CF2* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:B87EE5* ++ ID_OUI_FROM_DATABASE=Intelbras ++ + OUI:B88035* + ID_OUI_FROM_DATABASE=Shenzhen Qihu Intelligent Technology Company Limited + +@@ -101348,6 +103292,9 @@ OUI:B89EA6* + OUI:B89F09* + ID_OUI_FROM_DATABASE=Wistron Neweb Corporation + ++OUI:B89FCC* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:B8A14A* + ID_OUI_FROM_DATABASE=Raisecom Technology CO.,LTD + +@@ -101405,6 +103352,9 @@ OUI:B8B2F8* + OUI:B8B3DC* + ID_OUI_FROM_DATABASE=DEREK (SHAOGUAN) LIMITED + ++OUI:B8B409* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:B8B42E* + ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co,Ltd.ShenZhen + +@@ -101543,6 +103493,9 @@ OUI:B8D526* + OUI:B8D56B* + ID_OUI_FROM_DATABASE=Mirka Ltd. + ++OUI:B8D61A* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:B8D6F6* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -101675,6 +103628,9 @@ OUI:B8F009* + OUI:B8F080* + ID_OUI_FROM_DATABASE=SPS, INC. + ++OUI:B8F0B9* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:B8F12A* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -102212,6 +104168,9 @@ OUI:BC6D05* + OUI:BC6E64* + ID_OUI_FROM_DATABASE=Sony Corporation + ++OUI:BC6E6D* ++ ID_OUI_FROM_DATABASE=EM Microelectronic ++ + OUI:BC6E76* + ID_OUI_FROM_DATABASE=Green Energy Options Ltd + +@@ -102533,6 +104492,12 @@ OUI:BCC61A* + OUI:BCC6DB* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:BCC746* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision IND.CO.,LTD ++ ++OUI:BCC7DA* ++ ID_OUI_FROM_DATABASE=Earda Technologies co Ltd ++ + OUI:BCC810* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -102566,6 +104531,9 @@ OUI:BCD177* + OUI:BCD1D3* + ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp. + ++OUI:BCD206* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:BCD295* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -102629,6 +104597,9 @@ OUI:BCE796* + OUI:BCE92F* + ID_OUI_FROM_DATABASE=HP Inc. + ++OUI:BCE9E2* ++ ID_OUI_FROM_DATABASE=Brocade Communications Systems LLC ++ + OUI:BCEA2B* + ID_OUI_FROM_DATABASE=CityCom GmbH + +@@ -102668,6 +104639,9 @@ OUI:BCF310* + OUI:BCF45F* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:BCF4D4* ++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ + OUI:BCF5AC* + ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications) + +@@ -102686,6 +104660,9 @@ OUI:BCF9F2* + OUI:BCFAB8* + ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited + ++OUI:BCFAEB* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:BCFE8C* + ID_OUI_FROM_DATABASE=Altronic, LLC + +@@ -102713,6 +104690,9 @@ OUI:C00380* + OUI:C005C2* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:C0060C* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:C006C3* + ID_OUI_FROM_DATABASE=TP-Link Corporation Limited + +@@ -102899,6 +104879,9 @@ OUI:C03DD9* + OUI:C03E0F* + ID_OUI_FROM_DATABASE=BSkyB Ltd + ++OUI:C03E50* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:C03EBA* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -103067,6 +105050,9 @@ OUI:C06C6D* + OUI:C06D1A* + ID_OUI_FROM_DATABASE=Tianjin Henxinhuifeng Technology Co.,Ltd. + ++OUI:C06DED* ++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. ++ + OUI:C07009* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -103199,6 +105185,9 @@ OUI:C08C60* + OUI:C08C71* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + ++OUI:C08D51* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:C08F20* + ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd + +@@ -103298,6 +105287,9 @@ OUI:C09F05* + OUI:C09F42* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:C09F51* ++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ + OUI:C09FE1* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -103346,12 +105338,18 @@ OUI:C0A66D* + OUI:C0A8F0* + ID_OUI_FROM_DATABASE=Adamson Systems Engineering + ++OUI:C0A938* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:C0AA68* + ID_OUI_FROM_DATABASE=OSASI Technos Inc. + + OUI:C0AC54* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:C0AD97* ++ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED ++ + OUI:C0AEFD* + ID_OUI_FROM_DATABASE=Shenzhen HC-WLAN Technology Co.,Ltd + +@@ -103412,6 +105410,9 @@ OUI:C0BFA7* + OUI:C0BFC0* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:C0C170* ++ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd. ++ + OUI:C0C1C0* + ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC + +@@ -103559,12 +105560,18 @@ OUI:C0DCD7* + OUI:C0DCDA* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:C0DD8A* ++ ID_OUI_FROM_DATABASE=Facebook Technologies, LLC ++ + OUI:C0DF77* + ID_OUI_FROM_DATABASE=Conrad Electronic SE + + OUI:C0E018* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:C0E01C* ++ ID_OUI_FROM_DATABASE=IoT Security Group, SL ++ + OUI:C0E1BE* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -103592,11 +105599,17 @@ OUI:C0E7BF* + OUI:C0E862* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:C0E911* ++ ID_OUI_FROM_DATABASE=Private ++ + OUI:C0EAE4* + ID_OUI_FROM_DATABASE=Sonicwall + ++OUI:C0EDE5* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:C0EE40* +- ID_OUI_FROM_DATABASE=Laird Technologies ++ ID_OUI_FROM_DATABASE=Laird Connectivity + + OUI:C0EEB5* + ID_OUI_FROM_DATABASE=Enice Network. +@@ -103925,6 +105938,9 @@ OUI:C436DA* + OUI:C43772* + ID_OUI_FROM_DATABASE=Virtuozzo International GmbH + ++OUI:C43875* ++ ID_OUI_FROM_DATABASE=Sonos, Inc. ++ + OUI:C438D3* + ID_OUI_FROM_DATABASE=TAGATEC CO.,LTD + +@@ -104402,6 +106418,51 @@ OUI:C49F4C* + OUI:C49FF3* + ID_OUI_FROM_DATABASE=Mciao Technologies, Inc. + ++OUI:C4A10E0* ++ ID_OUI_FROM_DATABASE=HYOSUNG HEAVY INDUSTRIES ++ ++OUI:C4A10E1* ++ ID_OUI_FROM_DATABASE=BARTEC PIXAVI AS ++ ++OUI:C4A10E2* ++ ID_OUI_FROM_DATABASE=Wistron InfoComn (Kunshan) Co., Ltd. ++ ++OUI:C4A10E3* ++ ID_OUI_FROM_DATABASE=Consolinno Energy GmbH ++ ++OUI:C4A10E4* ++ ID_OUI_FROM_DATABASE=Harbour Cross Technology Ltd ++ ++OUI:C4A10E5* ++ ID_OUI_FROM_DATABASE=O-NET Industrial Technologies (Shenzhen) Limited ++ ++OUI:C4A10E6* ++ ID_OUI_FROM_DATABASE=Hainan World Electronic Science and Techology Co.,Ltd ++ ++OUI:C4A10E7* ++ ID_OUI_FROM_DATABASE=Guangzhou South Satellite Navigation Instrument Co., Ltd. ++ ++OUI:C4A10E8* ++ ID_OUI_FROM_DATABASE=Ayla Networks (Shenzhen) Co., Ltd. ++ ++OUI:C4A10E9* ++ ID_OUI_FROM_DATABASE=XI'AN YEP TELECOM TECHNOLOGY CO.,LTD ++ ++OUI:C4A10EA* ++ ID_OUI_FROM_DATABASE=Jiangsu Perceive World Technology Co.,Ltd. ++ ++OUI:C4A10EB* ++ ID_OUI_FROM_DATABASE=Clinton Electronics Corporation ++ ++OUI:C4A10EC* ++ ID_OUI_FROM_DATABASE=Focus-on ++ ++OUI:C4A10ED* ++ ID_OUI_FROM_DATABASE=Connectlab SRL ++ ++OUI:C4A10EE* ++ ID_OUI_FROM_DATABASE=Alio, Inc ++ + OUI:C4A151* + ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD + +@@ -104486,6 +106547,9 @@ OUI:C4BED4* + OUI:C4BF60* + ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED + ++OUI:C4C063* ++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd ++ + OUI:C4C0AE* + ID_OUI_FROM_DATABASE=MIDORI ELECTRONIC CO., LTD. + +@@ -104570,6 +106634,12 @@ OUI:C4DD57* + OUI:C4DE7B* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:C4DEE2* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ ++OUI:C4DF39* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:C4E032* + ID_OUI_FROM_DATABASE=IEEE 1904.1 Working Group + +@@ -104789,6 +106859,9 @@ OUI:C80E95* + OUI:C81073* + ID_OUI_FROM_DATABASE=CENTURY OPTICOMM CO.,LTD + ++OUI:C8120B* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:C8138B* + ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd + +@@ -104852,6 +106925,9 @@ OUI:C82158* + OUI:C821DA* + ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd + ++OUI:C82496* ++ ID_OUI_FROM_DATABASE=Jiangsu Yinhe Electronics Co.,Ltd. ++ + OUI:C825E1* + ID_OUI_FROM_DATABASE=Lemobile Information Technology (Beijing) Co., Ltd + +@@ -105149,6 +107225,9 @@ OUI:C869CD* + OUI:C86C1E* + ID_OUI_FROM_DATABASE=Display Systems Ltd + ++OUI:C86C20* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:C86C3D* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -105344,6 +107423,9 @@ OUI:C89D18* + OUI:C89E43* + ID_OUI_FROM_DATABASE=NETGEAR + ++OUI:C89E61* ++ ID_OUI_FROM_DATABASE=Lyngsoe Systems LTd ++ + OUI:C89F1A* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -105431,6 +107513,9 @@ OUI:C8B5B7* + OUI:C8B6D3* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:C8B82F* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:C8BA94* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + +@@ -105461,6 +107546,9 @@ OUI:C8BD69* + OUI:C8BE19* + ID_OUI_FROM_DATABASE=D-Link International + ++OUI:C8BE35* ++ ID_OUI_FROM_DATABASE=Extreme Networks, Inc. ++ + OUI:C8BFFE* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -105551,6 +107639,9 @@ OUI:C8D5FE* + OUI:C8D69D* + ID_OUI_FROM_DATABASE=Arab International Optronics + ++OUI:C8D6B7* ++ ID_OUI_FROM_DATABASE=Solidigm Technology ++ + OUI:C8D719* + ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC + +@@ -105617,6 +107708,9 @@ OUI:C8E7F0* + OUI:C8EAF8* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:C8EBEC* ++ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd ++ + OUI:C8EE08* + ID_OUI_FROM_DATABASE=TANGTOP TECHNOLOGY CO.,LTD + +@@ -105629,6 +107723,9 @@ OUI:C8EEA6* + OUI:C8EF2E* + ID_OUI_FROM_DATABASE=Beijing Gefei Tech. Co., Ltd + ++OUI:C8F09E* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:C8F230* + ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + +@@ -106034,6 +108131,9 @@ OUI:CC3D82* + OUI:CC3E5F* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:CC3E79* ++ ID_OUI_FROM_DATABASE=ARRIS Group, Inc. ++ + OUI:CC3F1D* + ID_OUI_FROM_DATABASE=HMS Industrial Networks SLU + +@@ -106067,6 +108167,9 @@ OUI:CC46D6* + OUI:CC4703* + ID_OUI_FROM_DATABASE=Intercon Systems Co., Ltd. + ++OUI:CC4792* ++ ID_OUI_FROM_DATABASE=ASIX Electronics Corporation ++ + OUI:CC47BD* + ID_OUI_FROM_DATABASE=Rhombus Systems + +@@ -106131,7 +108234,7 @@ OUI:CC4F5CD* + ID_OUI_FROM_DATABASE=Beijing Neutron Technology CO.,LTD. + + OUI:CC4F5CE* +- ID_OUI_FROM_DATABASE=Buttons (Beijing) Technology Limited ++ ID_OUI_FROM_DATABASE=Beijing Techao Weijia Technology Limited + + OUI:CC500A* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD +@@ -106196,6 +108299,9 @@ OUI:CC5FBF* + OUI:CC60BB* + ID_OUI_FROM_DATABASE=Empower RF Systems + ++OUI:CC60C8* ++ ID_OUI_FROM_DATABASE=Microsoft Corporation ++ + OUI:CC61E5* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + +@@ -106208,6 +108314,9 @@ OUI:CC65AD* + OUI:CC660A* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:CC6618* ++ ID_OUI_FROM_DATABASE=Adtran Inc ++ + OUI:CC66B2* + ID_OUI_FROM_DATABASE=Nokia + +@@ -106307,6 +108416,9 @@ OUI:CC812A* + OUI:CC81DA* + ID_OUI_FROM_DATABASE=Phicomm (Shanghai) Co., Ltd. + ++OUI:CC827F* ++ ID_OUI_FROM_DATABASE=Advantech Technology (CHINA) Co., Ltd. ++ + OUI:CC82EB* + ID_OUI_FROM_DATABASE=KYOCERA CORPORATION + +@@ -106736,9 +108848,15 @@ OUI:CCDB04* + OUI:CCDB93* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:CCDBA7* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:CCDC55* + ID_OUI_FROM_DATABASE=Dragonchip Limited + ++OUI:CCDD58* ++ ID_OUI_FROM_DATABASE=Robert Bosch GmbH ++ + OUI:CCE0C3* + ID_OUI_FROM_DATABASE=EXTEN Technologies, Inc. + +@@ -106793,6 +108911,9 @@ OUI:CCEF48* + OUI:CCF0FD* + ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd. + ++OUI:CCF305* ++ ID_OUI_FROM_DATABASE=SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD ++ + OUI:CCF3A5* + ID_OUI_FROM_DATABASE=Chi Mei Communication Systems, Inc + +@@ -106998,7 +109119,7 @@ OUI:D01E1D* + ID_OUI_FROM_DATABASE=SaiNXT Technologies LLP + + OUI:D021AC* +- ID_OUI_FROM_DATABASE=Yo Labs LLC ++ ID_OUI_FROM_DATABASE=Yohana + + OUI:D021F9* + ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc. +@@ -107525,6 +109646,9 @@ OUI:D096FB* + OUI:D097FE* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + ++OUI:D0989C* ++ ID_OUI_FROM_DATABASE=ConMet ++ + OUI:D099D5* + ID_OUI_FROM_DATABASE=Alcatel-Lucent + +@@ -107597,6 +109721,9 @@ OUI:D0A0D6* + OUI:D0A311* + ID_OUI_FROM_DATABASE=Neuberger Gebäudeautomation GmbH + ++OUI:D0A46F* ++ ID_OUI_FROM_DATABASE=China Dragon Technology Limited ++ + OUI:D0A4B1* + ID_OUI_FROM_DATABASE=Sonifex Ltd. + +@@ -107945,6 +110072,9 @@ OUI:D0FA1D* + OUI:D0FCCC* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:D0FCD0* ++ ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. ++ + OUI:D0FF50* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -108215,6 +110345,9 @@ OUI:D440F0* + OUI:D44165* + ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD + ++OUI:D4430E* ++ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd. ++ + OUI:D443A8* + ID_OUI_FROM_DATABASE=Changzhou Haojie Electric Co., Ltd. + +@@ -108299,6 +110432,9 @@ OUI:D45763* + OUI:D45800* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + ++OUI:D45A3F* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:D45AB2* + ID_OUI_FROM_DATABASE=Galleon Systems + +@@ -108677,6 +110813,9 @@ OUI:D4A148* + OUI:D4A33D* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:D4A3EB* ++ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD ++ + OUI:D4A425* + ID_OUI_FROM_DATABASE=SMAX Technology Co., Ltd. + +@@ -108758,6 +110897,9 @@ OUI:D4BBE6* + OUI:D4BD1E* + ID_OUI_FROM_DATABASE=5VT Technologies,Taiwan LTd. + ++OUI:D4BD4F* ++ ID_OUI_FROM_DATABASE=Ruckus Wireless ++ + OUI:D4BED9* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -108845,6 +110987,9 @@ OUI:D4D7A9* + OUI:D4D7CF* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + ++OUI:D4D853* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:D4D898* + ID_OUI_FROM_DATABASE=Korea CNO Tech Co., Ltd + +@@ -108863,9 +111008,15 @@ OUI:D4DCCD* + OUI:D4DF57* + ID_OUI_FROM_DATABASE=Alpinion Medical Systems + ++OUI:D4E053* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:D4E08E* + ID_OUI_FROM_DATABASE=ValueHD Corporation + ++OUI:D4E22F* ++ ID_OUI_FROM_DATABASE=Roku, Inc ++ + OUI:D4E2CB* + ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. + +@@ -108920,6 +111071,9 @@ OUI:D4F057* + OUI:D4F0B4* + ID_OUI_FROM_DATABASE=Napco Security Technologies + ++OUI:D4F0EA* ++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd ++ + OUI:D4F143* + ID_OUI_FROM_DATABASE=IPROAD.,Inc + +@@ -109019,6 +111173,9 @@ OUI:D80DE3* + OUI:D80F99* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:D81068* ++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. ++ + OUI:D8109F* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -109158,7 +111315,10 @@ OUI:D833B7* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + + OUI:D834EE* +- ID_OUI_FROM_DATABASE=Stem Audio ++ ID_OUI_FROM_DATABASE=SHURE INCORPORATED ++ ++OUI:D8365F* ++ ID_OUI_FROM_DATABASE=Intelbras + + OUI:D8373B* + ID_OUI_FROM_DATABASE=Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd +@@ -109409,6 +111569,9 @@ OUI:D8803C* + OUI:D88083* + ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + ++OUI:D880DC* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:D881CE* + ID_OUI_FROM_DATABASE=AHN INC. + +@@ -109463,6 +111626,9 @@ OUI:D8860BE* + OUI:D887D5* + ID_OUI_FROM_DATABASE=Leadcore Technology CO.,LTD + ++OUI:D88863* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:D888CE* + ID_OUI_FROM_DATABASE=RF Technology Pty Ltd + +@@ -109544,6 +111710,9 @@ OUI:D89B3B* + OUI:D89C67* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:D89C8E* ++ ID_OUI_FROM_DATABASE=Comcast Cable Corporation ++ + OUI:D89D67* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -109820,6 +111989,9 @@ OUI:D8E0B8* + OUI:D8E0E1* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:D8E2DF* ++ ID_OUI_FROM_DATABASE=Microsoft Corporation ++ + OUI:D8E3AE* + ID_OUI_FROM_DATABASE=CIRTEC MEDICAL SYSTEMS + +@@ -110090,6 +112262,9 @@ OUI:DC3350* + OUI:DC35F1* + ID_OUI_FROM_DATABASE=Positivo Tecnologia S.A. + ++OUI:DC360C* ++ ID_OUI_FROM_DATABASE=Hitron Technologies. Inc ++ + OUI:DC36430* + ID_OUI_FROM_DATABASE=Meier Tobler AG + +@@ -110330,6 +112505,9 @@ OUI:DC5392* + OUI:DC543D* + ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED + ++OUI:DC5475* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:DC54D7* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -110411,6 +112589,9 @@ OUI:DC7144* + OUI:DC7196* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:DC71DD* ++ ID_OUI_FROM_DATABASE=AX Technologies ++ + OUI:DC7223* + ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD + +@@ -110471,6 +112652,9 @@ OUI:DC8C37* + OUI:DC8D8A* + ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG + ++OUI:DC8E95* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:DC9020* + ID_OUI_FROM_DATABASE=RURU TEK PRIVATE LIMITED + +@@ -110501,6 +112685,9 @@ OUI:DC9914* + OUI:DC99FE* + ID_OUI_FROM_DATABASE=Armatura LLC + ++OUI:DC9A7D* ++ ID_OUI_FROM_DATABASE=HISENSE VISUAL TECHNOLOGY CO.,LTD ++ + OUI:DC9A8E* + ID_OUI_FROM_DATABASE=Nanjing Cocomm electronics co., LTD + +@@ -110567,6 +112754,9 @@ OUI:DCA8CF* + OUI:DCA904* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:DCA956* ++ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ + OUI:DCA971* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -110621,6 +112811,9 @@ OUI:DCBB96* + OUI:DCBD7A* + ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited + ++OUI:DCBE49* ++ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED ++ + OUI:DCBE7A* + ID_OUI_FROM_DATABASE=Zhejiang Nurotron Biotechnology Co. + +@@ -110912,6 +113105,9 @@ OUI:E00084* + OUI:E002A5* + ID_OUI_FROM_DATABASE=ABB Robotics + ++OUI:E0036B* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:E00370* + ID_OUI_FROM_DATABASE=ShenZhen Continental Wireless Technology Co., Ltd. + +@@ -111044,12 +113240,18 @@ OUI:E02636* + OUI:E0271A* + ID_OUI_FROM_DATABASE=TTC Next-generation Home Network System WG + ++OUI:E0276C* ++ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited ++ + OUI:E02861* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + + OUI:E0286D* + ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH + ++OUI:E028B1* ++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd ++ + OUI:E02967* + ID_OUI_FROM_DATABASE=HMD Global Oy + +@@ -111152,12 +113354,18 @@ OUI:E0469A* + OUI:E046E5* + ID_OUI_FROM_DATABASE=Gosuncn Technology Group Co., Ltd. + ++OUI:E046EE* ++ ID_OUI_FROM_DATABASE=NETGEAR ++ + OUI:E048AF* + ID_OUI_FROM_DATABASE=Premietech Limited + + OUI:E048D3* + ID_OUI_FROM_DATABASE=MOBIWIRE MOBILES (NINGBO) CO.,LTD + ++OUI:E048D8* ++ ID_OUI_FROM_DATABASE=Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++ + OUI:E049ED* + ID_OUI_FROM_DATABASE=Audeze LLC + +@@ -111302,12 +113510,18 @@ OUI:E06995* + OUI:E069BA* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:E06A05* ++ ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd ++ + OUI:E06C4E* + ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp. + + OUI:E06CA6* + ID_OUI_FROM_DATABASE=Creotech Instruments S.A. + ++OUI:E06CC5* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:E06CF6* + ID_OUI_FROM_DATABASE=ESSENCORE limited + +@@ -111347,6 +113561,9 @@ OUI:E078A3* + OUI:E0795E* + ID_OUI_FROM_DATABASE=Wuxi Xiaohu Technology Co.,Ltd. + ++OUI:E0798D* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:E079C4* + ID_OUI_FROM_DATABASE=iRay Technology Company Limited + +@@ -111368,6 +113585,9 @@ OUI:E07F53* + OUI:E07F88* + ID_OUI_FROM_DATABASE=EVIDENCE Network SIA + ++OUI:E0806B* ++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd ++ + OUI:E08177* + ID_OUI_FROM_DATABASE=GreenBytes, Inc. + +@@ -111434,6 +113654,9 @@ OUI:E09861* + OUI:E09971* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:E09C8D* ++ ID_OUI_FROM_DATABASE=Seakeeper, Inc. ++ + OUI:E09D13* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -111716,6 +113939,9 @@ OUI:E0D4E8* + OUI:E0D55E* + ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. + ++OUI:E0D738* ++ ID_OUI_FROM_DATABASE=WireStar Networks ++ + OUI:E0D7BA* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -111833,6 +114059,9 @@ OUI:E0F5CA* + OUI:E0F62D* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:E0F678* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:E0F6B5* + ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd + +@@ -112379,6 +114608,9 @@ OUI:E48F34* + OUI:E48F65* + ID_OUI_FROM_DATABASE=Yelatma Instrument Making Enterprise, JSC + ++OUI:E4902A* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:E49069* + ID_OUI_FROM_DATABASE=Rockwell Automation + +@@ -112544,6 +114776,9 @@ OUI:E4B318* + OUI:E4B503* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + ++OUI:E4B633* ++ ID_OUI_FROM_DATABASE=Wuxi Stars Microsystem Technology Co., Ltd ++ + OUI:E4B97A* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -112994,6 +115229,9 @@ OUI:E839DF* + OUI:E83A12* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:E83A4B* ++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. ++ + OUI:E83A97* + ID_OUI_FROM_DATABASE=Toshiba Corporation + +@@ -113042,6 +115280,9 @@ OUI:E84D74* + OUI:E84DD0* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:E84DEC* ++ ID_OUI_FROM_DATABASE=Xerox Corporation ++ + OUI:E84E06* + ID_OUI_FROM_DATABASE=EDUP INTERNATIONAL (HK) CO., LTD + +@@ -113306,6 +115547,9 @@ OUI:E88152* + OUI:E88175* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:E881AB* ++ ID_OUI_FROM_DATABASE=Beijing Sankuai Online Technology Co.,Ltd ++ + OUI:E8825B* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -113468,6 +115712,9 @@ OUI:E8B2AC* + OUI:E8B2FE* + ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. + ++OUI:E8B3EF* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:E8B4700* + ID_OUI_FROM_DATABASE=DongGuan Ramaxel Memory Technology + +@@ -113633,6 +115880,9 @@ OUI:E8D765* + OUI:E8D819* + ID_OUI_FROM_DATABASE=AzureWave Technology Inc. + ++OUI:E8D87E* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:E8D8D1* + ID_OUI_FROM_DATABASE=HP Inc. + +@@ -113651,6 +115901,9 @@ OUI:E8DAAA* + OUI:E8DB84* + ID_OUI_FROM_DATABASE=Espressif Inc. + ++OUI:E8DC6C* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:E8DE00* + ID_OUI_FROM_DATABASE=ChongQing GuanFang Technology Co.,LTD + +@@ -113723,6 +115976,9 @@ OUI:E8EB1B* + OUI:E8EB34* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:E8EBD3* ++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. ++ + OUI:E8ECA3* + ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co.Ltd + +@@ -113765,6 +116021,9 @@ OUI:E8F654* + OUI:E8F724* + ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise + ++OUI:E8F791* ++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd ++ + OUI:E8F928* + ID_OUI_FROM_DATABASE=RFTECH SRL + +@@ -113777,6 +116036,9 @@ OUI:E8FA23* + OUI:E8FAF7* + ID_OUI_FROM_DATABASE=Guangdong Uniteddata Holding Group Co., Ltd. + ++OUI:E8FB1C* ++ ID_OUI_FROM_DATABASE=AzureWave Technology Inc. ++ + OUI:E8FBE9* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -113885,6 +116147,9 @@ OUI:EC1D8B* + OUI:EC1F72* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + ++OUI:EC2125* ++ ID_OUI_FROM_DATABASE=Toshiba Corp. ++ + OUI:EC219F* + ID_OUI_FROM_DATABASE=VidaBox LLC + +@@ -113945,6 +116210,9 @@ OUI:EC2E98* + OUI:EC3091* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:EC30B3* ++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd ++ + OUI:EC316D* + ID_OUI_FROM_DATABASE=Hansgrohe + +@@ -114002,6 +116270,9 @@ OUI:EC4269* + OUI:EC42B4* + ID_OUI_FROM_DATABASE=ADC Corporation + ++OUI:EC42CC* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:EC42F0* + ID_OUI_FROM_DATABASE=ADL Embedded Solutions, Inc. + +@@ -114053,6 +116324,9 @@ OUI:EC52DC* + OUI:EC542E* + ID_OUI_FROM_DATABASE=Shanghai XiMei Electronic Technology Co. Ltd + ++OUI:EC551C* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:EC55F9* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -114086,9 +116360,15 @@ OUI:EC5C84* + OUI:EC5F23* + ID_OUI_FROM_DATABASE=Qinghai Kimascend Electronics Technology Co. Ltd. + ++OUI:EC6073* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:EC60E0* + ID_OUI_FROM_DATABASE=AVI-ON LABS + ++OUI:EC6260* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:EC6264* + ID_OUI_FROM_DATABASE=Global411 Internet Services, LLC + +@@ -114182,6 +116462,9 @@ OUI:EC8009* + OUI:EC8193* + ID_OUI_FROM_DATABASE=Logitech, Inc + ++OUI:EC819C* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:EC8263* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -114986,6 +117269,9 @@ OUI:F04CD5* + OUI:F04DA2* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:F04DD4* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:F04F7C* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + +@@ -115076,6 +117362,9 @@ OUI:F06865* + OUI:F06BCA* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:F06C5D* ++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd ++ + OUI:F06C73* + ID_OUI_FROM_DATABASE=Nokia + +@@ -115178,6 +117467,9 @@ OUI:F085C1* + OUI:F08620* + ID_OUI_FROM_DATABASE=Arcadyan Corporation + ++OUI:F0877F* ++ ID_OUI_FROM_DATABASE=Magnetar Technology Shenzhen Co., LTD. ++ + OUI:F08A28* + ID_OUI_FROM_DATABASE=JIANGSU HENGSION ELECTRONIC S and T CO.,LTD + +@@ -115400,6 +117692,9 @@ OUI:F0B5D1* + OUI:F0B61E* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:F0B661* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:F0B6EB* + ID_OUI_FROM_DATABASE=Poslab Technology Co., Ltd. + +@@ -115454,6 +117749,9 @@ OUI:F0C850* + OUI:F0C88C* + ID_OUI_FROM_DATABASE=LeddarTech Inc. + ++OUI:F0C8B5* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:F0C9D1* + ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd. + +@@ -115484,6 +117782,9 @@ OUI:F0D3A7* + OUI:F0D3E7* + ID_OUI_FROM_DATABASE=Sensometrix SA + ++OUI:F0D415* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:F0D4E2* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -116135,9 +118436,15 @@ OUI:F46B8C* + OUI:F46BEF* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:F46C68* ++ ID_OUI_FROM_DATABASE=Wistron Neweb Corporation ++ + OUI:F46D04* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + ++OUI:F46D2F* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:F46DE2* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -116252,6 +118559,9 @@ OUI:F483E1* + OUI:F4844C* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:F4848D* ++ ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. ++ + OUI:F485C6* + ID_OUI_FROM_DATABASE=FDT Technologies + +@@ -116462,6 +118772,9 @@ OUI:F4B301* + OUI:F4B381* + ID_OUI_FROM_DATABASE=WindowMaster A/S + ++OUI:F4B3B1* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:F4B520* + ID_OUI_FROM_DATABASE=Biostar Microtech international corp. + +@@ -116558,6 +118871,9 @@ OUI:F4C7AA* + OUI:F4C7C8* + ID_OUI_FROM_DATABASE=Kelvin Inc. + ++OUI:F4C88A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:F4CA24* + ID_OUI_FROM_DATABASE=FreeBit Co., Ltd. + +@@ -116652,7 +118968,7 @@ OUI:F4E142* + ID_OUI_FROM_DATABASE=Delta Elektronika BV + + OUI:F4E204* +- ID_OUI_FROM_DATABASE=Traqueur ++ ID_OUI_FROM_DATABASE=COYOTE SYSTEM + + OUI:F4E2C6* + ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc. +@@ -117161,6 +119477,9 @@ OUI:F84DFC* + OUI:F84E17* + ID_OUI_FROM_DATABASE=Sony Corporation + ++OUI:F84E58* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:F84E73* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -117194,6 +119513,9 @@ OUI:F854AF* + OUI:F854B8* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + ++OUI:F85548* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:F855CD* + ID_OUI_FROM_DATABASE=Visteon Corporation + +@@ -117227,6 +119549,9 @@ OUI:F85C4D* + OUI:F85C7D* + ID_OUI_FROM_DATABASE=Shenzhen Honesty Electronics Co.,Ltd. + ++OUI:F85E0B* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:F85E3C* + ID_OUI_FROM_DATABASE=SHENZHEN ZHIBOTONG ELECTRONICS CO.,LTD + +@@ -117569,6 +119894,9 @@ OUI:F8AA8A* + OUI:F8AB05* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:F8AB82* ++ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd ++ + OUI:F8ABE5* + ID_OUI_FROM_DATABASE=shenzhen worldelite electronics co., LTD + +@@ -117578,6 +119906,9 @@ OUI:F8AC65* + OUI:F8AC6D* + ID_OUI_FROM_DATABASE=Deltenna Ltd + ++OUI:F8AD24* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:F8ADCB* + ID_OUI_FROM_DATABASE=HMD Global Oy + +@@ -117662,6 +119993,9 @@ OUI:F8B797* + OUI:F8B7E2* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:F8B8B4* ++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd ++ + OUI:F8B95A* + ID_OUI_FROM_DATABASE=LG Innotek + +@@ -117737,6 +120071,9 @@ OUI:F8CAB8* + OUI:F8CC6E* + ID_OUI_FROM_DATABASE=DEPO Electronics Ltd + ++OUI:F8CDC8* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:F8CE72* + ID_OUI_FROM_DATABASE=Wistron Corporation + +@@ -117815,6 +120152,9 @@ OUI:F8E43B* + OUI:F8E44E* + ID_OUI_FROM_DATABASE=MCOT INC. + ++OUI:F8E4A4* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:F8E4E3* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -117851,6 +120191,9 @@ OUI:F8E903* + OUI:F8E94E* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:F8E94F* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:F8E968* + ID_OUI_FROM_DATABASE=Egker Kft. + +@@ -117974,6 +120317,9 @@ OUI:FC0FE6* + OUI:FC0FE7* + ID_OUI_FROM_DATABASE=Microchip Technology Inc. + ++OUI:FC101A* ++ ID_OUI_FROM_DATABASE=Palo Alto Networks ++ + OUI:FC10BD* + ID_OUI_FROM_DATABASE=Control Sistematizado S.A. + +@@ -118361,6 +120707,9 @@ OUI:FC8399* + OUI:FC83C6* + ID_OUI_FROM_DATABASE=N-Radio Technologies Co., Ltd. + ++OUI:FC8417* ++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. ++ + OUI:FC8596* + ID_OUI_FROM_DATABASE=Axonne Inc. + +@@ -118451,6 +120800,9 @@ OUI:FC9FAE* + OUI:FC9FE1* + ID_OUI_FROM_DATABASE=CONWIN.Tech. Ltd + ++OUI:FCA05A* ++ ID_OUI_FROM_DATABASE=Oray.com co., LTD. ++ + OUI:FCA13E* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -118598,6 +120950,9 @@ OUI:FCB6D8* + OUI:FCB7F0* + ID_OUI_FROM_DATABASE=Idaho National Laboratory + ++OUI:FCB97E* ++ ID_OUI_FROM_DATABASE=GE Appliances ++ + OUI:FCBBA1* + ID_OUI_FROM_DATABASE=Shenzhen Minicreate Technology Co.,Ltd + +diff --git a/hwdb.d/20-acpi-vendor.hwdb b/hwdb.d/20-acpi-vendor.hwdb +index 87eba251c2..7fdb463e10 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb ++++ b/hwdb.d/20-acpi-vendor.hwdb +@@ -51,6 +51,9 @@ acpi:ATML*: + acpi:AUTH*: + ID_VENDOR_FROM_DATABASE=AuthenTec + ++acpi:AWDZ*: ++ ID_VENDOR_FROM_DATABASE=Shanghai Aiwei Electronic Technology Co., Ltd. ++ + acpi:BABA*: + ID_VENDOR_FROM_DATABASE=Alibaba Co., Ltd. + +@@ -219,6 +222,9 @@ acpi:MSHW*: + acpi:MXIM*: + ID_VENDOR_FROM_DATABASE=Maxim Integrated + ++acpi:NOLO*: ++ ID_VENDOR_FROM_DATABASE=NOLO VR ++ + acpi:NVDA*: + ID_VENDOR_FROM_DATABASE=Nvidia + +@@ -273,6 +279,9 @@ acpi:SECC*: + acpi:SHRP*: + ID_VENDOR_FROM_DATABASE=Sharp Corporation + ++acpi:SILC*: ++ ID_VENDOR_FROM_DATABASE=Silicom Ltd. Connectivity Solutions ++ + acpi:SNSL*: + ID_VENDOR_FROM_DATABASE=Sensel, Inc. + +@@ -912,6 +921,9 @@ acpi:ATV*: + acpi:ATX*: + ID_VENDOR_FROM_DATABASE=Athenix Corporation + ++acpi:AUD*: ++ ID_VENDOR_FROM_DATABASE=AudioControl ++ + acpi:AUG*: + ID_VENDOR_FROM_DATABASE=August Home, Inc. + +@@ -6036,6 +6048,9 @@ acpi:SBS*: + acpi:SBT*: + ID_VENDOR_FROM_DATABASE=Senseboard Technologies AB + ++acpi:SCA*: ++ ID_VENDOR_FROM_DATABASE=Schneider Consumer Group ++ + acpi:SCB*: + ID_VENDOR_FROM_DATABASE=SeeCubic B.V. + +@@ -6156,6 +6171,9 @@ acpi:SES*: + acpi:SET*: + ID_VENDOR_FROM_DATABASE=SendTek Corporation + ++acpi:SFL*: ++ ID_VENDOR_FROM_DATABASE=Shiftall Inc. ++ + acpi:SFM*: + ID_VENDOR_FROM_DATABASE=TORNADO Company + +diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch +index 38f3eee8a7..d1781e419f 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb.patch ++++ b/hwdb.d/20-acpi-vendor.hwdb.patch +@@ -1,5 +1,5 @@ +---- 20-acpi-vendor.hwdb.base 2021-12-23 19:33:43.195441335 +0900 +-+++ 20-acpi-vendor.hwdb 2021-12-23 19:33:43.215441358 +0900 ++--- 20-acpi-vendor.hwdb.base 2022-03-29 12:18:39.832815359 +0200 +++++ 20-acpi-vendor.hwdb 2022-03-29 12:18:39.838815428 +0200 + @@ -3,6 +3,8 @@ + # Data imported from: + # https://uefi.org/uefi-pnp-export +@@ -19,7 +19,7 @@ + acpi:AMDI*: + ID_VENDOR_FROM_DATABASE=AMD + +-@@ -325,6 +324,9 @@ ++@@ -334,6 +333,9 @@ + acpi:AAA*: + ID_VENDOR_FROM_DATABASE=Avolites Ltd + +@@ -29,7 +29,7 @@ + acpi:AAE*: + ID_VENDOR_FROM_DATABASE=Anatek Electronics Inc. + +-@@ -352,6 +354,9 @@ ++@@ -361,6 +363,9 @@ + acpi:ABO*: + ID_VENDOR_FROM_DATABASE=D-Link Systems Inc + +@@ -39,7 +39,7 @@ + acpi:ABS*: + ID_VENDOR_FROM_DATABASE=Abaco Systems, Inc. + +-@@ -397,7 +402,7 @@ ++@@ -406,7 +411,7 @@ + acpi:ACO*: + ID_VENDOR_FROM_DATABASE=Allion Computer Inc. + +@@ -48,7 +48,7 @@ + ID_VENDOR_FROM_DATABASE=Aspen Tech Inc + + acpi:ACR*: +-@@ -673,6 +678,9 @@ ++@@ -682,6 +687,9 @@ + acpi:AMT*: + ID_VENDOR_FROM_DATABASE=AMT International Industry + +@@ -58,7 +58,7 @@ + acpi:AMX*: + ID_VENDOR_FROM_DATABASE=AMX LLC + +-@@ -721,6 +729,9 @@ ++@@ -730,6 +738,9 @@ + acpi:AOA*: + ID_VENDOR_FROM_DATABASE=AOpen Inc. + +@@ -68,7 +68,7 @@ + acpi:AOE*: + ID_VENDOR_FROM_DATABASE=Advanced Optics Electronics, Inc. + +-@@ -730,6 +741,9 @@ ++@@ -739,6 +750,9 @@ + acpi:AOT*: + ID_VENDOR_FROM_DATABASE=Alcatel + +@@ -78,7 +78,7 @@ + acpi:APC*: + ID_VENDOR_FROM_DATABASE=American Power Conversion + +-@@ -905,7 +919,7 @@ ++@@ -917,7 +931,7 @@ + ID_VENDOR_FROM_DATABASE=ALPS ALPINE CO., LTD. + + acpi:AUO*: +@@ -87,7 +87,7 @@ + + acpi:AUR*: + ID_VENDOR_FROM_DATABASE=Aureal Semiconductor +-@@ -985,6 +999,9 @@ ++@@ -997,6 +1011,9 @@ + acpi:AXE*: + ID_VENDOR_FROM_DATABASE=Axell Corporation + +@@ -97,7 +97,7 @@ + acpi:AXI*: + ID_VENDOR_FROM_DATABASE=American Magnetics + +-@@ -1135,6 +1152,9 @@ ++@@ -1147,6 +1164,9 @@ + acpi:BML*: + ID_VENDOR_FROM_DATABASE=BIOMED Lab + +@@ -107,7 +107,7 @@ + acpi:BMS*: + ID_VENDOR_FROM_DATABASE=BIOMEDISYS + +-@@ -1147,6 +1167,9 @@ ++@@ -1159,6 +1179,9 @@ + acpi:BNO*: + ID_VENDOR_FROM_DATABASE=Bang & Olufsen + +@@ -117,7 +117,7 @@ + acpi:BNS*: + ID_VENDOR_FROM_DATABASE=Boulder Nonlinear Systems + +-@@ -1390,6 +1413,9 @@ ++@@ -1402,6 +1425,9 @@ + acpi:CHA*: + ID_VENDOR_FROM_DATABASE=Chase Research PLC + +@@ -127,7 +127,7 @@ + acpi:CHD*: + ID_VENDOR_FROM_DATABASE=ChangHong Electric Co.,Ltd + +-@@ -1552,6 +1578,9 @@ ++@@ -1564,6 +1590,9 @@ + acpi:COD*: + ID_VENDOR_FROM_DATABASE=CODAN Pty. Ltd. + +@@ -137,7 +137,7 @@ + acpi:COI*: + ID_VENDOR_FROM_DATABASE=Codec Inc. + +-@@ -1961,7 +1990,7 @@ ++@@ -1973,7 +2002,7 @@ + ID_VENDOR_FROM_DATABASE=Dragon Information Technology + + acpi:DJE*: +@@ -146,7 +146,7 @@ + + acpi:DJP*: + ID_VENDOR_FROM_DATABASE=Maygay Machines, Ltd +-@@ -2299,6 +2328,9 @@ ++@@ -2311,6 +2340,9 @@ + acpi:EIN*: + ID_VENDOR_FROM_DATABASE=Elegant Invention + +@@ -156,7 +156,7 @@ + acpi:EKA*: + ID_VENDOR_FROM_DATABASE=MagTek Inc. + +-@@ -2563,6 +2595,9 @@ ++@@ -2575,6 +2607,9 @@ + acpi:FCG*: + ID_VENDOR_FROM_DATABASE=First International Computer Ltd + +@@ -166,7 +166,7 @@ + acpi:FCS*: + ID_VENDOR_FROM_DATABASE=Focus Enhancements, Inc. + +-@@ -2939,7 +2974,7 @@ ++@@ -2951,7 +2986,7 @@ + ID_VENDOR_FROM_DATABASE=General Standards Corporation + + acpi:GSM*: +@@ -175,7 +175,7 @@ + + acpi:GSN*: + ID_VENDOR_FROM_DATABASE=Grandstream Networks, Inc. +-@@ -3040,6 +3075,9 @@ ++@@ -3052,6 +3087,9 @@ + acpi:HEC*: + ID_VENDOR_FROM_DATABASE=Hisense Electric Co., Ltd. + +@@ -185,7 +185,7 @@ + acpi:HEL*: + ID_VENDOR_FROM_DATABASE=Hitachi Micro Systems Europe Ltd + +-@@ -3172,6 +3210,9 @@ ++@@ -3184,6 +3222,9 @@ + acpi:HSD*: + ID_VENDOR_FROM_DATABASE=HannStar Display Corp + +@@ -195,7 +195,7 @@ + acpi:HSM*: + ID_VENDOR_FROM_DATABASE=AT&T Microelectronics + +-@@ -3298,6 +3339,9 @@ ++@@ -3310,6 +3351,9 @@ + acpi:ICI*: + ID_VENDOR_FROM_DATABASE=Infotek Communication Inc + +@@ -205,7 +205,7 @@ + acpi:ICM*: + ID_VENDOR_FROM_DATABASE=Intracom SA + +-@@ -3394,6 +3438,9 @@ ++@@ -3406,6 +3450,9 @@ + acpi:IKE*: + ID_VENDOR_FROM_DATABASE=Ikegami Tsushinki Co. Ltd. + +@@ -215,7 +215,7 @@ + acpi:IKS*: + ID_VENDOR_FROM_DATABASE=Ikos Systems Inc + +-@@ -3439,6 +3486,9 @@ ++@@ -3451,6 +3498,9 @@ + acpi:IMT*: + ID_VENDOR_FROM_DATABASE=Inmax Technology Corporation + +@@ -225,7 +225,7 @@ + acpi:INA*: + ID_VENDOR_FROM_DATABASE=Inventec Corporation + +-@@ -3955,6 +4005,9 @@ ++@@ -3967,6 +4017,9 @@ + acpi:LAN*: + ID_VENDOR_FROM_DATABASE=Sodeman Lancom Inc + +@@ -235,7 +235,7 @@ + acpi:LAS*: + ID_VENDOR_FROM_DATABASE=LASAT Comm. A/S + +-@@ -4003,6 +4056,9 @@ ++@@ -4015,6 +4068,9 @@ + acpi:LED*: + ID_VENDOR_FROM_DATABASE=Long Engineering Design Inc + +@@ -245,7 +245,7 @@ + acpi:LEG*: + ID_VENDOR_FROM_DATABASE=Legerity, Inc + +-@@ -4018,6 +4074,9 @@ ++@@ -4030,6 +4086,9 @@ + acpi:LGC*: + ID_VENDOR_FROM_DATABASE=Logic Ltd + +@@ -255,7 +255,7 @@ + acpi:LGI*: + ID_VENDOR_FROM_DATABASE=Logitech Inc + +-@@ -4075,6 +4134,9 @@ ++@@ -4087,6 +4146,9 @@ + acpi:LND*: + ID_VENDOR_FROM_DATABASE=Land Computer Company Ltd + +@@ -265,7 +265,7 @@ + acpi:LNK*: + ID_VENDOR_FROM_DATABASE=Link Tech Inc + +-@@ -4109,7 +4171,7 @@ ++@@ -4121,7 +4183,7 @@ + ID_VENDOR_FROM_DATABASE=Design Technology + + acpi:LPL*: +@@ -274,7 +274,7 @@ + + acpi:LSC*: + ID_VENDOR_FROM_DATABASE=LifeSize Communications +-@@ -4285,6 +4347,9 @@ ++@@ -4297,6 +4359,9 @@ + acpi:MCX*: + ID_VENDOR_FROM_DATABASE=Millson Custom Solutions Inc. + +@@ -284,7 +284,7 @@ + acpi:MDA*: + ID_VENDOR_FROM_DATABASE=Media4 Inc + +-@@ -4525,6 +4590,9 @@ ++@@ -4537,6 +4602,9 @@ + acpi:MOM*: + ID_VENDOR_FROM_DATABASE=Momentum Data Systems + +@@ -294,7 +294,7 @@ + acpi:MOS*: + ID_VENDOR_FROM_DATABASE=Moses Corporation + +-@@ -4759,6 +4827,9 @@ ++@@ -4771,6 +4839,9 @@ + acpi:NAL*: + ID_VENDOR_FROM_DATABASE=Network Alchemy + +@@ -304,7 +304,7 @@ + acpi:NAT*: + ID_VENDOR_FROM_DATABASE=NaturalPoint Inc. + +-@@ -5281,6 +5352,9 @@ ++@@ -5293,6 +5364,9 @@ + acpi:PCX*: + ID_VENDOR_FROM_DATABASE=PC Xperten + +@@ -314,7 +314,7 @@ + acpi:PDM*: + ID_VENDOR_FROM_DATABASE=Psion Dacom Plc. + +-@@ -5344,9 +5418,6 @@ ++@@ -5356,9 +5430,6 @@ + acpi:PHE*: + ID_VENDOR_FROM_DATABASE=Philips Medical Systems Boeblingen GmbH + +@@ -324,7 +324,7 @@ + acpi:PHL*: + ID_VENDOR_FROM_DATABASE=Philips Consumer Electronics Company + +-@@ -5437,9 +5508,6 @@ ++@@ -5449,9 +5520,6 @@ + acpi:PNL*: + ID_VENDOR_FROM_DATABASE=Panelview, Inc. + +@@ -334,7 +334,7 @@ + acpi:PNR*: + ID_VENDOR_FROM_DATABASE=Planar Systems, Inc. + +-@@ -5575,15 +5643,9 @@ ++@@ -5587,15 +5655,9 @@ + acpi:PTS*: + ID_VENDOR_FROM_DATABASE=Plain Tree Systems Inc + +@@ -350,7 +350,7 @@ + acpi:PVG*: + ID_VENDOR_FROM_DATABASE=Proview Global Co., Ltd + +-@@ -5899,9 +5961,6 @@ ++@@ -5911,9 +5973,6 @@ + acpi:RTI*: + ID_VENDOR_FROM_DATABASE=Rancho Tech Inc + +@@ -360,7 +360,7 @@ + acpi:RTL*: + ID_VENDOR_FROM_DATABASE=Realtek Semiconductor Company Ltd + +-@@ -6070,9 +6129,6 @@ ++@@ -6085,9 +6144,6 @@ + acpi:SEE*: + ID_VENDOR_FROM_DATABASE=SeeColor Corporation + +@@ -370,7 +370,7 @@ + acpi:SEI*: + ID_VENDOR_FROM_DATABASE=Seitz & Associates Inc + +-@@ -6541,6 +6597,9 @@ ++@@ -6559,6 +6615,9 @@ + acpi:SVD*: + ID_VENDOR_FROM_DATABASE=SVD Computer + +@@ -380,7 +380,7 @@ + acpi:SVI*: + ID_VENDOR_FROM_DATABASE=Sun Microsystems + +-@@ -6625,6 +6684,9 @@ ++@@ -6643,6 +6702,9 @@ + acpi:SZM*: + ID_VENDOR_FROM_DATABASE=Shenzhen MTC Co., Ltd + +@@ -390,7 +390,7 @@ + acpi:TAA*: + ID_VENDOR_FROM_DATABASE=Tandberg + +-@@ -6715,6 +6777,9 @@ ++@@ -6733,6 +6795,9 @@ + acpi:TDG*: + ID_VENDOR_FROM_DATABASE=Six15 Technologies + +@@ -400,7 +400,7 @@ + acpi:TDM*: + ID_VENDOR_FROM_DATABASE=Tandem Computer Europe Inc + +-@@ -6757,6 +6822,9 @@ ++@@ -6775,6 +6840,9 @@ + acpi:TEV*: + ID_VENDOR_FROM_DATABASE=Televés, S.A. + +@@ -410,7 +410,7 @@ + acpi:TEZ*: + ID_VENDOR_FROM_DATABASE=Tech Source Inc. + +-@@ -6880,9 +6948,6 @@ ++@@ -6898,9 +6966,6 @@ + acpi:TNC*: + ID_VENDOR_FROM_DATABASE=TNC Industrial Company Ltd + +@@ -420,7 +420,7 @@ + acpi:TNM*: + ID_VENDOR_FROM_DATABASE=TECNIMAGEN SA + +-@@ -7192,14 +7257,14 @@ ++@@ -7210,14 +7275,14 @@ + acpi:UNC*: + ID_VENDOR_FROM_DATABASE=Unisys Corporation + +@@ -441,7 +441,7 @@ + + acpi:UNI*: + ID_VENDOR_FROM_DATABASE=Uniform Industry Corp. +-@@ -7234,6 +7299,9 @@ ++@@ -7252,6 +7317,9 @@ + acpi:USA*: + ID_VENDOR_FROM_DATABASE=Utimaco Safeware AG + +@@ -451,7 +451,7 @@ + acpi:USD*: + ID_VENDOR_FROM_DATABASE=U.S. Digital Corporation + +-@@ -7489,9 +7557,6 @@ ++@@ -7507,9 +7575,6 @@ + acpi:WAL*: + ID_VENDOR_FROM_DATABASE=Wave Access + +@@ -461,7 +461,7 @@ + acpi:WAV*: + ID_VENDOR_FROM_DATABASE=Wavephore + +-@@ -7616,7 +7681,7 @@ ++@@ -7634,7 +7699,7 @@ + ID_VENDOR_FROM_DATABASE=WyreStorm Technologies LLC + + acpi:WYS*: +@@ -470,7 +470,7 @@ + + acpi:WYT*: + ID_VENDOR_FROM_DATABASE=Wooyoung Image & Information Co.,Ltd. +-@@ -7630,9 +7695,6 @@ ++@@ -7648,9 +7713,6 @@ + acpi:XDM*: + ID_VENDOR_FROM_DATABASE=XDM Ltd. + +@@ -480,7 +480,7 @@ + acpi:XES*: + ID_VENDOR_FROM_DATABASE=Extreme Engineering Solutions, Inc. + +-@@ -7663,9 +7725,6 @@ ++@@ -7681,9 +7743,6 @@ + acpi:XNT*: + ID_VENDOR_FROM_DATABASE=XN Technologies, Inc. + +@@ -490,7 +490,7 @@ + acpi:XQU*: + ID_VENDOR_FROM_DATABASE=SHANGHAI SVA-DAV ELECTRONICS CO., LTD + +-@@ -7732,6 +7791,9 @@ ++@@ -7750,6 +7809,9 @@ + acpi:ZBX*: + ID_VENDOR_FROM_DATABASE=Zebax Technologies + +diff --git a/hwdb.d/20-pci-classes.hwdb b/hwdb.d/20-pci-classes.hwdb +index 3dca78b05f..52603ebadd 100644 +--- a/hwdb.d/20-pci-classes.hwdb ++++ b/hwdb.d/20-pci-classes.hwdb +@@ -612,7 +612,7 @@ pci:v*d*sv*sd*bc12sc00* + ID_PCI_SUBCLASS_FROM_DATABASE=Processing accelerators + + pci:v*d*sv*sd*bc12sc01* +- ID_PCI_SUBCLASS_FROM_DATABASE=AI Inference Accelerator ++ ID_PCI_SUBCLASS_FROM_DATABASE=SNIA Smart Data Accelerator Interface (SDXI) controller + + pci:v*d*sv*sd*bc13* + ID_PCI_CLASS_FROM_DATABASE=Non-Essential Instrumentation +diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb +index 745f5545c8..dba7d96d3e 100644 +--- a/hwdb.d/20-pci-vendor-model.hwdb ++++ b/hwdb.d/20-pci-vendor-model.hwdb +@@ -218,6 +218,15 @@ pci:v00000731d00009200* + pci:v00000731d0000920A* + ID_MODEL_FROM_DATABASE=JH920 + ++pci:v00000731d0000920Asv00000731sd0000920A* ++ ID_MODEL_FROM_DATABASE=JH920 ++ ++pci:v00000731d0000920Asv00000731sd0000920B* ++ ID_MODEL_FROM_DATABASE=JH920 (-I) ++ ++pci:v00000731d0000920Asv00000731sd0000920C* ++ ID_MODEL_FROM_DATABASE=JH920 (-M) ++ + pci:v00000731d0000920B* + ID_MODEL_FROM_DATABASE=JH920-I + +@@ -227,21 +236,42 @@ pci:v00000731d0000920C* + pci:v00000731d00009210* + ID_MODEL_FROM_DATABASE=JM9210 + ++pci:v00000731d00009210sv00000731sd00009210* ++ ID_MODEL_FROM_DATABASE=JM9210 ++ ++pci:v00000731d00009210sv00000731sd00009211* ++ ID_MODEL_FROM_DATABASE=JM9210 (-I) ++ + pci:v00000731d00009211* + ID_MODEL_FROM_DATABASE=JM9210-I + + pci:v00000731d00009230* + ID_MODEL_FROM_DATABASE=JM9230 + ++pci:v00000731d00009230sv00000731sd00009230* ++ ID_MODEL_FROM_DATABASE=JM9230 ++ ++pci:v00000731d00009230sv00000731sd00009231* ++ ID_MODEL_FROM_DATABASE=JM9230 (-I) ++ + pci:v00000731d00009231* + ID_MODEL_FROM_DATABASE=JM9231-I + + pci:v00000731d00009250* + ID_MODEL_FROM_DATABASE=JM9250 + ++pci:v00000731d00009250sv00000731sd00009250* ++ ID_MODEL_FROM_DATABASE=JM9250 ++ + pci:v00000731d0000930A* + ID_MODEL_FROM_DATABASE=JH930-I + ++pci:v00000731d0000930Asv00000731sd0000930A* ++ ID_MODEL_FROM_DATABASE=JH930-I ++ ++pci:v00000731d0000930Asv00000731sd0000930B* ++ ID_MODEL_FROM_DATABASE=JH930-I (JH930-M) ++ + pci:v00000731d0000930B* + ID_MODEL_FROM_DATABASE=JH930-M + +@@ -2297,9 +2327,15 @@ pci:v00001000d000000E6sv00001028sd0000200D* + pci:v00001000d000000E6sv00001028sd0000200E* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MX) + ++pci:v00001000d000000E6sv00001028sd00002170* ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MM) ++ + pci:v00001000d000000E6sv00001028sd00002175* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i Adapter) + ++pci:v00001000d000000E6sv00001028sd00002197* ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (HBA350i MM LP) ++ + pci:v00001000d000000E6sv00001D49sd00000205* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA) + +@@ -2316,10 +2352,10 @@ pci:v00001000d000000E6sv00001D49sd00000209* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (ThinkSystem 440-8e SAS/SATA PCIe Gen4 12Gb HBA) + + pci:v00001000d000000E6sv00008086sd00004050* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4QF160F) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4QF160J) + + pci:v00001000d000000E6sv00008086sd00004070* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4GF016F) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Secure SAS38xx (Storage Controller RS3P4GF016J) + + pci:v00001000d000000E7* + ID_MODEL_FROM_DATABASE=Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx +@@ -2615,6 +2651,9 @@ pci:v00001000d000010E2* + pci:v00001000d000010E2sv00001000sd00004000* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (MegaRAID 9560-16i) + ++pci:v00001000d000010E2sv00001000sd00004002* ++ ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (MegaRAID 9561-16i) ++ + pci:v00001000d000010E2sv00001000sd00004010* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS39xx (MegaRAID 9560-8i) + +@@ -2705,6 +2744,9 @@ pci:v00001000d000010E6sv00001028sd00002174* + pci:v00001000d000010E6sv00001028sd00002177* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (PERC H350 Adapter) + ++pci:v00001000d000010E6sv00001028sd00002199* ++ ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (PERC H350 Mini LP) ++ + pci:v00001000d000010E6sv00001D49sd00000505* + ID_MODEL_FROM_DATABASE=MegaRAID 12GSAS/PCIe Secure SAS38xx (ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter) + +@@ -2768,6 +2810,9 @@ pci:v00001000d0000C012* + pci:v00001000d0000C012sv00001D49sd00000003* + ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter) + ++pci:v00001000d0000C030* ++ ID_MODEL_FROM_DATABASE=PEX890xx PCIe Gen 5 Switch ++ + pci:v00001001* + ID_VENDOR_FROM_DATABASE=Kolter Electronic + +@@ -2994,7 +3039,7 @@ pci:v00001002d0000164D* + ID_MODEL_FROM_DATABASE=Rembrandt + + pci:v00001002d00001681* +- ID_MODEL_FROM_DATABASE=Rembrandt ++ ID_MODEL_FROM_DATABASE=Rembrandt [Radeon 680M] + + pci:v00001002d00001714* + ID_MODEL_FROM_DATABASE=BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] +@@ -5889,13 +5934,16 @@ pci:v00001002d00006611sv00001B0Asd000090D3* + ID_MODEL_FROM_DATABASE=Oland [Radeon HD 8570 / R5 430 OEM / R7 240/340 / Radeon 520 OEM] (Radeon R7 240 OEM) + + pci:v00001002d00006613* +- ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340] ++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520] + + pci:v00001002d00006613sv0000148Csd00007340* +- ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340] (Radeon R7 340) ++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520] (Radeon R7 340) + + pci:v00001002d00006613sv00001682sd00007240* +- ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340] (R7 240 2048 MB) ++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520] (R7 240 2048 MB) ++ ++pci:v00001002d00006613sv00001DCFsd00003000* ++ ID_MODEL_FROM_DATABASE=Oland PRO [Radeon R7 240/340 / Radeon 520] + + pci:v00001002d00006631* + ID_MODEL_FROM_DATABASE=Oland +@@ -10976,18 +11024,27 @@ pci:v00001002d000073A3* + pci:v00001002d000073A4* + ID_MODEL_FROM_DATABASE=Navi 21 USB + ++pci:v00001002d000073A5* ++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6950 XT] ++ + pci:v00001002d000073AB* + ID_MODEL_FROM_DATABASE=Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo] + + pci:v00001002d000073AF* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT] + ++pci:v00001002d000073AFsv0000148Csd00002414* ++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT] (Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate]) ++ + pci:v00001002d000073BF* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] + + pci:v00001002d000073BFsv00001002sd00000E3A* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Radeon RX 6900 XT) + ++pci:v00001002d000073BFsv0000148Csd00002408* ++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Red Devil AMD Radeon RX 6900 XT) ++ + pci:v00001002d000073BFsv00001EAEsd00006701* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black) + +@@ -10998,7 +11055,7 @@ pci:v00001002d000073C4* + ID_MODEL_FROM_DATABASE=Navi 22 USB + + pci:v00001002d000073DF* +- ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT / 6800M] ++ ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M] + + pci:v00001002d000073E0* + ID_MODEL_FROM_DATABASE=Navi 23 +@@ -11012,6 +11069,9 @@ pci:v00001002d000073E3* + pci:v00001002d000073E4* + ID_MODEL_FROM_DATABASE=Navi 23 USB + ++pci:v00001002d000073EF* ++ ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6650 XT] ++ + pci:v00001002d000073FF* + ID_MODEL_FROM_DATABASE=Navi 23 [Radeon RX 6600/6600 XT/6600M] + +@@ -11027,6 +11087,12 @@ pci:v00001002d0000740C* + pci:v00001002d0000740F* + ID_MODEL_FROM_DATABASE=Aldebaran + ++pci:v00001002d0000743F* ++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT] ++ ++pci:v00001002d0000743Fsv00001DA2sd0000E457* ++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT] (PULSE AMD Radeon RX 6500 XT) ++ + pci:v00001002d00007833* + ID_MODEL_FROM_DATABASE=RS350 Host Bridge + +@@ -12204,7 +12270,7 @@ pci:v00001002d0000AB20* + ID_MODEL_FROM_DATABASE=Vega 20 HDMI Audio [Radeon VII] + + pci:v00001002d0000AB28* +- ID_MODEL_FROM_DATABASE=Navi 21 HDMI Audio [Radeon RX 6800/6800 XT / 6900 XT] ++ ID_MODEL_FROM_DATABASE=Navi 21/23 HDMI/DP Audio Controller + + pci:v00001002d0000AB38* + ID_MODEL_FROM_DATABASE=Navi 10 HDMI Audio +@@ -14577,28 +14643,28 @@ pci:v00001022d000015E1sv0000EA50sd0000CE19* + ID_MODEL_FROM_DATABASE=Raven USB 3.1 (mCOM10-L1900) + + pci:v00001022d000015E2* +- ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor ++ ID_MODEL_FROM_DATABASE=ACP/ACP3X/ACP6x Audio Coprocessor + + pci:v00001022d000015E2sv000017AAsd00005124* +- ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor (ThinkPad E595) ++ ID_MODEL_FROM_DATABASE=ACP/ACP3X/ACP6x Audio Coprocessor (ThinkPad E595) + + pci:v00001022d000015E2sv0000EA50sd0000CE19* +- ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor (mCOM10-L1900) ++ ID_MODEL_FROM_DATABASE=ACP/ACP3X/ACP6x Audio Coprocessor (mCOM10-L1900) + + pci:v00001022d000015E3* +- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller ++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller + + pci:v00001022d000015E3sv0000103Csd00008615* +- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (Pavilion Laptop 15-cw1xxx) ++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (Pavilion Laptop 15-cw1xxx) + + pci:v00001022d000015E3sv00001043sd000086C7* +- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (PRIME B450M-A Motherboard) ++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (PRIME B450M-A Motherboard) + + pci:v00001022d000015E3sv000017AAsd00005124* +- ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (ThinkPad E595) ++ ID_MODEL_FROM_DATABASE=Family 17h/19h HD Audio Controller (ThinkPad E595) + + pci:v00001022d000015E4* +- ID_MODEL_FROM_DATABASE=Raven/Raven2/Renoir Sensor Fusion Hub ++ ID_MODEL_FROM_DATABASE=Sensor Fusion Hub + + pci:v00001022d000015E5* + ID_MODEL_FROM_DATABASE=Raven2 USB 3.1 +@@ -15122,6 +15188,21 @@ pci:v00001022d000043C8* + pci:v00001022d000043D5* + ID_MODEL_FROM_DATABASE=400 Series Chipset USB 3.1 XHCI Controller + ++pci:v00001022d000043E9* ++ ID_MODEL_FROM_DATABASE=500 Series Chipset Switch Upstream Port ++ ++pci:v00001022d000043EB* ++ ID_MODEL_FROM_DATABASE=500 Series Chipset SATA Controller ++ ++pci:v00001022d000043EBsv00001B21sd00001062* ++ ID_MODEL_FROM_DATABASE=500 Series Chipset SATA Controller (ASM1062 Serial ATA Controller) ++ ++pci:v00001022d000043EE* ++ ID_MODEL_FROM_DATABASE=500 Series Chipset USB 3.1 XHCI Controller ++ ++pci:v00001022d000043EEsv00001B21sd00001142* ++ ID_MODEL_FROM_DATABASE=500 Series Chipset USB 3.1 XHCI Controller (ASM1042A USB 3.0 Host Controller) ++ + pci:v00001022d000057A3* + ID_MODEL_FROM_DATABASE=Matisse PCIe GPP Bridge + +@@ -34004,6 +34085,9 @@ pci:v000010DEd000010F0* + pci:v000010DEd000010F1* + ID_MODEL_FROM_DATABASE=GP106 High Definition Audio Controller + ++pci:v000010DEd000010F1sv00001043sd000085B6* ++ ID_MODEL_FROM_DATABASE=GP106 High Definition Audio Controller (DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual]) ++ + pci:v000010DEd000010F7* + ID_MODEL_FROM_DATABASE=TU102 High Definition Audio Controller + +@@ -36092,6 +36176,9 @@ pci:v000010DEd00001C02* + pci:v000010DEd00001C03* + ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060 6GB] + ++pci:v000010DEd00001C03sv00001043sd000085B6* ++ ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060 6GB] (DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual]) ++ + pci:v000010DEd00001C04* + ID_MODEL_FROM_DATABASE=GP106 [GeForce GTX 1060 5GB] + +@@ -36488,6 +36575,9 @@ pci:v000010DEd00001F02* + pci:v000010DEd00001F02sv00001043sd00008673* + ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2070] (TURBO RTX 2070) + ++pci:v000010DEd00001F03* ++ ID_MODEL_FROM_DATABASE=TU106 [GeForce RTX 2060 12GB] ++ + pci:v000010DEd00001F04* + ID_MODEL_FROM_DATABASE=TU106 + +@@ -36587,6 +36677,12 @@ pci:v000010DEd00001F9C* + pci:v000010DEd00001F9D* + ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile / Max-Q] + ++pci:v000010DEd00001F9F* ++ ID_MODEL_FROM_DATABASE=TU117M [GeForce MX550] ++ ++pci:v000010DEd00001FA0* ++ ID_MODEL_FROM_DATABASE=TU117M [GeForce MX550] ++ + pci:v000010DEd00001FAE* + ID_MODEL_FROM_DATABASE=TU117GL + +@@ -36599,6 +36695,12 @@ pci:v000010DEd00001FB1* + pci:v000010DEd00001FB2* + ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T400 Mobile] + ++pci:v000010DEd00001FB6* ++ ID_MODEL_FROM_DATABASE=TU117GLM [T600 Laptop GPU] ++ ++pci:v000010DEd00001FB7* ++ ID_MODEL_FROM_DATABASE=TU117GLM [T550 Laptop GPU] ++ + pci:v000010DEd00001FB8* + ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T2000 Mobile / Max-Q] + +@@ -36611,6 +36713,9 @@ pci:v000010DEd00001FBA* + pci:v000010DEd00001FBB* + ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T500 Mobile] + ++pci:v000010DEd00001FBC* ++ ID_MODEL_FROM_DATABASE=TU117GLM [T1200 Laptop GPU] ++ + pci:v000010DEd00001FBF* + ID_MODEL_FROM_DATABASE=TU117GL + +@@ -36620,9 +36725,18 @@ pci:v000010DEd00001FD9* + pci:v000010DEd00001FDD* + ID_MODEL_FROM_DATABASE=TU117BM [GeForce GTX 1650 Mobile Refresh] + ++pci:v000010DEd00001FF0* ++ ID_MODEL_FROM_DATABASE=TU117GL [T1000 8GB] ++ ++pci:v000010DEd00001FF2* ++ ID_MODEL_FROM_DATABASE=TU117GL [T400 4GB] ++ + pci:v000010DEd00001FF9* + ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T1000 Mobile] + ++pci:v000010DEd00002082* ++ ID_MODEL_FROM_DATABASE=GA100 [CMP 170HX] ++ + pci:v000010DEd000020B0* + ID_MODEL_FROM_DATABASE=GA100 [A100 SXM4 40GB] + +@@ -36632,6 +36746,9 @@ pci:v000010DEd000020B1* + pci:v000010DEd000020B2* + ID_MODEL_FROM_DATABASE=GA100 [A100 SXM4 80GB] + ++pci:v000010DEd000020B3* ++ ID_MODEL_FROM_DATABASE=GA100 [PG506-242/243] ++ + pci:v000010DEd000020B5* + ID_MODEL_FROM_DATABASE=GA100 [A100 PCIe 80GB] + +@@ -36653,9 +36770,15 @@ pci:v000010DEd000020BF* + pci:v000010DEd000020C2* + ID_MODEL_FROM_DATABASE=GA100 [CMP 170HX] + ++pci:v000010DEd000020F0* ++ ID_MODEL_FROM_DATABASE=GA100 [A100-PG506-207] ++ + pci:v000010DEd000020F1* + ID_MODEL_FROM_DATABASE=GA100 [A100 PCIe 40GB] + ++pci:v000010DEd000020F2* ++ ID_MODEL_FROM_DATABASE=GA100 [A100-PG506-217] ++ + pci:v000010DEd00002182* + ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660 Ti] + +@@ -36722,6 +36845,9 @@ pci:v000010DEd00002206sv00001462sd00003892* + pci:v000010DEd00002208* + ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 Ti] + ++pci:v000010DEd0000220A* ++ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 12GB] ++ + pci:v000010DEd0000220D* + ID_MODEL_FROM_DATABASE=GA102 [CMP 90HX] + +@@ -36743,6 +36869,9 @@ pci:v000010DEd00002231* + pci:v000010DEd00002232* + ID_MODEL_FROM_DATABASE=GA102GL [RTX A4500] + ++pci:v000010DEd00002233* ++ ID_MODEL_FROM_DATABASE=GA102GL [RTX A5500] ++ + pci:v000010DEd00002235* + ID_MODEL_FROM_DATABASE=GA102GL [A40] + +@@ -36752,6 +36881,9 @@ pci:v000010DEd00002236* + pci:v000010DEd00002237* + ID_MODEL_FROM_DATABASE=GA102GL [A10G] + ++pci:v000010DEd00002238* ++ ID_MODEL_FROM_DATABASE=GA102GL [A10M] ++ + pci:v000010DEd0000223F* + ID_MODEL_FROM_DATABASE=GA102GL + +@@ -36767,9 +36899,18 @@ pci:v000010DEd00002302* + pci:v000010DEd00002321* + ID_MODEL_FROM_DATABASE=GA103 + ++pci:v000010DEd00002414* ++ ID_MODEL_FROM_DATABASE=GA103 [GeForce RTX 3060 Ti] ++ + pci:v000010DEd00002420* + ID_MODEL_FROM_DATABASE=GA103M [GeForce RTX 3080 Ti Mobile] + ++pci:v000010DEd00002438* ++ ID_MODEL_FROM_DATABASE=GA103GLM [RTX A5500 Laptop GPU] ++ ++pci:v000010DEd00002460* ++ ID_MODEL_FROM_DATABASE=GA103M [GeForce RTX 3080 Ti Laptop GPU] ++ + pci:v000010DEd00002482* + ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Ti] + +@@ -36833,6 +36974,15 @@ pci:v000010DEd000024B7* + pci:v000010DEd000024B8* + ID_MODEL_FROM_DATABASE=GA104GLM [RTX A3000 Mobile] + ++pci:v000010DEd000024B9* ++ ID_MODEL_FROM_DATABASE=GA104GLM [RTX A3000 12GB Laptop GPU] ++ ++pci:v000010DEd000024BA* ++ ID_MODEL_FROM_DATABASE=GA104GLM [RTX A4500 Laptop GPU] ++ ++pci:v000010DEd000024BB* ++ ID_MODEL_FROM_DATABASE=GA104GLM [RTX A3000 Laptop GPU] ++ + pci:v000010DEd000024BF* + ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample] + +@@ -36842,6 +36992,12 @@ pci:v000010DEd000024DC* + pci:v000010DEd000024DD* + ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q] + ++pci:v000010DEd000024E0* ++ ID_MODEL_FROM_DATABASE=GA104M [Geforce RTX 3070 Ti Laptop GPU] ++ ++pci:v000010DEd000024FA* ++ ID_MODEL_FROM_DATABASE=GA104 [RTX A4500 Embedded GPU ] ++ + pci:v000010DEd00002501* + ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060] + +@@ -36854,6 +37010,9 @@ pci:v000010DEd00002504* + pci:v000010DEd00002505* + ID_MODEL_FROM_DATABASE=GA106 + ++pci:v000010DEd00002507* ++ ID_MODEL_FROM_DATABASE=GA106 [Geforce RTX 3050] ++ + pci:v000010DEd00002520* + ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q] + +@@ -36863,12 +37022,18 @@ pci:v000010DEd00002523* + pci:v000010DEd0000252F* + ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample] + ++pci:v000010DEd00002531* ++ ID_MODEL_FROM_DATABASE=GA106 [RTX A2000] ++ + pci:v000010DEd00002560* + ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q] + + pci:v000010DEd00002563* + ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] + ++pci:v000010DEd00002571* ++ ID_MODEL_FROM_DATABASE=GA106 [RTX A2000 12GB] ++ + pci:v000010DEd00002583* + ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050] + +@@ -36884,15 +37049,33 @@ pci:v000010DEd000025A4* + pci:v000010DEd000025A5* + ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 3050 Mobile] + ++pci:v000010DEd000025A6* ++ ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570] ++ ++pci:v000010DEd000025A7* ++ ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570] ++ ++pci:v000010DEd000025A9* ++ ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 2050] ++ + pci:v000010DEd000025AF* + ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 Engineering Sample] + + pci:v000010DEd000025B5* + ID_MODEL_FROM_DATABASE=GA107GLM [RTX A4 Mobile] + ++pci:v000010DEd000025B6* ++ ID_MODEL_FROM_DATABASE=GA107GL [A2 / A16] ++ + pci:v000010DEd000025B8* + ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 Mobile] + ++pci:v000010DEd000025B9* ++ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A1000 Laptop GPU] ++ ++pci:v000010DEd000025BA* ++ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 8GB Laptop GPU] ++ + pci:v000010DEd000025E0* + ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Ti Mobile] + +@@ -36902,6 +37085,12 @@ pci:v000010DEd000025E2* + pci:v000010DEd000025E5* + ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Mobile] + ++pci:v000010DEd000025F9* ++ ID_MODEL_FROM_DATABASE=GA107 [RTX A1000 Embedded GPU ] ++ ++pci:v000010DEd000025FA* ++ ID_MODEL_FROM_DATABASE=GA107 [RTX A2000 Embedded GPU] ++ + pci:v000010DF* + ID_VENDOR_FROM_DATABASE=Emulex Corporation + +@@ -37586,6 +37775,9 @@ pci:v000010ECd0000525Asv000017AAsd0000224F* + pci:v000010ECd00005260* + ID_MODEL_FROM_DATABASE=RTS5260 PCI Express Card Reader + ++pci:v000010ECd00005261* ++ ID_MODEL_FROM_DATABASE=RTS5261 PCI Express Card Reader ++ + pci:v000010ECd00005286* + ID_MODEL_FROM_DATABASE=RTS5286 PCI Express Card Reader + +@@ -37889,6 +38081,9 @@ pci:v000010ECd00008168sv0000103Csd0000825B* + pci:v000010ECd00008168sv0000103Csd00008615* + ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Pavilion Laptop 15-cw1xxx) + ++pci:v000010ECd00008168sv0000103Csd00008882* ++ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (HP ProDesk 405 G8 Desktop Mini PC) ++ + pci:v000010ECd00008168sv00001043sd000011F5* + ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Notebook motherboard (one of many models)) + +@@ -40556,6 +40751,9 @@ pci:v00001106d00009140* + pci:v00001106d00009201* + ID_MODEL_FROM_DATABASE=USB3.0 Controller + ++pci:v00001106d00009380* ++ ID_MODEL_FROM_DATABASE=Ncore Coprocessor ++ + pci:v00001106d00009530* + ID_MODEL_FROM_DATABASE=VX800/820/900 Series Secure Digital Memory Card Controller + +@@ -49715,6 +49913,9 @@ pci:v000012D8d00000508* + pci:v000012D8d00002304* + ID_MODEL_FROM_DATABASE=PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch + ++pci:v000012D8d00002308* ++ ID_MODEL_FROM_DATABASE=PI7C9X2G308GP 8-lane PCI Express 2.0 Switch with 3 PCI Express ports ++ + pci:v000012D8d00002404* + ID_MODEL_FROM_DATABASE=PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch + +@@ -51683,6 +51884,12 @@ pci:v000013A3d00000037* + pci:v000013A3d00000037sv000013A3sd00000036* + ID_MODEL_FROM_DATABASE=8204 Acceleration Processor (DX1740 Acceleration Card) + ++pci:v000013A3d00009240* ++ ID_MODEL_FROM_DATABASE=XR9240 Compression and Security Coprocessor [Panther II] ++ ++pci:v000013A3d00009240sv000013A3sd00009200* ++ ID_MODEL_FROM_DATABASE=XR9240 Compression and Security Coprocessor [Panther II] (DX2040 Compression and Security Acceleration Card [Panther II]) ++ + pci:v000013A4* + ID_VENDOR_FROM_DATABASE=Rascom Inc + +@@ -56477,9 +56684,18 @@ pci:v000014C2* + pci:v000014C3* + ID_VENDOR_FROM_DATABASE=MEDIATEK Corp. + ++pci:v000014C3d00000608* ++ ID_MODEL_FROM_DATABASE=RZ608 Wi-Fi 6E 80MHz ++ ++pci:v000014C3d00000616* ++ ID_MODEL_FROM_DATABASE=MT7922 802.11ax PCI Express Wireless Network Adapter ++ + pci:v000014C3d00007612* + ID_MODEL_FROM_DATABASE=MT7612E 802.11acbgn PCI Express Wireless Network Adapter + ++pci:v000014C3d00007615* ++ ID_MODEL_FROM_DATABASE=MT7615E 802.11ac PCI Express Wireless Network Adapter ++ + pci:v000014C3d00007630* + ID_MODEL_FROM_DATABASE=MT7630e 802.11bgn Wireless Network Adapter + +@@ -56489,6 +56705,9 @@ pci:v000014C3d00007662* + pci:v000014C3d00007915* + ID_MODEL_FROM_DATABASE=MT7915E 802.11ax PCI Express Wireless Network Adapter + ++pci:v000014C3d00007961* ++ ID_MODEL_FROM_DATABASE=MT7921 802.11ax PCI Express Wireless Network Adapter ++ + pci:v000014C4* + ID_VENDOR_FROM_DATABASE=IWASAKI Information Systems Co Ltd + +@@ -57503,6 +57722,12 @@ pci:v000014E4d00001688sv00001259sd00002708* + pci:v000014E4d0000168A* + ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet + ++pci:v000014E4d0000168Asv00001014sd00000493* ++ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet (PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3)) ++ ++pci:v000014E4d0000168Asv00001014sd00000494* ++ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet (PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3)) ++ + pci:v000014E4d0000168Asv00001028sd00001F5C* + ID_MODEL_FROM_DATABASE=NetXtreme II BCM57800 1/10 Gigabit Ethernet (BCM57800 10-Gigabit Ethernet) + +@@ -61079,6 +61304,9 @@ pci:v000015ADd000007C0* + pci:v000015ADd000007E0* + ID_MODEL_FROM_DATABASE=SATA AHCI controller + ++pci:v000015ADd000007F0* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller ++ + pci:v000015ADd00000801* + ID_MODEL_FROM_DATABASE=Virtual Machine Interface + +@@ -61178,6 +61406,12 @@ pci:v000015B3d0000021E* + pci:v000015B3d0000021F* + ID_MODEL_FROM_DATABASE=CX8 Family [ConnectX-8 Secure Flash Recovery] + ++pci:v000015B3d00000220* ++ ID_MODEL_FROM_DATABASE=BF4 Family Flash Recovery [BlueField-4 SoC Flash Recovery] ++ ++pci:v000015B3d00000221* ++ ID_MODEL_FROM_DATABASE=BF4 Family Secure Flash Recovery [BlueField-4 Secure Flash Recovery] ++ + pci:v000015B3d0000024E* + ID_MODEL_FROM_DATABASE=MT53100 [Spectrum-2, Flash recovery mode] + +@@ -61211,6 +61445,9 @@ pci:v000015B3d00000257* + pci:v000015B3d00000258* + ID_MODEL_FROM_DATABASE=Quantum-2 RMA + ++pci:v000015B3d00000259* ++ ID_MODEL_FROM_DATABASE=Abir Chiplet ++ + pci:v000015B3d00000262* + ID_MODEL_FROM_DATABASE=MT27710 [ConnectX-4 Lx Programmable] EN + +@@ -61232,6 +61469,9 @@ pci:v000015B3d00000274* + pci:v000015B3d00000275* + ID_MODEL_FROM_DATABASE=Spectrum-4C RMA + ++pci:v000015B3d00000277* ++ ID_MODEL_FROM_DATABASE=Spectrum-4TOR RMA ++ + pci:v000015B3d00000281* + ID_MODEL_FROM_DATABASE=NPS-600 Flash Recovery + +@@ -61727,6 +61967,15 @@ pci:v000015B3d0000A2DB* + pci:v000015B3d0000A2DC* + ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 integrated ConnectX-7 network controller + ++pci:v000015B3d0000A2DD* ++ ID_MODEL_FROM_DATABASE=BF4 Family Crypto enabled [BlueField-4 SoC Crypto enabled] ++ ++pci:v000015B3d0000A2DE* ++ ID_MODEL_FROM_DATABASE=BF4 Family Crypto disabled [BlueField-4 SoC Crypto disabled] ++ ++pci:v000015B3d0000A2DF* ++ ID_MODEL_FROM_DATABASE=BF4 Family integrated network controller [BlueField-4 integrated network controller] ++ + pci:v000015B3d0000C2D2* + ID_MODEL_FROM_DATABASE=MT416842 BlueField SoC management interfac + +@@ -61739,6 +61988,9 @@ pci:v000015B3d0000C2D4* + pci:v000015B3d0000C2D5* + ID_MODEL_FROM_DATABASE=MT43244 BlueField-3 SoC Management Interface + ++pci:v000015B3d0000C2D6* ++ ID_MODEL_FROM_DATABASE=BF4 Family Management Interface [BlueField-4 SoC Management Interface] ++ + pci:v000015B3d0000C738* + ID_MODEL_FROM_DATABASE=MT51136 + +@@ -62019,10 +62271,10 @@ pci:v000015CE* + ID_VENDOR_FROM_DATABASE=Genrad Inc + + pci:v000015CF* +- ID_VENDOR_FROM_DATABASE=Hilscher GmbH ++ ID_VENDOR_FROM_DATABASE=Hilscher Gesellschaft für Systemautomation mbH + + pci:v000015CFd00000000* +- ID_MODEL_FROM_DATABASE=CIFX 50E-DP(M/S) ++ ID_MODEL_FROM_DATABASE=CIFX PCI/PCIe + + pci:v000015D1* + ID_VENDOR_FROM_DATABASE=Infineon Technologies AG +@@ -64556,6 +64808,48 @@ pci:v0000177Dd0000A037* + pci:v0000177Dd0000A040* + ID_MODEL_FROM_DATABASE=THUNDERX CPT Cryptographic Accelerator + ++pci:v0000177Dd0000A059* ++ ID_MODEL_FROM_DATABASE=Octeon TX2 CGX (MAC) ++ ++pci:v0000177Dd0000A060* ++ ID_MODEL_FROM_DATABASE=Octeon 10 RPM (MAC) ++ ++pci:v0000177Dd0000A061* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 Loopback Interface (LBK) ++ ++pci:v0000177Dd0000A063* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 RVU Physical Function ++ ++pci:v0000177Dd0000A064* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 RVU Virtual Function ++ ++pci:v0000177Dd0000A065* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 RVU Admin Function ++ ++pci:v0000177Dd0000A09E* ++ ID_MODEL_FROM_DATABASE=Octeon 10 PTP controller ++ ++pci:v0000177Dd0000A0F2* ++ ID_MODEL_FROM_DATABASE=Octeon 10 CPT Cryptographic Accelerator, Physical function ++ ++pci:v0000177Dd0000A0F3* ++ ID_MODEL_FROM_DATABASE=Octeon 10 CPT Cryptographic Accelerator, Virtual function ++ ++pci:v0000177Dd0000A0F6* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 SDP Physical Function ++ ++pci:v0000177Dd0000A0F7* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 SDP Virtual Function ++ ++pci:v0000177Dd0000A0F8* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 Loopback Interface Virtual Function (LBKVF) ++ ++pci:v0000177Dd0000A0FD* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 CPT Cryptographic Accelerator, Physical function ++ ++pci:v0000177Dd0000A0FE* ++ ID_MODEL_FROM_DATABASE=Octeon Tx2 CPT Cryptographic Accelerator, Virtual function ++ + pci:v0000177Dd0000A100* + ID_MODEL_FROM_DATABASE=THUNDERX CN88XX 48 core SoC + +@@ -64871,6 +65165,12 @@ pci:v000017CBd00001000* + pci:v000017CBd00001101* + ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter [AX500-DBS (2x2)] + ++pci:v000017CBd00001103* ++ ID_MODEL_FROM_DATABASE=Atheros QCNFA765 ++ ++pci:v000017CBd00001104* ++ ID_MODEL_FROM_DATABASE=QCN6024/9024/9074 Wireless Network Adapter ++ + pci:v000017CC* + ID_VENDOR_FROM_DATABASE=NetChip Technology, Inc + +@@ -67367,6 +67667,12 @@ pci:v00001974d00000018* + pci:v00001974d00000019* + ID_MODEL_FROM_DATABASE=FlexCard PCIe3 + ++pci:v00001974d0000001A* ++ ID_MODEL_FROM_DATABASE=FlexCard PXIe Ethernet ++ ++pci:v00001974d0000001B* ++ ID_MODEL_FROM_DATABASE=FlexCard PCIe Ethernet ++ + pci:v00001976* + ID_VENDOR_FROM_DATABASE=TRENDnet + +@@ -68339,6 +68645,21 @@ pci:v00001AA8d00000009* + pci:v00001AA8d0000000A* + ID_MODEL_FROM_DATABASE=RAIDCore Controller + ++pci:v00001AA9* ++ ID_VENDOR_FROM_DATABASE=Schweitzer Engineering Laboratories ++ ++pci:v00001AA9d0000000D* ++ ID_MODEL_FROM_DATABASE=SEL-3390S8 Serial Adapter ++ ++pci:v00001AA9d0000000E* ++ ID_MODEL_FROM_DATABASE=SEL-3390E4 Ethernet Adapter ++ ++pci:v00001AA9d00000014* ++ ID_MODEL_FROM_DATABASE=SEL-3390T Time and Ethernet Adapter ++ ++pci:v00001AA9d00000018* ++ ID_MODEL_FROM_DATABASE=SEL-3390E4 Ethernet Adapter ++ + pci:v00001AAE* + ID_VENDOR_FROM_DATABASE=Global Velocity, Inc. + +@@ -68483,6 +68804,9 @@ pci:v00001AE8d00000A58* + pci:v00001AE8d00000A5A* + ID_MODEL_FROM_DATABASE=microEnable 5 AD8-CL + ++pci:v00001AE8d00000A64* ++ ID_MODEL_FROM_DATABASE=imaWorx CXP-12 Quad ++ + pci:v00001AE8d00000B52* + ID_MODEL_FROM_DATABASE=mE5 Abacus 4G Base + +@@ -68732,6 +69056,9 @@ pci:v00001B21d00001080sv00001849sd00001080* + pci:v00001B21d00001142* + ID_MODEL_FROM_DATABASE=ASM1042A USB 3.0 Host Controller + ++pci:v00001B21d00001166* ++ ID_MODEL_FROM_DATABASE=ASM1166 Serial ATA Controller ++ + pci:v00001B21d00001182* + ID_MODEL_FROM_DATABASE=ASM1182e 2-Port PCIe x1 Gen2 Packet Switch + +@@ -68744,12 +69071,18 @@ pci:v00001B21d00001184* + pci:v00001B21d00001184sv00001849sd00001184* + ID_MODEL_FROM_DATABASE=ASM1184e 4-Port PCIe x1 Gen2 Packet Switch + ++pci:v00001B21d00001187* ++ ID_MODEL_FROM_DATABASE=ASM1187e 7-Port PCIe x1 Gen2 Packet Switch ++ + pci:v00001B21d00001242* + ID_MODEL_FROM_DATABASE=ASM1142 USB 3.1 Host Controller + + pci:v00001B21d00001343* + ID_MODEL_FROM_DATABASE=ASM1143 USB 3.1 Host Controller + ++pci:v00001B21d00001812* ++ ID_MODEL_FROM_DATABASE=ASM1812 6-Port PCIe x4 Gen2 Packet Switch ++ + pci:v00001B21d00002142* + ID_MODEL_FROM_DATABASE=ASM2142 USB 3.1 Host Controller + +@@ -68966,6 +69299,12 @@ pci:v00001B4Bd00002241sv00001028sd00002112* + pci:v00001B4Bd00002241sv00001028sd00002113* + ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Modular) + ++pci:v00001B4Bd00002241sv00001028sd00002151* ++ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (BOSS-N1 Modular ET) ++ ++pci:v00001B4Bd00002241sv00001028sd00002196* ++ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ROR-N100) ++ + pci:v00001B4Bd00002241sv00001D49sd00000306* + ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit) + +@@ -68993,6 +69332,9 @@ pci:v00001B4Bd00009130* + pci:v00001B4Bd00009130sv00001043sd00008438* + ID_MODEL_FROM_DATABASE=88SE9128 PCIe SATA 6 Gb/s RAID controller with HyperDuo (P8P67 Deluxe Motherboard) + ++pci:v00001B4Bd00009170* ++ ID_MODEL_FROM_DATABASE=88SE9170 PCIe 2.0 x1 2-port SATA 6 Gb/s Controller ++ + pci:v00001B4Bd00009172* + ID_MODEL_FROM_DATABASE=88SE9172 SATA 6Gb/s Controller + +@@ -69323,6 +69665,24 @@ pci:v00001BB1d00000100sv00001BB1sd00000151* + pci:v00001BB1d00000100sv00001BB1sd00000152* + ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5520 TCG) + ++pci:v00001BB1d00000100sv00001BB1sd00000153* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050H) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000154* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050H TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000155* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000156* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000157* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M 7mm) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000158* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M TCG 7mm) ++ + pci:v00001BB1d00000100sv00001BB1sd000001A1* + ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XP7102) + +@@ -69332,6 +69692,9 @@ pci:v00001BB1d00005012* + pci:v00001BB1d00005016* + ID_MODEL_FROM_DATABASE=FireCuda 520 SSD + ++pci:v00001BB1d00005018* ++ ID_MODEL_FROM_DATABASE=FireCuda 530 SSD ++ + pci:v00001BB3* + ID_VENDOR_FROM_DATABASE=Bluecherry + +@@ -69779,12 +70142,54 @@ pci:v00001C5Cd00002839sv00001028sd0000214A* + pci:v00001C5Cd00002839sv00001C5Csd00000100* + ID_MODEL_FROM_DATABASE=PE8000 Series NVMe Solid State Drive + ++pci:v00001C5Cd00002849* ++ ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive ++ + pci:v00001C5F* + ID_VENDOR_FROM_DATABASE=Beijing Memblaze Technology Co. Ltd. + + pci:v00001C5Fd0000000D* + ID_MODEL_FROM_DATABASE=PBlaze5 520/526 + ++pci:v00001C5Fd0000000E* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00000B20* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1920G AIC) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00000B21* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1920G 2.5" U.2) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00000B30* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G AIC) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00000B31* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3840G 2.5" U.2) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00000B40* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 7680G AIC) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00000B41* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 7680G 2.5" U.2) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00004B20* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1600G AIC) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00004B21* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 1600G 2.5" U.2) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00004B30* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3200G AIC) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00004B31* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 3200G 2.5" U.2) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00004B40* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 6400G AIC) ++ ++pci:v00001C5Fd0000000Esv00001C5Fsd00004B41* ++ ID_MODEL_FROM_DATABASE=PBlaze6 6530 (NVMe SSD PBlaze6 6530 6400G 2.5" U.2) ++ + pci:v00001C5Fd0000003D* + ID_MODEL_FROM_DATABASE=PBlaze5 920/926 + +@@ -69908,6 +70313,9 @@ pci:v00001CB8* + pci:v00001CC1* + ID_VENDOR_FROM_DATABASE=ADATA Technology Co., Ltd. + ++pci:v00001CC1d00005766* ++ ID_MODEL_FROM_DATABASE=ADATA XPG GAMMIXS1 1L Media ++ + pci:v00001CC1d00008201* + ID_MODEL_FROM_DATABASE=XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive + +@@ -69947,6 +70355,9 @@ pci:v00001CC4d00001203sv00001CC4sd0000A214* + pci:v00001CC4d000017AB* + ID_MODEL_FROM_DATABASE=NVMe 256G SSD device + ++pci:v00001CC4d00006303* ++ ID_MODEL_FROM_DATABASE=AM630 PCIe 4.0 x4 NVMe SSD Controller ++ + pci:v00001CC5* + ID_VENDOR_FROM_DATABASE=Embedded Intelligence, Inc. + +@@ -70523,6 +70934,9 @@ pci:v00001D6Cd0000101D* + pci:v00001D6Cd0000101E* + ID_MODEL_FROM_DATABASE=AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile] + ++pci:v00001D6Cd0000101F* ++ ID_MODEL_FROM_DATABASE=AR-TK242 [2x100GbE Packet Capture Device] ++ + pci:v00001D6Cd00004200* + ID_MODEL_FROM_DATABASE=A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument] + +@@ -71141,6 +71555,12 @@ pci:v00001DE5d00003000* + pci:v00001DED* + ID_VENDOR_FROM_DATABASE=Alibaba (China) Co., Ltd. + ++pci:v00001DEDd0000107F* ++ ID_MODEL_FROM_DATABASE=Elastic RDMA Adapter ++ ++pci:v00001DEDd00005007* ++ ID_MODEL_FROM_DATABASE=Elastic RDMA Adapter ++ + pci:v00001DEDd00008000* + ID_MODEL_FROM_DATABASE=M1 Root Port + +@@ -71409,7 +71829,7 @@ pci:v00001E0Fd00000007sv00001028sd00002110* + ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Dell Ent NVMe FIPS CM6 MU 6.4TB) + + pci:v00001E0Fd00000007sv00001E0Fsd00000001* +- ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6 RI 3.84TB) ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller Cx6 (Generic NVMe CM6) + + pci:v00001E0Fd00000009* + ID_MODEL_FROM_DATABASE=NVMe SSD +@@ -71417,6 +71837,39 @@ pci:v00001E0Fd00000009* + pci:v00001E0Fd00000009sv00001E0Fsd00000001* + ID_MODEL_FROM_DATABASE=NVMe SSD (Toshiba RC500 NVMe SSD 500GB) + ++pci:v00001E0Fd00000011* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 ++ ++pci:v00001E0Fd00000011sv00001028sd00002189* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 960GB) ++ ++pci:v00001E0Fd00000011sv00001028sd0000218A* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 960GB) ++ ++pci:v00001E0Fd00000011sv00001028sd0000218B* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 1.92TB) ++ ++pci:v00001E0Fd00000011sv00001028sd0000218C* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 1.92TB) ++ ++pci:v00001E0Fd00000011sv00001028sd0000218D* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 3.84TB) ++ ++pci:v00001E0Fd00000011sv00001028sd0000218E* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 3.84TB) ++ ++pci:v00001E0Fd00000011sv00001028sd0000218F* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 7.68TB) ++ ++pci:v00001E0Fd00000011sv00001028sd00002190* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 7.68TB) ++ ++pci:v00001E0Fd00000011sv00001028sd00002191* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe SED CD7 RI 15.36TB) ++ ++pci:v00001E0Fd00000011sv00001028sd00002192* ++ ID_MODEL_FROM_DATABASE=NVMe SSD Controller CD7 (DC NVMe CD7 RI 15.36TB) ++ + pci:v00001E17* + ID_VENDOR_FROM_DATABASE=Arnold & Richter Cine Technik GmbH & Co. Betriebs KG + +@@ -71490,7 +71943,7 @@ pci:v00001E39* + ID_VENDOR_FROM_DATABASE=MEDION AG + + pci:v00001E3B* +- ID_VENDOR_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd ++ ID_VENDOR_FROM_DATABASE=DapuStor Corporation + + pci:v00001E3Bd00000600* + ID_MODEL_FROM_DATABASE=NVMe SSD Controller DPU600 +@@ -71678,6 +72131,9 @@ pci:v00001E3D* + pci:v00001E49* + ID_VENDOR_FROM_DATABASE=Yangtze Memory Technologies Co.,Ltd + ++pci:v00001E49d00000041* ++ ID_MODEL_FROM_DATABASE=ZHITAI TiPro7000 ++ + pci:v00001E49d00001013* + ID_MODEL_FROM_DATABASE=PC210 + +@@ -71726,6 +72182,15 @@ pci:v00001E59* + pci:v00001E59d00000001* + ID_MODEL_FROM_DATABASE=MinION Mk1C + ++pci:v00001E5D* ++ ID_VENDOR_FROM_DATABASE=ASR Microelectronics ++ ++pci:v00001E5Dd00007000* ++ ID_MODEL_FROM_DATABASE=AI controller A7000 ++ ++pci:v00001E5Dd00007010* ++ ID_MODEL_FROM_DATABASE=AI controller A7010 ++ + pci:v00001E60* + ID_VENDOR_FROM_DATABASE=Hailo Technologies Ltd. + +@@ -71834,6 +72299,15 @@ pci:v00001EABd0000300A* + pci:v00001EABd0000300B* + ID_MODEL_FROM_DATABASE=NVMe SSD Controller 300B + ++pci:v00001EAC* ++ ID_VENDOR_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd. ++ ++pci:v00001EACd00001001* ++ ID_MODEL_FROM_DATABASE=EM120R-GL LTE Modem ++ ++pci:v00001EACd00001002* ++ ID_MODEL_FROM_DATABASE=EM160R-GL LTE Modem ++ + pci:v00001EAE* + ID_VENDOR_FROM_DATABASE=XFX Limited + +@@ -71843,6 +72317,12 @@ pci:v00001EB1* + pci:v00001EB1d00001001* + ID_MODEL_FROM_DATABASE=Video Accelerator + ++pci:v00001EB4* ++ ID_VENDOR_FROM_DATABASE=Quantum Nebula Microelectronics Technology Co.,Ltd. ++ ++pci:v00001EB4d00003401* ++ ID_MODEL_FROM_DATABASE=SSD Contoller ++ + pci:v00001EBD* + ID_VENDOR_FROM_DATABASE=EMERGETECH Company Ltd. + +@@ -71858,6 +72338,15 @@ pci:v00001ED2d00000000* + pci:v00001ED3* + ID_VENDOR_FROM_DATABASE=Yeston + ++pci:v00001ED5* ++ ID_VENDOR_FROM_DATABASE=Moore Threads Technology Co.,Ltd ++ ++pci:v00001ED5d00000100* ++ ID_MODEL_FROM_DATABASE=MTT S10 ++ ++pci:v00001ED5d00000101* ++ ID_MODEL_FROM_DATABASE=MTT S30 ++ + pci:v00001ED8* + ID_VENDOR_FROM_DATABASE=Digiteq Automotive + +@@ -71909,6 +72398,27 @@ pci:v00001F03d00005236* + pci:v00001F03d00005636* + ID_MODEL_FROM_DATABASE=IG5636-Based NVMe SSD + ++pci:v00001F2F* ++ ID_VENDOR_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co.Ltd. ++ ++pci:v00001F2Fd00001513* ++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller ++ ++pci:v00001F2Fd00001513sv00001F2Fsd00006113* ++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM660 U.2 1.6TB NVMe SSD) ++ ++pci:v00001F2Fd00001513sv00001F2Fsd00006114* ++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 1.92TB NVMe SSD) ++ ++pci:v00001F2Fd00001513sv00001F2Fsd00006115* ++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM660 U.2 3.2TB NVMe SSD) ++ ++pci:v00001F2Fd00001513sv00001F2Fsd00006116* ++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 3.84TB NVMe SSD) ++ ++pci:v00001F2Fd00001513sv00001F2Fsd00006118* ++ ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 7.68TB NVMe SSD) ++ + pci:v00001FAB* + ID_VENDOR_FROM_DATABASE=Unifabrix Ltd. + +@@ -74114,6 +74624,24 @@ pci:v00006688d00001600* + pci:v00006688d00001800* + ID_MODEL_FROM_DATABASE=CooVOX TDM BRI Module + ++pci:v00006766* ++ ID_VENDOR_FROM_DATABASE=Glenfly Tech Co., Ltd. ++ ++pci:v00006766d00003D00* ++ ID_MODEL_FROM_DATABASE=Arise-GT-10C0 ++ ++pci:v00006766d00003D02* ++ ID_MODEL_FROM_DATABASE=Arise 1020 ++ ++pci:v00006766d00003D40* ++ ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller ++ ++pci:v00006766d00003D41* ++ ID_MODEL_FROM_DATABASE=Arise 1020 High Definition Audio Controller ++ ++pci:v00006899* ++ ID_VENDOR_FROM_DATABASE=ZT Systems ++ + pci:v00006900* + ID_VENDOR_FROM_DATABASE=Red Hat, Inc. + +@@ -74147,6 +74675,15 @@ pci:v00007401d0000E100* + pci:v00007470* + ID_VENDOR_FROM_DATABASE=TP-LINK Technologies Co., Ltd. + ++pci:v00007526* ++ ID_VENDOR_FROM_DATABASE=HongQin (Beijing) Technology Co., Ltd. ++ ++pci:v00007526d00000082* ++ ID_MODEL_FROM_DATABASE=HQ SSD 1TB ++ ++pci:v00007526d00000083* ++ ID_MODEL_FROM_DATABASE=HQ SSD 2TB M.2 NVMe ++ + pci:v00007604* + ID_VENDOR_FROM_DATABASE=O.N. Electronic Co Ltd. + +@@ -76160,6 +76697,24 @@ pci:v00008086d00000B60sv00001028sd00002103* + pci:v00008086d00000B60sv00001028sd00002104* + ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe RI U.2 7.68TB (P5500)) + ++pci:v00008086d00000B60sv00001028sd0000219A* ++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe P5316 RI 15.36TB) ++ ++pci:v00008086d00000B60sv00001028sd0000219B* ++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe P5316 RI 30.72TB) ++ ++pci:v00008086d00000B60sv00001028sd0000219C* ++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED P5316 RI 15.36) ++ ++pci:v00008086d00000B60sv00001028sd0000219D* ++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED P5316 RI 30.72) ++ ++pci:v00008086d00000B60sv00001028sd0000219E* ++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe FIPS P5316 RI 15.36TB) ++ ++pci:v00008086d00000B60sv00001028sd0000219F* ++ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe FIPS P5316 RI 30.72) ++ + pci:v00008086d00000B60sv00008086sd00008008* + ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510)) + +@@ -76484,12 +77039,33 @@ pci:v00008086d00000D9F* + pci:v00008086d00000DD2* + ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 + ++pci:v00008086d00000DD2sv00001137sd00000000* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (I710T4LG 4x1 GbE RJ45 PCIe NIC) ++ ++pci:v00008086d00000DD2sv00001137sd000002E3* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (I710T4LG 4x1 GbE RJ45 PCIe NIC) ++ ++pci:v00008086d00000DD2sv00008086sd00000000* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L) ++ + pci:v00008086d00000DD2sv00008086sd0000000D* + ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L) + + pci:v00008086d00000DD2sv00008086sd00000010* + ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L for OCP 3.0) + ++pci:v00008086d00000DD2sv00008086sd0000401A* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L) ++ ++pci:v00008086d00000DD2sv00008086sd0000401B* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L for OCP 3.0) ++ ++pci:v00008086d00000DDA* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ ++ ++pci:v00008086d00000DDAsv00001BD4sd00000076* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ ++ + pci:v00008086d00000E00* + ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 + +@@ -80507,6 +81083,9 @@ pci:v00008086d00001592sv00008086sd0000000D* + pci:v00008086d00001592sv00008086sd0000000E* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-2C-Q2) + ++pci:v00008086d00001592sv00008086sd00000010* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-stg Adapter) ++ + pci:v00008086d00001593* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP + +@@ -80543,9 +81122,18 @@ pci:v00008086d00001593sv00008086sd0000000D* + pci:v00008086d00001593sv00008086sd0000000E* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4T) + ++pci:v00008086d00001593sv00008086sd0000000F* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV-stg Adapter) ++ ++pci:v00008086d00001593sv00008086sd00000010* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV-st Adapter) ++ + pci:v00008086d00001599* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane + ++pci:v00008086d00001599sv00008086sd00000001* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane (Ethernet 25G 2P E810-XXV-k Mezz) ++ + pci:v00008086d0000159A* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for QSFP + +@@ -91634,6 +92222,9 @@ pci:v00008086d00003433* + pci:v00008086d00003438* + ID_MODEL_FROM_DATABASE=7500/5520/5500/X58 I/O Hub Throttle Registers + ++pci:v00008086d0000347E* ++ ID_MODEL_FROM_DATABASE=Ice Lake Xeon Non-Transparent Bridge ++ + pci:v00008086d00003482* + ID_MODEL_FROM_DATABASE=Ice Lake-LP LPC Controller + +@@ -94064,12 +94655,18 @@ pci:v00008086d0000444E* + pci:v00008086d0000460D* + ID_MODEL_FROM_DATABASE=12th Gen Core Processor PCI Express x16 Controller #1 + ++pci:v00008086d0000461D* ++ ID_MODEL_FROM_DATABASE=Alder Lake Innovation Platform Framework Processor Participant ++ + pci:v00008086d0000461E* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 USB Controller + + pci:v00008086d0000461F* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 PCI Express Root Port #3 + ++pci:v00008086d00004626* ++ ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Graphics Controller ++ + pci:v00008086d00004629* + ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers + +@@ -94094,6 +94691,9 @@ pci:v00008086d0000464D* + pci:v00008086d0000464F* + ID_MODEL_FROM_DATABASE=12th Gen Core Processor Gaussian & Neural Accelerator + ++pci:v00008086d00004660* ++ ID_MODEL_FROM_DATABASE=12th Gen Core Processor Host Bridge/DRAM Registers ++ + pci:v00008086d0000466D* + ID_MODEL_FROM_DATABASE=Alder Lake-P Thunderbolt 4 NHI #1 + +@@ -94118,6 +94718,9 @@ pci:v00008086d000046A1* + pci:v00008086d000046A3* + ID_MODEL_FROM_DATABASE=Alder Lake-P GT1 [UHD Graphics] + ++pci:v00008086d000046A6* ++ ID_MODEL_FROM_DATABASE=Alder Lake-P Integrated Graphics Controller ++ + pci:v00008086d000046C0* + ID_MODEL_FROM_DATABASE=AlderLake-M GT1 + +@@ -94152,10 +94755,13 @@ pci:v00008086d00004C9A* + ID_MODEL_FROM_DATABASE=RocketLake-S [UHD Graphics] + + pci:v00008086d00004DA3* +- ID_MODEL_FROM_DATABASE=JaserLake SMBus ++ ID_MODEL_FROM_DATABASE=Jasper Lake SMBus + + pci:v00008086d00004DA4* +- ID_MODEL_FROM_DATABASE=JaserLake SPI (flash) Controller ++ ID_MODEL_FROM_DATABASE=Jasper Lake SPI Controller ++ ++pci:v00008086d00004DC8* ++ ID_MODEL_FROM_DATABASE=Jasper Lake HD Audio + + pci:v00008086d00004DE0* + ID_MODEL_FROM_DATABASE=Management Engine Interface +@@ -94337,12 +94943,21 @@ pci:v00008086d0000504C* + pci:v00008086d00005181* + ID_MODEL_FROM_DATABASE=Alder Lake PCH-P LPC/eSPI Controller + ++pci:v00008086d00005182* ++ ID_MODEL_FROM_DATABASE=Alder Lake PCH eSPI Controller ++ + pci:v00008086d000051A3* + ID_MODEL_FROM_DATABASE=Alder Lake PCH-P SMBus Host Controller + + pci:v00008086d000051A4* + ID_MODEL_FROM_DATABASE=Alder Lake-P PCH SPI Controller + ++pci:v00008086d000051A8* ++ ID_MODEL_FROM_DATABASE=Alder Lake PCH UART #0 ++ ++pci:v00008086d000051A9* ++ ID_MODEL_FROM_DATABASE=Alder Lake PCH UART #1 ++ + pci:v00008086d000051BF* + ID_MODEL_FROM_DATABASE=Alder Lake PCH-P PCI Express Root Port #9 + +@@ -95486,6 +96101,45 @@ pci:v00008086d00007800sv00008086sd00000000* + pci:v00008086d00007800sv00008086sd00000100* + ID_MODEL_FROM_DATABASE=82740 (i740) AGP Graphics Accelerator (Intel740 Graphics Accelerator) + ++pci:v00008086d00007A84* ++ ID_MODEL_FROM_DATABASE=Z690 Chipset LPC/eSPI Controller ++ ++pci:v00008086d00007AA3* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH SMBus Controller ++ ++pci:v00008086d00007AA4* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH SPI Controller ++ ++pci:v00008086d00007AA7* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH Shared SRAM ++ ++pci:v00008086d00007AB4* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #13 ++ ++pci:v00008086d00007ABD* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #6 ++ ++pci:v00008086d00007ACC* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH I2C Controller #0 ++ ++pci:v00008086d00007AD0* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S HD Audio Controller ++ ++pci:v00008086d00007AE0* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH USB 3.2 Gen 2x2 XHCI Controller ++ ++pci:v00008086d00007AE2* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH SATA Controller [AHCI Mode] ++ ++pci:v00008086d00007AE8* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH HECI Controller #1 ++ ++pci:v00008086d00007AF0* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi ++ ++pci:v00008086d00007AF0sv00008086sd00000094* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH CNVi WiFi (Wi-Fi 6 AX201 160MHz) ++ + pci:v00008086d00008002* + ID_MODEL_FROM_DATABASE=Trusted Execution Technology Registers + +@@ -96593,6 +97247,9 @@ pci:v00008086d00009B63* + pci:v00008086d00009B64* + ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers + ++pci:v00008086d00009BA8* ++ ID_MODEL_FROM_DATABASE=CometLake-S GT1 [UHD Graphics 610] ++ + pci:v00008086d00009BC4* + ID_MODEL_FROM_DATABASE=CometLake-H GT2 [UHD Graphics] + +@@ -97193,6 +97850,9 @@ pci:v00008086d00009D3Dsv0000103Csd00008079* + pci:v00008086d00009D3Dsv000017AAsd00002247* + ID_MODEL_FROM_DATABASE=Sunrise Point-LP Active Management Technology - SOL (ThinkPad T570) + ++pci:v00008086d00009D3E* ++ ID_MODEL_FROM_DATABASE=iTouch Controller ++ + pci:v00008086d00009D43* + ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller + +@@ -97355,6 +98015,9 @@ pci:v00008086d00009DA8* + pci:v00008086d00009DAA* + ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO SPI Controller + ++pci:v00008086d00009DAB* ++ ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO SPI Controller ++ + pci:v00008086d00009DB0* + ID_MODEL_FROM_DATABASE=Cannon Point-LP PCI Express Root Port #9 + +@@ -97385,6 +98048,9 @@ pci:v00008086d00009DBE* + pci:v00008086d00009DBF* + ID_MODEL_FROM_DATABASE=Cannon Point PCI Express Root Port #8 + ++pci:v00008086d00009DC4* ++ ID_MODEL_FROM_DATABASE=Cannon Point-LP SD Host Controller ++ + pci:v00008086d00009DC5* + ID_MODEL_FROM_DATABASE=Cannon Point-LP Serial IO I2C Host Controller + +@@ -98475,7 +99141,7 @@ pci:v00008086d0000A39A* + ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port 11 + + pci:v00008086d0000A3A1* +- ID_MODEL_FROM_DATABASE=Memory controller ++ ID_MODEL_FROM_DATABASE=Cannon Lake PCH Power Management Controller + + pci:v00008086d0000A3A3* + ID_MODEL_FROM_DATABASE=Comet Lake PCH-V SMBus Host Controller +@@ -99923,6 +100589,12 @@ pci:v00009005d0000028Fsv00001BD4sd00000071* + pci:v00009005d0000028Fsv00001BD4sd00000072* + ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E16i) + ++pci:v00009005d0000028Fsv00001CC4sd00000101* ++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8204) ++ ++pci:v00009005d0000028Fsv00001CC4sd00000201* ++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8222) ++ + pci:v00009005d0000028Fsv00001D49sd00000220* + ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (ThinkSystem 4350-8i SAS/SATA 12Gb HBA) + +@@ -100754,6 +101426,12 @@ pci:v0000CDDDd00000200* + pci:v0000CEBA* + ID_VENDOR_FROM_DATABASE=KEBA AG + ++pci:v0000CF86* ++ ID_VENDOR_FROM_DATABASE=Spectrum-4TOR ++ ++pci:v0000CF86d00000276* ++ ID_MODEL_FROM_DATABASE=Spectrum-4TOR in Flash Recovery Mode ++ + pci:v0000D161* + ID_VENDOR_FROM_DATABASE=Digium, Inc. + +diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb +index 9f457d9f65..4bcb238815 100644 +--- a/hwdb.d/20-usb-vendor-model.hwdb ++++ b/hwdb.d/20-usb-vendor-model.hwdb +@@ -8078,6 +8078,12 @@ usb:v046Dp0846* + usb:v046Dp084B* + ID_MODEL_FROM_DATABASE=ConferenceCam Connect Video + ++usb:v046Dp084C* ++ ID_MODEL_FROM_DATABASE=ConferenceCam Connect Audio ++ ++usb:v046Dp084E* ++ ID_MODEL_FROM_DATABASE=ConferenceCam Connect ++ + usb:v046Dp0850* + ID_MODEL_FROM_DATABASE=QuickCam Web + +@@ -8235,7 +8241,7 @@ usb:v046Dp08D9* + ID_MODEL_FROM_DATABASE=QuickCam IM/Connect + + usb:v046Dp08DA* +- ID_MODEL_FROM_DATABASE=QuickCam Messanger ++ ID_MODEL_FROM_DATABASE=QuickCam Messenger + + usb:v046Dp08DD* + ID_MODEL_FROM_DATABASE=QuickCam for Notebooks +@@ -8652,7 +8658,7 @@ usb:v046DpC06C* + ID_MODEL_FROM_DATABASE=Optical Mouse + + usb:v046DpC077* +- ID_MODEL_FROM_DATABASE=M105 Optical Mouse ++ ID_MODEL_FROM_DATABASE=Mouse + + usb:v046DpC07C* + ID_MODEL_FROM_DATABASE=M-R0017 [G700s Rechargeable Gaming Mouse] +@@ -8676,7 +8682,7 @@ usb:v046DpC08B* + ID_MODEL_FROM_DATABASE=G502 SE HERO Gaming Mouse + + usb:v046DpC092* +- ID_MODEL_FROM_DATABASE=G203 LIGHTSYNC Gaming Mouse ++ ID_MODEL_FROM_DATABASE=G102/G203 LIGHTSYNC Gaming Mouse + + usb:v046DpC101* + ID_MODEL_FROM_DATABASE=UltraX Media Remote +@@ -9122,6 +9128,9 @@ usb:v046DpC534* + usb:v046DpC537* + ID_MODEL_FROM_DATABASE=Cordless Mouse Receiver + ++usb:v046DpC539* ++ ID_MODEL_FROM_DATABASE=Cordless Mouse Receiver ++ + usb:v046DpC53A* + ID_MODEL_FROM_DATABASE=PowerPlay Wireless Charging System + +@@ -58655,6 +58664,9 @@ usb:v1A86p5523* + usb:v1A86p5584* + ID_MODEL_FROM_DATABASE=CH341 in parallel mode, usb to printer port converter + ++usb:v1A86p7522* ++ ID_MODEL_FROM_DATABASE=CH340 serial converter ++ + usb:v1A86p7523* + ID_MODEL_FROM_DATABASE=CH340 serial converter + +@@ -58665,7 +58677,7 @@ usb:v1A86p7584* + ID_MODEL_FROM_DATABASE=CH340S + + usb:v1A86pE008* +- ID_MODEL_FROM_DATABASE=HID-based serial adapater ++ ID_MODEL_FROM_DATABASE=HID-based serial adapter + + usb:v1A89* + ID_VENDOR_FROM_DATABASE=Dynalith Systems Co., Ltd. +@@ -60954,7 +60966,7 @@ usb:v1D50p6054* + ID_MODEL_FROM_DATABASE=Satlab/AAUSAT3 BlueBox + + usb:v1D50p6055* +- ID_MODEL_FROM_DATABASE=RADiuS ER900TRS-02 transciever with SMA Connector ++ ID_MODEL_FROM_DATABASE=RADiuS ER900TRS-02 transceiver with SMA Connector + + usb:v1D50p6056* + ID_MODEL_FROM_DATABASE=The Glitch +@@ -61365,16 +61377,16 @@ usb:v1D50p60EE* + ID_MODEL_FROM_DATABASE=Duet 3 motion control electronics + + usb:v1D50p60F0* +- ID_MODEL_FROM_DATABASE=UDAD-T1 data aquisition device (boot) ++ ID_MODEL_FROM_DATABASE=UDAD-T1 data acquisition device (boot) + + usb:v1D50p60F1* +- ID_MODEL_FROM_DATABASE=UDAD-T1 data aquisition device ++ ID_MODEL_FROM_DATABASE=UDAD-T1 data acquisition device + + usb:v1D50p60F2* +- ID_MODEL_FROM_DATABASE=UDAD-T2 data aquisition device (boot) ++ ID_MODEL_FROM_DATABASE=UDAD-T2 data acquisition device (boot) + + usb:v1D50p60F3* +- ID_MODEL_FROM_DATABASE=UDAD-T2 data aquisition device ++ ID_MODEL_FROM_DATABASE=UDAD-T2 data acquisition device + + usb:v1D50p60F4* + ID_MODEL_FROM_DATABASE=Uniti ARC motor controller +@@ -61421,6 +61433,9 @@ usb:v1D50p6122* + usb:v1D50p614C* + ID_MODEL_FROM_DATABASE=dwtk In-Circuit Emulator + ++usb:v1D50p614D* ++ ID_MODEL_FROM_DATABASE=Generic Display ++ + usb:v1D50p8085* + ID_MODEL_FROM_DATABASE=Box0 (box0-v5) + +@@ -61473,7 +61488,7 @@ usb:v1D57pAF03* + ID_MODEL_FROM_DATABASE=Wireless Receiver + + usb:v1D57pFA20* +- ID_MODEL_FROM_DATABASE=2.4GHz Wireless Reciever (Mini Keyboard & Mouse) ++ ID_MODEL_FROM_DATABASE=2.4GHz Wireless Receiver (Mini Keyboard & Mouse) + + usb:v1D5B* + ID_VENDOR_FROM_DATABASE=Smartronix, Inc. +@@ -62397,7 +62412,22 @@ usb:v1FBD* + ID_VENDOR_FROM_DATABASE=Delphin Technology AG + + usb:v1FBDp0001* +- ID_MODEL_FROM_DATABASE=Expert Key - Data aquisition system ++ ID_MODEL_FROM_DATABASE=Expert Key - Data acquisition system ++ ++usb:v1FBDp0004* ++ ID_MODEL_FROM_DATABASE=MetiOS Device (RNDIS) ++ ++usb:v1FBDp0005* ++ ID_MODEL_FROM_DATABASE=Loggito ++ ++usb:v1FBDp0006* ++ ID_MODEL_FROM_DATABASE=LoggitoLab 8 AI-RTD ++ ++usb:v1FBDp0007* ++ ID_MODEL_FROM_DATABASE=LoggitoLab 8 TC ++ ++usb:v1FBDp0008* ++ ID_MODEL_FROM_DATABASE=LoggitoLab 4 AI-RTD 4 TC + + usb:v1FC9* + ID_VENDOR_FROM_DATABASE=NXP Semiconductors +@@ -67871,6 +67901,30 @@ usb:v3195pF280* + usb:v3195pF281* + ID_MODEL_FROM_DATABASE=MSO-28 + ++usb:v3197* ++ ID_VENDOR_FROM_DATABASE=Katusha ++ ++usb:v3197p1001* ++ ID_MODEL_FROM_DATABASE=M151 ++ ++usb:v3197p1002* ++ ID_MODEL_FROM_DATABASE=M250 ++ ++usb:v3197p1003* ++ ID_MODEL_FROM_DATABASE=P130 ++ ++usb:v3197p1004* ++ ID_MODEL_FROM_DATABASE=M130 ++ ++usb:v3197p1101* ++ ID_MODEL_FROM_DATABASE=P247 ++ ++usb:v3197p1102* ++ ID_MODEL_FROM_DATABASE=M247 ++ ++usb:v3197p1103* ++ ID_MODEL_FROM_DATABASE=M348 ++ + usb:v31C9* + ID_VENDOR_FROM_DATABASE=BeiJing LanXum Computer Technology Co., Ltd. + +@@ -69653,9 +69707,24 @@ usb:v8086p07D3* + usb:v8086p07DC* + ID_MODEL_FROM_DATABASE=Bluetooth 4.0* Smart Ready (low energy) + ++usb:v8086p0A66* ++ ID_MODEL_FROM_DATABASE=RealSense 3D Camera (Front F200) ++ ++usb:v8086p0AA5* ++ ID_MODEL_FROM_DATABASE=RealSense SR300 ++ ++usb:v8086p0AD2* ++ ID_MODEL_FROM_DATABASE=RealSense D410 ++ ++usb:v8086p0AD3* ++ ID_MODEL_FROM_DATABASE=RealSense D415 ++ + usb:v8086p0B07* + ID_MODEL_FROM_DATABASE=RealSense D435 + ++usb:v8086p0B64* ++ ID_MODEL_FROM_DATABASE=RealSense L515 ++ + usb:v8086p0DAD* + ID_MODEL_FROM_DATABASE=Cherry MiniatureCard Keyboard + +@@ -69731,6 +69800,9 @@ usb:v8086p9500* + usb:v8086p9890* + ID_MODEL_FROM_DATABASE=82930 Test Board + ++usb:v8086pA36D* ++ ID_MODEL_FROM_DATABASE=Host Controller ++ + usb:v8086pBEEF* + ID_MODEL_FROM_DATABASE=SCM Miniature Card Reader/Writer + +diff --git a/hwdb.d/acpi_id_registry.html b/hwdb.d/acpi_id_registry.html +index 5c37d1ae66..b2a6844521 100644 +--- a/hwdb.d/acpi_id_registry.html ++++ b/hwdb.d/acpi_id_registry.html +@@ -110,6 +110,9 @@ + Purism SPCPURI06/10/2021 + Lontium Semiconductor CorporationLTSC07/21/2021 + Wacom TechnologyWACF09/21/2021 ++ Shanghai Aiwei Electronic Technology Co., Ltd.AWDZ12/31/2021 ++ Silicom Ltd. Connectivity SolutionsSILC03/28/2022 ++ NOLO VRNOLO03/28/2022 + + + +diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt +index 82cbdee336..eb99ea7fb0 100644 +--- a/hwdb.d/ma-large.txt ++++ b/hwdb.d/ma-large.txt +@@ -10088,12 +10088,6 @@ AC9A22 (base 16) NXP Semiconductors + Hefei Anhui 230088 + CN + +-80-6A-B0 (hex) Shenzhen TINNO Mobile Technology Corp. +-806AB0 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F.,H-3 Building,OCT Eastern lndustrial Park +- Nanshan District, Shenzhen GUANGDONG 518053 +- CN +- + 48-AD-08 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 48AD08 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -18563,12 +18557,6 @@ D4C766 (base 16) Acentic GmbH + Sungnam-Si Kyunggi-Do 463-870 + KR + +-00-26-04 (hex) Audio Processing Technology Ltd +-002604 (base 16) Audio Processing Technology Ltd +- Whiterock Business Park +- Belfast BT12 7FP +- GB +- + 00-26-59 (hex) Nintendo Co., Ltd. + 002659 (base 16) Nintendo Co., Ltd. + 11-1 HOKOTATE-CHO KAMITOBA, MINAMI-KU +@@ -31049,12 +31037,6 @@ D4C766 (base 16) Acentic GmbH + GOLDEN CO 80401 + US + +-00-00-BD (hex) Mitsubishi Cable Industries, Ltd. / Ryosei Systems +-0000BD (base 16) Mitsubishi Cable Industries, Ltd. / Ryosei Systems +- 8, NISHINO-CHO, HIGASHI-MUKOJIMA +- AMAGASAKI HYOGO 660-0856 +- JP +- + 00-00-2E (hex) SOCIETE EVIRA + 00002E (base 16) SOCIETE EVIRA + ZONE PORTUAIRE DE BREGAILLON +@@ -34475,12 +34457,6 @@ DCCD74 (base 16) Japan E.M.Solutions Co., Ltd. + Kato 673-1447 + JP + +-00-12-93 (hex) ABB Power Protection (CH) +-001293 (base 16) ABB Power Protection (CH) +- 1501 Roanoke Blvd. +- Salem VA 24153 +- US +- + A0-3B-01 (hex) Kyung In Electronics + A03B01 (base 16) Kyung In Electronics + #1411, Byucksan Digital Valley 2, 184, Gasan Digital2-ro, Geumcheon-gu +@@ -34619,12 +34595,6 @@ A0A3F0 (base 16) D-Link International + Shenzhen 518000 + CN + +-E0-6C-4E (hex) Shenzhen TINNO Mobile Technology Corp. +-E06C4E (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + F0-25-8E (hex) HUAWEI TECHNOLOGIES CO.,LTD + F0258E (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -35279,12 +35249,6 @@ C87B23 (base 16) Bose Corporation + Moulineaux 92370 + FR + +-30-8E-7A (hex) Shenzhen iComm Semiconductor CO.,LTD +-308E7A (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen. +- Shenzhen 518067 +- CN +- + 9C-1C-37 (hex) AltoBeam (China) Inc. + 9C1C37 (base 16) AltoBeam (China) Inc. + B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian +@@ -37232,12 +37196,6 @@ A41752 (base 16) Hifocus Electronics India Private Limited + Chennai Tamil Nadu 600002 + IN + +-2C-DD-5F (hex) Shenzhen iComm Semiconductor CO.,LTD +-2CDD5F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen. +- Shenzhen 518067 +- CN +- + 40-FE-95 (hex) New H3C Technologies Co., Ltd + 40FE95 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District +@@ -37496,12 +37454,6 @@ AC567B (base 16) Sunnovo International Limited + Beijing Beijing 100083 + CN + +-A0-B4-BF (hex) InfiNet LLC +-A0B4BF (base 16) InfiNet LLC +- office 11, 24 S.Deryabinoy st. +- Yekaterinburg Sverdlovsk region 620102 +- RU +- + 9C-C1-2D (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. + 9CC12D (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. + Midea Global Innovation Center,Beijiao Town,Shunde +@@ -37526,18 +37478,36 @@ DC8084 (base 16) Apple, Inc. + Ernakulam KL 686662 + IN + +-B0-5C-16 (hex) Fiberhome Telecommunication Technologies Co.,LTD +-B05C16 (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 ++E4-DA-DF (hex) Taicang T&W Electronics ++E4DADF (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 + CN + +-08-E0-21 (hex) Honor Device Co., Ltd. +-08E021 (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 ++7C-35-F8 (hex) Zhejiang Tmall Technology Co., Ltd. ++7C35F8 (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 ++ CN ++ ++74-26-FF (hex) zte corporation ++7426FF (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++C4-27-28 (hex) zte corporation ++C42728 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + ++C8-58-95 (hex) Motorola Mobility LLC, a Lenovo Company ++C85895 (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ + A8-53-7D (hex) Mist Systems, Inc. + A8537D (base 16) Mist Systems, Inc. + 1601 South De Anza Blvd, Suite 248 +@@ -37550,42 +37520,657 @@ A8537D (base 16) Mist Systems, Inc. + San Francisco CA 94107 + US + ++08-E0-21 (hex) Honor Device Co., Ltd. ++08E021 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++B0-5C-16 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++B05C16 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ + E8-D3-22 (hex) Cisco Systems, Inc + E8D322 (base 16) Cisco Systems, Inc + 80 West Tasman Drive + San Jose CA 94568 + US + +-E4-DA-DF (hex) Taicang T&W Electronics +-E4DADF (base 16) Taicang T&W Electronics +- 89# Jiang Nan RD +- Suzhou Jiangsu 215412 ++30-2B-DC (hex) Top-Unum Electronics Co., LTD ++302BDC (base 16) Top-Unum Electronics Co., LTD ++ No. 58, Ln. 137, Jianshan Rd., Yingge Dist., ++ New Taipei City 239, Taiwan 239 + CN + +-7C-35-F8 (hex) Zhejiang Tmall Technology Co., Ltd. +-7C35F8 (base 16) Zhejiang Tmall Technology Co., Ltd. +- No.969 Wenyi West Road, Wuchang Street, Yuhang District +- Hangzhou Zhejiang 310024 ++8C-15-53 (hex) Beijing Memblaze Technology Co Ltd ++8C1553 (base 16) Beijing Memblaze Technology Co Ltd ++ Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian ++ Beijing Beijing 100192 + CN + +-74-26-FF (hex) zte corporation +-7426FF (base 16) zte corporation ++D4-BD-4F (hex) Ruckus Wireless ++D4BD4F (base 16) Ruckus Wireless ++ 350 West Java Drive ++ Sunnyvale CA 94089 ++ US ++ ++5C-C9-C0 (hex) Renesas Electronics (Penang) Sdn. Bhd. ++5CC9C0 (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY ++ ++6C-B1-58 (hex) TP-LINK TECHNOLOGIES CO.,LTD. ++6CB158 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. ++ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan ++ Shenzhen Guangdong 518057 ++ CN ++ ++E8-81-AB (hex) Beijing Sankuai Online Technology Co.,Ltd ++E881AB (base 16) Beijing Sankuai Online Technology Co.,Ltd ++ BC Building, China Electronic Science Taiji Information Technology Industry Base, Yard 7, Rongda Road, Chaoyang District ++ Beijing 100102 ++ CN ++ ++1C-47-F6 (hex) Zhidao Network Technology(Shenzhen) Co.,Ltd ++1C47F6 (base 16) Zhidao Network Technology(Shenzhen) Co.,Ltd ++ B3, 11 / F, Exiang Technology Building, No. 31, Zhongsi Road, Gaoxin, Maling Community, Yuehai Street, Nanshan District ++ Shenzhen 518000 ++ CN ++ ++A0-B4-BF (hex) InfiNet LLC ++A0B4BF (base 16) InfiNet LLC ++ Office 425, 69/75 Vavilova str. ++ Moscow\ 117335 ++ RU ++ ++E8-EB-D3 (hex) Mellanox Technologies, Inc. ++E8EBD3 (base 16) Mellanox Technologies, Inc. ++ 350 Oakmead Parkway, Suite 100 ++ Sunnyvale CA 94085 ++ US ++ ++C0-06-0C (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C0060C (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++B0-A4-F0 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++B0A4F0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++24-75-3A (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++24753A (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++90-F7-B2 (hex) New H3C Technologies Co., Ltd ++90F7B2 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++04-E3-1A (hex) Sagemcom Broadband SAS ++04E31A (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++6C-99-9D (hex) Amazon Technologies Inc. ++6C999D (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++7C-6A-60 (hex) China Mobile Group Device Co.,Ltd. ++7C6A60 (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ ++68-18-D9 (hex) Hill AFB - CAPRE Group ++6818D9 (base 16) Hill AFB - CAPRE Group ++ 7278 4th Street ++ Hill AFB UT 84056 ++ US ++ ++18-BC-57 (hex) ADVA Optical Networking Ltd. ++18BC57 (base 16) ADVA Optical Networking Ltd. ++ ADVAntage House ++ York YO30 4RY ++ GB ++ ++9C-A2-F4 (hex) TP-Link Corporation Limited ++9CA2F4 (base 16) TP-Link Corporation Limited ++ Room 901,9/F.New East Ocean Centre, 9 Science Museum Road ++ Tsim Sha Tsui Kowloon 999077 ++ HK ++ ++1C-61-B4 (hex) TP-Link Corporation Limited ++1C61B4 (base 16) TP-Link Corporation Limited ++ Room 901,9/F.New East Ocean Centre, 9 Science Museum Road ++ Tsim Sha Tsui Kowloon 999077 ++ HK ++ ++B4-69-5F (hex) TCT mobile ltd ++B4695F (base 16) TCT mobile ltd ++ No.86 hechang 7th road, zhongkai, Hi-Tech District ++ Hui Zhou Guang Dong 516006 ++ CN ++ ++D8-E2-DF (hex) Microsoft Corporation ++D8E2DF (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ ++6C-93-08 (hex) IEEE Registration Authority ++6C9308 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++38-8F-30 (hex) Samsung Electronics Co.,Ltd ++388F30 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++24-06-F2 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++2406F2 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++84-C6-92 (hex) Texas Instruments ++84C692 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++6C-B2-FD (hex) Texas Instruments ++6CB2FD (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++6C-0F-61 (hex) Hypervolt Ltd ++6C0F61 (base 16) Hypervolt Ltd ++ 25 Churchill Place ++ London E14 5EY ++ GB ++ ++A0-44-66 (hex) Intellics ++A04466 (base 16) Intellics ++ 697, Pangyo-ro, Bundang-gu ++ Seongnam-si Gyeonggi-do 13511 ++ KR ++ ++CC-66-18 (hex) Adtran Inc ++CC6618 (base 16) Adtran Inc ++ 901 Explorer Blvd. ++ Huntsville AL 35806-2807 ++ US ++ ++C0-C1-70 (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++C0C170 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++50-42-89 (hex) zte corporation ++504289 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +-C4-27-28 (hex) zte corporation +-C42728 (base 16) zte corporation ++30-8E-7A (hex) Shenzhen iComm Semiconductor CO.,LTD ++308E7A (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++2C-DD-5F (hex) Shenzhen iComm Semiconductor CO.,LTD ++2CDD5F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++C0-6D-ED (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. ++C06DED (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. ++ No.555 Qianmo Road ++ Hangzhou Zhejiang 310052 ++ CN ++ ++44-6D-7F (hex) Amazon Technologies Inc. ++446D7F (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno 89507 ++ US ++ ++E0-27-6C (hex) Guangzhou Shiyuan Electronic Technology Company Limited ++E0276C (base 16) Guangzhou Shiyuan Electronic Technology Company Limited ++ No.6, 4th Yunpu Road, Yunpu industry District ++ Guangzhou Guangdong 510530 ++ CN ++ ++90-93-5A (hex) ARRIS Group, Inc. ++90935A (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++AC-8F-A9 (hex) Nokia Solutions and Networks GmbH & Co. KG ++AC8FA9 (base 16) Nokia Solutions and Networks GmbH & Co. KG ++ Werinherstrasse 91 ++ München Bavaria D-81541 ++ DE ++ ++4C-73-4F (hex) Juniper Networks ++4C734F (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++24-EB-ED (hex) HUAWEI TECHNOLOGIES CO.,LTD ++24EBED (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++AC-51-AB (hex) HUAWEI TECHNOLOGIES CO.,LTD ++AC51AB (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++48-CD-D3 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++48CDD3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++F8-AD-24 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++F8AD24 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++A8-C9-8A (hex) New H3C Technologies Co., Ltd ++A8C98A (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++44-29-1E (hex) AltoBeam (China) Inc. ++44291E (base 16) AltoBeam (China) Inc. ++ B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian ++ Beijing Beijing 100083 ++ CN ++ ++DC-8E-95 (hex) Silicon Laboratories ++DC8E95 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ ++7C-EF-40 (hex) Nextorage Corporation ++7CEF40 (base 16) Nextorage Corporation ++ Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku ++ Kawasaki City Kanagawa 210-0007 ++ JP ++ ++28-BE-43 (hex) vivo Mobile Communication Co., Ltd. ++28BE43 (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++2C-FC-8B (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++2CFC8B (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++28-74-F5 (hex) Nokia Solutions and Networks GmbH & Co. KG ++2874F5 (base 16) Nokia Solutions and Networks GmbH & Co. KG ++ Werinherstrasse 91 ++ München Bavaria D-81541 ++ DE ++ ++B0-1F-8C (hex) Aruba, a Hewlett Packard Enterprise Company ++B01F8C (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++C0-E0-1C (hex) IoT Security Group, SL ++C0E01C (base 16) IoT Security Group, SL ++ Calle Pez Dorado, 27, local 2 ++ Torremolinos Malaga 29620 ++ ES ++ ++00-26-04 (hex) WorldCast Systems ++002604 (base 16) WorldCast Systems ++ 20 Avenue Neil Armstrong ++ Mérignac 33700 ++ FR ++ ++00-CB-7A (hex) Technicolor CH USA Inc. ++00CB7A (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ ++F8-AB-82 (hex) Xiaomi Communications Co Ltd ++F8AB82 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++EC-30-B3 (hex) Xiaomi Communications Co Ltd ++EC30B3 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++1C-AF-4A (hex) Samsung Electronics Co.,Ltd ++1CAF4A (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++C8-12-0B (hex) Samsung Electronics Co.,Ltd ++C8120B (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++90-2C-FB (hex) CanTops Co,.Ltd. ++902CFB (base 16) CanTops Co,.Ltd. ++ A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil ++ Yeongtong-gu Suwon-si, Gyonggi-do 1660 ++ KR ++ ++A8-A2-37 (hex) Arcadyan Corporation ++A8A237 (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW ++ ++00-00-BD (hex) RYOSEI, Ltd. ++0000BD (base 16) RYOSEI, Ltd. ++ 16-4, kitahatsushima-cho ++ Amagasaki-shi Hyogo 660-0834 ++ JP ++ ++AC-CC-FC (hex) Amazon Technologies Inc. ++ACCCFC (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++08-E6-3B (hex) zte corporation ++08E63B (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +-C8-58-95 (hex) Motorola Mobility LLC, a Lenovo Company +-C85895 (base 16) Motorola Mobility LLC, a Lenovo Company +- 222 West Merchandise Mart Plaza +- Chicago IL 60654 ++88-C1-74 (hex) zte corporation ++88C174 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++C8-9E-61 (hex) Lyngsoe Systems LTd ++C89E61 (base 16) Lyngsoe Systems LTd ++ 101 Simona Dr., Unit 2 ++ Bolton Ontario L7E 4E8 ++ CA ++ ++9C-57-BC (hex) eero inc. ++9C57BC (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++2C-82-17 (hex) Apple, Inc. ++2C8217 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 + US + ++14-2D-4D (hex) Apple, Inc. ++142D4D (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++EC-42-CC (hex) Apple, Inc. ++EC42CC (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++B8-21-1C (hex) Apple, Inc. ++B8211C (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++D4-5A-3F (hex) Juniper Networks ++D45A3F (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++E8-DC-6C (hex) Cisco Systems, Inc ++E8DC6C (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++48-B4-C3 (hex) Aruba, a Hewlett Packard Enterprise Company ++48B4C3 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++B0-3F-64 (hex) Apple, Inc. ++B03F64 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++68-A7-B4 (hex) Honor Device Co., Ltd. ++68A7B4 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++80-3C-20 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++803C20 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++A4-DD-58 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++A4DD58 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++E0-28-B1 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++E028B1 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ ++C0-8D-51 (hex) Amazon Technologies Inc. ++C08D51 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++44-B4-B2 (hex) Amazon Technologies Inc. ++44B4B2 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++6C-15-24 (hex) IEEE Registration Authority ++6C1524 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++78-03-4F (hex) Nokia ++78034F (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++00-12-93 (hex) ABB Switzerland Ltd. ++001293 (base 16) ABB Switzerland Ltd. ++ Via Luserte Sud 9 Quartino ++ Quartino 6572 ++ CH ++ ++C0-E9-11 (hex) Private ++C0E911 (base 16) Private ++ ++14-F5-92 (hex) Shenzhen SDG DONZHI Technology Co., Ltd ++14F592 (base 16) Shenzhen SDG DONZHI Technology Co., Ltd ++ 1001 SDG Information Technology Building, No.2 Qiongyu Road, Science park Community, Yuehai Street, Nanshan District, ++ Shenzhen GuangDong 518000 ++ CN ++ ++4C-09-FA (hex) FRONTIER SMART TECHNOLOGIES LTD ++4C09FA (base 16) FRONTIER SMART TECHNOLOGIES LTD ++ 17 Waterloo Place ++ London SW1Y 4AR ++ GB ++ ++24-2C-FE (hex) Zhejiang Tmall Technology Co., Ltd. ++242CFE (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 ++ CN ++ ++A0-42-D1 (hex) Huawei Device Co., Ltd. ++A042D1 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++2C-DC-78 (hex) Descartes Systems (USA) LLC ++2CDC78 (base 16) Descartes Systems (USA) LLC ++ 2030 Powers Ferry Road SE ++ Atlanta GA 303339 ++ US ++ ++58-87-9F (hex) Huawei Device Co., Ltd. ++58879F (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++E8-D8-7E (hex) Amazon Technologies Inc. ++E8D87E (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++9C-1F-CA (hex) Hangzhou AlmightyDigit Technology Co., Ltd ++9C1FCA (base 16) Hangzhou AlmightyDigit Technology Co., Ltd ++ Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District ++ Hangzhou Zhejiang 310000 ++ CN ++ ++84-70-D7 (hex) eero inc. ++8470D7 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++E0-6C-4E (hex) Shenzhen TINNO Mobile Technology Corp. ++E06C4E (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++58-1D-D8 (hex) Sagemcom Broadband SAS ++581DD8 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++80-6A-B0 (hex) Shenzhen TINNO Mobile Technology Corp. ++806AB0 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++F4-B3-B1 (hex) Silicon Laboratories ++F4B3B1 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ ++04-69-8F (hex) Juniper Networks ++04698F (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++14-9B-F3 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++149BF3 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++10-07-1D (hex) Fiberhome Telecommunication Technologies Co.,LTD ++10071D (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++10-B2-32 (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. ++10B232 (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. ++ No.218 Qianwangang Road ++ Qingdao Shangdong 266510 ++ CN ++ ++B8-50-D8 (hex) Beijing Xiaomi Mobile Software Co., Ltd ++B850D8 (base 16) Beijing Xiaomi Mobile Software Co., Ltd ++ The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District ++ Beijing Beijing 100085 ++ CN ++ ++C0-9F-51 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++C09F51 (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China ++ Suzhou 215021 ++ CN ++ ++80-02-F4 (hex) IEEE Registration Authority ++8002F4 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++5C-53-C3 (hex) Ubee Interactive Co., Limited ++5C53C3 (base 16) Ubee Interactive Co., Limited ++ Flat/RM 1202, 12/F, AT Tower, 180 Electric Road ++ North Point 00000 ++ HK ++ + 9C-FF-C2 (hex) AVI Systems GmbH + 9CFFC2 (base 16) AVI Systems GmbH + Dr. Franz Wilhelmstraße 2A +@@ -39044,12 +39629,6 @@ BC3E07 (base 16) Hitron Technologies. Inc + Gyeonggi-do KSXX0024 + KR + +-0C-EC-84 (hex) Shenzhen TINNO Mobile Technology Corp. +-0CEC84 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 9C-DB-07 (hex) Thum+Mahr GmbH + 9CDB07 (base 16) Thum+Mahr GmbH + Heinrich-Hertz-Strasse 1-3 +@@ -44579,12 +45158,6 @@ E47B3F (base 16) BEIJING CO-CLOUD TECHNOLOGY LTD. + Shanghai Shanghai 201114 + CN + +-00-18-48 (hex) Vecima Networks Inc. +-001848 (base 16) Vecima Networks Inc. +- 150 Cardinal Place +- Saskatoon SK S7L 6H7 +- CA +- + 00-16-FB (hex) SHENZHEN MTC CO LTD + 0016FB (base 16) SHENZHEN MTC CO LTD + 5/F BenYuan Bldg,6015 ShenNan Road +@@ -46655,12 +47228,6 @@ DCC0EB (base 16) ASSA ABLOY CÔTE PICARDE + Cupertino CA 95014 + US + +-A0-F8-95 (hex) Shenzhen TINNO Mobile Technology Corp. +-A0F895 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F.,H-3 Building,OCT Eastern lndustrial Park. +- Nanshan District, Shenzhen GUANGDONG 518053 +- CN +- + 00-78-CD (hex) Ignition Design Labs + 0078CD (base 16) Ignition Design Labs + 1550 Technology Drive +@@ -50480,12 +51047,6 @@ B8F828 (base 16) Changshu Gaoshida Optoelectronic Technology Co. Ltd. + Glockengießerweg 2 Bielefeld 33659 + DE + +-2C-55-3C (hex) Gainspeed, Inc. +-2C553C (base 16) Gainspeed, Inc. +- 295 Santa Ana Court +- Sunnyvale CA 94085 +- US +- + 24-80-00 (hex) Westcontrol AS + 248000 (base 16) Westcontrol AS + Breivikvg 7 +@@ -55382,12 +55943,6 @@ D4AAFF (base 16) MICRO WORLD + Shanghai 200127 + CN + +-00-25-CA (hex) LS Research, LLC +-0025CA (base 16) LS Research, LLC +- W66 N220 Commerce Court +- Cedarburg WI 53012 +- US +- + 00-25-B4 (hex) Cisco Systems, Inc + 0025B4 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -55532,12 +56087,6 @@ D4AAFF (base 16) MICRO WORLD + Menlo Park CA 94025-1431 + US + +-00-24-E4 (hex) Withings +-0024E4 (base 16) Withings +- 37bis rue du General Leclerc +- Issy les Moulineaux 92442 +- FR +- + 00-24-DE (hex) GLOBAL Technology Inc. + 0024DE (base 16) GLOBAL Technology Inc. + No.168,Shanshan Rd., Wangchun Industrial Park, +@@ -57893,12 +58442,6 @@ D4AAFF (base 16) MICRO WORLD + Vuokatti Kainuu 88610 + FI + +-00-1A-35 (hex) BARTEC GmbH +-001A35 (base 16) BARTEC GmbH +- Schulstraße 30 +- Gotteszell Bavaria 94239 +- DE +- + 00-1A-37 (hex) Lear Corporation + 001A37 (base 16) Lear Corporation + Industriestrasse 48 +@@ -59633,12 +60176,6 @@ D4AAFF (base 16) MICRO WORLD + Soenderborg DK 6400 + DK + +-00-13-B4 (hex) Appear TV +-0013B4 (base 16) Appear TV +- P.O. Box 8 Lilleaker +- Oslo NO-0216 +- NO +- + 00-13-AE (hex) Radiance Technologies, Inc. + 0013AE (base 16) Radiance Technologies, Inc. + 350 Wynn Dr. +@@ -68321,12 +68858,6 @@ F854B8 (base 16) Amazon Technologies Inc. + York YO30 4RY + GB + +-B4-39-39 (hex) Shenzhen TINNO Mobile Technology Corp. +-B43939 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + A0-AB-51 (hex) WEIFANG GOERTEK ELECTRONICS CO.,LTD + A0AB51 (base 16) WEIFANG GOERTEK ELECTRONICS CO.,LTD + Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China +@@ -71657,12 +72188,6 @@ E428A4 (base 16) Prama India Private Limited + Reno NV 89507 + US + +-00-0F-A0 (hex) CANON KOREA BUSINESS SOLUTIONS INC. +-000FA0 (base 16) CANON KOREA BUSINESS SOLUTIONS INC. +- Canon BS Tower, 607 Teheran-ro +- Seoul Gangnam-gu 06173 +- KR +- + 40-8C-1F (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + 408C1F (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, +@@ -72809,12 +73334,6 @@ ECA81F (base 16) Technicolor CH USA Inc. + Lawrenceville GA 30044 + US + +-90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD +-90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen. +- Shenzhen 518067 +- CN +- + C0-F8-27 (hex) Rapidmax Technology Corporation + C0F827 (base 16) Rapidmax Technology Corporation + 3F., No.531, Zhongzheng Rd. Xindian Dist. +@@ -74633,6 +75152,24 @@ D850A1 (base 16) Hunan Danuo Technology Co.,LTD + Ankara 06520 + TR + ++48-51-D0 (hex) Jiangsu Xinsheng Intelligent Technology Co., Ltd. ++4851D0 (base 16) Jiangsu Xinsheng Intelligent Technology Co., Ltd. ++ 18th Floor,Inno laser Building,18-69 Changwu Mid Road,Changzhou Science & Education Town,Wujin District,Changzhou,Jiangsu213000,China ++ Changzhou Jiangsu 213000 ++ CN ++ ++80-77-A4 (hex) TECNO MOBILE LIMITED ++8077A4 (base 16) TECNO MOBILE LIMITED ++ ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG ++ Hong Kong Hong Kong 999077 ++ HK ++ ++7C-6C-F0 (hex) Shenzhen TINNO Mobile Technology Corp. ++7C6CF0 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen ++ Shenzhen guangdong 518053 ++ CN ++ + 00-C3-0A (hex) Xiaomi Communications Co Ltd + 00C30A (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +@@ -74663,29 +75200,713 @@ B42875 (base 16) Futecho Solutions Private Limited + San Francisco CA 94107 + US + +-48-51-D0 (hex) Jiangsu Xinsheng Intelligent Technology Co., Ltd. +-4851D0 (base 16) Jiangsu Xinsheng Intelligent Technology Co., Ltd. +- 18th Floor,Inno laser Building,18-69 Changwu Mid Road,Changzhou Science & Education Town,Wujin District,Changzhou,Jiangsu213000,China +- Changzhou Jiangsu 213000 ++00-A0-A2 (hex) B810 S.R.L. ++00A0A2 (base 16) B810 S.R.L. ++ Via E. Lazzaretti 2/1 ++ Reggio Emilia (RE) 42122 ++ IT ++ ++38-68-BE (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++3868BE (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 + CN + +-80-77-A4 (hex) TECNO MOBILE LIMITED +-8077A4 (base 16) TECNO MOBILE LIMITED +- ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG +- Hong Kong Hong Kong 999077 ++DC-9A-7D (hex) HISENSE VISUAL TECHNOLOGY CO.,LTD ++DC9A7D (base 16) HISENSE VISUAL TECHNOLOGY CO.,LTD ++ Qianwangang Road 218 ++ Qingdao Shandong 266510 ++ CN ++ ++28-A5-3F (hex) vivo Mobile Communication Co., Ltd. ++28A53F (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++8C-49-B6 (hex) vivo Mobile Communication Co., Ltd. ++8C49B6 (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++84-F1-D0 (hex) EHOOME IOT PRIVATE LIMITED ++84F1D0 (base 16) EHOOME IOT PRIVATE LIMITED ++ A-13, SECTOR-83, ++ NOIDA UTTAR PRADESH 201301 ++ IN ++ ++20-8B-D1 (hex) NXP Semiconductor (Tianjin) LTD. ++208BD1 (base 16) NXP Semiconductor (Tianjin) LTD. ++ No.15 Xinghua Avenue, Xiqing Economic Development Area ++ Tianjin 300385 ++ CN ++ ++00-0F-A0 (hex) Canon Korea Inc. ++000FA0 (base 16) Canon Korea Inc. ++ 607, Teheran-ro, Gangnam-gu ++ Seoul Gangnam-gu 06173 ++ KR ++ ++30-BB-7D (hex) OnePlus Technology (Shenzhen) Co., Ltd ++30BB7D (base 16) OnePlus Technology (Shenzhen) Co., Ltd ++ 18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING, ++ Shenzhen Guangdong 518000 ++ CN ++ ++6C-67-EF (hex) HUAWEI TECHNOLOGIES CO.,LTD ++6C67EF (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++88-69-3D (hex) HUAWEI TECHNOLOGIES CO.,LTD ++88693D (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++00-99-1D (hex) HUAWEI TECHNOLOGIES CO.,LTD ++00991D (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++30-CB-36 (hex) Belden Singapore Pte. Ltd. ++30CB36 (base 16) Belden Singapore Pte. Ltd. ++ 151 Lorong Chuan #05-01 New Tech Park Singapore ++ Singapore 556741 ++ SG ++ ++B8-3F-D2 (hex) Mellanox Technologies, Inc. ++B83FD2 (base 16) Mellanox Technologies, Inc. ++ 350 Oakmead Parkway, Suite 100 ++ Sunnyvale CA 94085 ++ US ++ ++28-3E-0C (hex) Preferred Robotics, Inc. ++283E0C (base 16) Preferred Robotics, Inc. ++ Otemachi Bldg. 1-6-1 Otemachi ++ Chiyoda-ku Tokyo 100-0004 ++ JP ++ ++8C-17-59 (hex) Intel Corporate ++8C1759 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++04-BC-9F (hex) Calix Inc. ++04BC9F (base 16) Calix Inc. ++ 2777 Orchard Pkwy ++ San Jose CA 95131 ++ US ++ ++6C-A4-01 (hex) essensys plc ++6CA401 (base 16) essensys plc ++ Aldgate Tower, Leman Street ++ London E1 8FA ++ GB ++ ++34-92-C2 (hex) Square Route Co., Ltd. ++3492C2 (base 16) Square Route Co., Ltd. ++ Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku ++ Tokyo Tokyo 108-0075 ++ JP ++ ++34-BD-20 (hex) Hangzhou Hikrobot Technology Co., Ltd. ++34BD20 (base 16) Hangzhou Hikrobot Technology Co., Ltd. ++ Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang ++ Hangzhou 310052 ++ CN ++ ++64-C2-69 (hex) eero inc. ++64C269 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++B0-4A-6A (hex) Samsung Electronics Co.,Ltd ++B04A6A (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++A8-79-8D (hex) Samsung Electronics Co.,Ltd ++A8798D (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++5C-ED-F4 (hex) Samsung Electronics Co.,Ltd ++5CEDF4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++28-3D-C2 (hex) Samsung Electronics Co.,Ltd ++283DC2 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++BC-6E-6D (hex) EM Microelectronic ++BC6E6D (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ ++00-D4-9E (hex) Intel Corporate ++00D49E (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++CC-F3-05 (hex) SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD ++CCF305 (base 16) SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD ++ Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District ++ Shenzhen Guangdong 518126 ++ CN ++ ++AC-2A-A1 (hex) Cisco Systems, Inc ++AC2AA1 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++F8-E9-4F (hex) Cisco Systems, Inc ++F8E94F (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++30-89-4A (hex) Intel Corporate ++30894A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++E0-6C-C5 (hex) Huawei Device Co., Ltd. ++E06CC5 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++30-96-3B (hex) Huawei Device Co., Ltd. ++30963B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++8C-6B-DB (hex) Huawei Device Co., Ltd. ++8C6BDB (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++10-DA-49 (hex) Huawei Device Co., Ltd. ++10DA49 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++60-18-3A (hex) Huawei Device Co., Ltd. ++60183A (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++18-C0-07 (hex) Huawei Device Co., Ltd. ++18C007 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++98-59-7A (hex) Intel Corporate ++98597A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++64-49-7D (hex) Intel Corporate ++64497D (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++B8-D6-1A (hex) Espressif Inc. ++B8D61A (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++00-25-CA (hex) Laird Connectivity ++0025CA (base 16) Laird Connectivity ++ W66 N220 Commerce Court ++ Cedarburg WI 53012 ++ US ++ ++90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD ++90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++74-56-3C (hex) GIGA-BYTE TECHNOLOGY CO.,LTD. ++74563C (base 16) GIGA-BYTE TECHNOLOGY CO.,LTD. ++ Pin-Jen City, Taoyuan, Taiwan, R.O.C. ++ Pin-Jen Taoyuan 324 ++ TW ++ ++D8-9C-8E (hex) Comcast Cable Corporation ++D89C8E (base 16) Comcast Cable Corporation ++ 1800 Arch Street ++ Philadelphia PA 19103 ++ US ++ ++04-B9-7D (hex) AiVIS Co., Itd. ++04B97D (base 16) AiVIS Co., Itd. ++ 112, Dumipo-ro, Jung-gu ++ Incheon Incheon 22394 ++ KR ++ ++BC-F4-D4 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++BCF4D4 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++C4-C0-63 (hex) New H3C Technologies Co., Ltd ++C4C063 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++EC-55-1C (hex) HUAWEI TECHNOLOGIES CO.,LTD ++EC551C (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++E0-79-8D (hex) Silicon Laboratories ++E0798D (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ ++B4-83-51 (hex) Intel Corporate ++B48351 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++34-AD-61 (hex) CELESTICA INC. ++34AD61 (base 16) CELESTICA INC. ++ 1900-5140 Yonge Street PO Box 42 ++ Toronto Ontario M2N 6L7 ++ CA ++ ++54-43-B2 (hex) Espressif Inc. ++5443B2 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++C0-DD-8A (hex) Facebook Technologies, LLC ++C0DD8A (base 16) Facebook Technologies, LLC ++ 1601 Willow Rd ++ Menlo Park CA 94025 ++ US ++ ++AC-D3-1D (hex) Cisco Meraki ++ACD31D (base 16) Cisco Meraki ++ 500 Terry A. Francois Blvd ++ San Francisco 94158 ++ US ++ ++10-96-1A (hex) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. ++10961A (base 16) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. ++ 9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT ++ SHEN ZHEN GUANG DONG 518000 ++ CN ++ ++BC-E9-E2 (hex) Brocade Communications Systems LLC ++BCE9E2 (base 16) Brocade Communications Systems LLC ++ 1320 Ridder Park Dr ++ San Jose CA 95131 ++ US ++ ++00-18-48 (hex) Vecima Networks Inc. ++001848 (base 16) Vecima Networks Inc. ++ 150 Cardinal Place ++ Saskatoon SK S7L 6H7 ++ CA ++ ++2C-55-3C (hex) Vecima Networks Inc. ++2C553C (base 16) Vecima Networks Inc. ++ 150 Cardinal Place ++ Saskatoon SK S7L 6H7 ++ CA ++ ++AC-BF-71 (hex) Bose Corporation ++ACBF71 (base 16) Bose Corporation ++ The Mountain ++ Framingham MA 01701-9168 ++ US ++ ++18-A5-9C (hex) IEEE Registration Authority ++18A59C (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++74-84-69 (hex) Nintendo Co.,Ltd ++748469 (base 16) Nintendo Co.,Ltd ++ 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU ++ KYOTO KYOTO 601-8501 ++ JP ++ ++74-71-8B (hex) Apple, Inc. ++74718B (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++70-31-7F (hex) Apple, Inc. ++70317F (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++A4-CF-99 (hex) Apple, Inc. ++A4CF99 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++4C-2E-B4 (hex) Apple, Inc. ++4C2EB4 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++B4-19-74 (hex) Apple, Inc. ++B41974 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++04-E8-92 (hex) SHENNAN CIRCUITS CO.,LTD ++04E892 (base 16) SHENNAN CIRCUITS CO.,LTD ++ Gao Qiao Industrial Park East,Long Gang District, ++ Shenzhen Guangdong 518117 ++ CN ++ ++60-95-BD (hex) Apple, Inc. ++6095BD (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++00-1A-35 (hex) BARTEC GmbH ++001A35 (base 16) BARTEC GmbH ++ Max-Eyth-Straße 16 ++ Bad Mergentheim Bavaria 97980 ++ DE ++ ++8C-CB-DF (hex) FOXCONN INTERCONNECT TECHNOLOGY ++8CCBDF (base 16) FOXCONN INTERCONNECT TECHNOLOGY ++ 66-1 Zhongshan Road, Tucheng District ++ New Taipei City Taiwan 23680 ++ TW ++ ++98-F1-12 (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. ++98F112 (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. ++ No.555 Qianmo Road ++ Hangzhou Zhejiang 310052 ++ CN ++ ++84-69-93 (hex) HP Inc. ++846993 (base 16) HP Inc. ++ 10300 Energy Dr ++ Spring TX 77389 ++ US ++ ++74-6F-88 (hex) zte corporation ++746F88 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++98-C8-1C (hex) BAYTEC LIMITED ++98C81C (base 16) BAYTEC LIMITED ++ 107C, 31/f, The gateway, Tower 5, Harbour City, 15 canton road, Tsim Sha Tsui, Hong Kong ++ Harbour 999077 + HK + +-7C-6C-F0 (hex) Shenzhen TINNO Mobile Technology Corp. +-7C6CF0 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 ++D0-98-9C (hex) ConMet ++D0989C (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US ++ ++1C-A4-10 (hex) Amlogic, Inc. ++1CA410 (base 16) Amlogic, Inc. ++ 2518 Mission College Blvd, Suite 120 ++ Santa Clara CA 95054 ++ US ++ ++24-26-D6 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++2426D6 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-00-A0-A2 (hex) B810 S.R.L. +-00A0A2 (base 16) B810 S.R.L. +- Via E. Lazzaretti 2/1 +- Reggio Emilia (RE) 42122 +- IT ++70-A6-BD (hex) Honor Device Co., Ltd. ++70A6BD (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++EC-81-9C (hex) HUAWEI TECHNOLOGIES CO.,LTD ++EC819C (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++20-0B-16 (hex) Texas Instruments ++200B16 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++88-01-F9 (hex) Texas Instruments ++8801F9 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++F8-55-48 (hex) Texas Instruments ++F85548 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++68-E7-4A (hex) Texas Instruments ++68E74A (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++4C-9E-6C (hex) BROADEX TECHNOLOGIES CO.LTD ++4C9E6C (base 16) BROADEX TECHNOLOGIES CO.LTD ++ NO.306 YATAI ROAD ++ JIAXING ZHEJIANG 314006 ++ CN ++ ++AC-A3-2F (hex) Solidigm Technology ++ACA32F (base 16) Solidigm Technology ++ 1921 Corporate Center Circle, Suite 3B ++ Longmont 80501 ++ US ++ ++AC-71-2E (hex) Fortinet, Inc. ++AC712E (base 16) Fortinet, Inc. ++ 899 Kifer Road ++ Sunnyvale 94086 ++ US ++ ++E4-B6-33 (hex) Wuxi Stars Microsystem Technology Co., Ltd ++E4B633 (base 16) Wuxi Stars Microsystem Technology Co., Ltd ++ Room 2101, Tower C, Swan Tower, Wuxi Software Park, 111 Linghu Avenue, Xinwu District ++ Wuxi 214135 ++ CN ++ ++08-51-04 (hex) Huawei Device Co., Ltd. ++085104 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++78-5B-64 (hex) Huawei Device Co., Ltd. ++785B64 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++98-D9-3D (hex) Demant Enterprise A/S ++98D93D (base 16) Demant Enterprise A/S ++ Kongebakken 9 ++ Smorum 2765 ++ DK ++ ++B4-A6-78 (hex) Zhejiang Tmall Technology Co., Ltd. ++B4A678 (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 ++ CN ++ ++AC-C4-BD (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ACC4BD (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++54-E1-5B (hex) Huawei Device Co., Ltd. ++54E15B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++54-2F-04 (hex) Shanghai Longcheer Technology Co., Ltd. ++542F04 (base 16) Shanghai Longcheer Technology Co., Ltd. ++ Bldg 1,No.401,Caobao RD,Xuhui Dist ++ Shanghai 200233 ++ CN ++ ++C4-A1-0E (hex) IEEE Registration Authority ++C4A10E (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++0C-EC-84 (hex) Shenzhen TINNO Mobile Technology Corp. ++0CEC84 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++B4-39-39 (hex) Shenzhen TINNO Mobile Technology Corp. ++B43939 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++8C-98-06 (hex) SHENZHEN SEI ROBOTICS CO.,LTD ++8C9806 (base 16) SHENZHEN SEI ROBOTICS CO.,LTD ++ the 4th floor,Productivity Building D,#5 Hi-Tech Middle 2nd Road,Shenzhen Hi-Tech Industrial Park, Nanshan District,Shenzhen,China ++ Shenzhen 518000 ++ CN ++ ++20-08-89 (hex) zte corporation ++200889 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++70-70-FC (hex) GOLD&WATER INDUSTRIAL LIMITED ++7070FC (base 16) GOLD&WATER INDUSTRIAL LIMITED ++ NO.77 Leighton Road, 17/F Leighton Centre Causeway Bay ,HongKong ++ HongKong 999077 ++ HK ++ ++88-F2-BD (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. ++88F2BD (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. ++ Midea Global Innovation Center,Beijiao Town,Shunde ++ Foshan Guangdong 528311 ++ CN ++ ++A0-F8-95 (hex) Shenzhen TINNO Mobile Technology Corp. ++A0F895 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++6C-08-31 (hex) ANALOG SYSTEMS ++6C0831 (base 16) ANALOG SYSTEMS ++ UNIT 12, 38 DLF INDUSTRIAL AREA KIRTI NAGAR NEW DELHI ++ NEW DELHI DELHI 110015 ++ IN ++ ++70-AC-08 (hex) Silicon Laboratories ++70AC08 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ ++2C-07-F6 (hex) SKG Health Technologies Co., Ltd. ++2C07F6 (base 16) SKG Health Technologies Co., Ltd. ++ 23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China ++ Shenzhen 518000 ++ CN ++ ++00-24-E4 (hex) Withings ++0024E4 (base 16) Withings ++ 2 rue Maurice Hartmann ++ Issy-les-Moulineaux 92130 ++ FR ++ ++A4-7E-FA (hex) Withings ++A47EFA (base 16) Withings ++ 2 rue Maurice Hartmann ++ Issy-les-Moulineaux 92130 ++ FR ++ ++3C-26-E4 (hex) Cisco Systems, Inc ++3C26E4 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++38-91-B7 (hex) Cisco Systems, Inc ++3891B7 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++34-5D-A8 (hex) Cisco Systems, Inc ++345DA8 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++78-91-DE (hex) Guangdong ACIGA Science&Technology Co.,Ltd ++7891DE (base 16) Guangdong ACIGA Science&Technology Co.,Ltd ++ L203 Biguiyuan International Club, Beijiao Town, Shunde District ++ Fo Shan Guangdong 528312 ++ CN ++ ++E0-80-6B (hex) Xiaomi Communications Co Ltd ++E0806B (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++70-50-E7 (hex) IEEE Registration Authority ++7050E7 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++00-13-B4 (hex) Appear AS ++0013B4 (base 16) Appear AS ++ P.O. Box 8 Lilleaker ++ Oslo NO-0216 ++ NO ++ ++38-FD-F5 (hex) Renesas Electronics (Penang) Sdn. Bhd. ++38FDF5 (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY ++ ++38-12-7B (hex) Crenet Labs Co., Ltd. ++38127B (base 16) Crenet Labs Co., Ltd. ++ Rm. 1, 10F., No. 181, Sec. 1, Datong Rd. ++ New Taipei City Xizhi Dist. 221451 ++ TW ++ ++B0-E4-5C (hex) Samsung Electronics Co.,Ltd ++B0E45C (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++DC-36-0C (hex) Hitron Technologies. Inc ++DC360C (base 16) Hitron Technologies. Inc ++ No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C ++ Hsin-chu Taiwan 300 ++ TW + + 84-80-94 (hex) Meter, Inc. + 848094 (base 16) Meter, Inc. +@@ -78839,12 +80060,6 @@ D843ED (base 16) Suzuken + Nagoya Aich 4610015 + JP + +-BC-41-01 (hex) Shenzhen TINNO Mobile Technology Corp. +-BC4101 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 04-3A-0D (hex) SM Optics S.r.l. + 043A0D (base 16) SM Optics S.r.l. + via Michelangelo Buonarroti, 1 +@@ -79847,12 +81062,6 @@ DCA904 (base 16) Apple, Inc. + Hong Kong Hong Kong 999077 + HK + +-A0-4C-5B (hex) Shenzhen TINNO Mobile Technology Corp. +-A04C5B (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 48-88-03 (hex) ManTechnology Inc. + 488803 (base 16) ManTechnology Inc. + 12th Fl, 308-4 Seongsoodong 2ga, Seongdonggu +@@ -80579,12 +81788,6 @@ E80945 (base 16) Integrated Device Technology (Malaysia) Sdn. Bhd. + Bayan Lepas Penang 11900 + MY + +-B0-A2-E7 (hex) Shenzhen TINNO Mobile Technology Corp. +-B0A2E7 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 7C-25-87 (hex) chaowifi.com + 7C2587 (base 16) chaowifi.com + No. 502 1th Building TaiHe Square +@@ -86237,12 +87440,6 @@ E83A12 (base 16) Samsung Electronics Co.,Ltd + Chicago IL 60654 + US + +-30-E0-90 (hex) Linctronix Ltd, +-30E090 (base 16) Linctronix Ltd, +- ​9F-1, No.66, Chongqing Rd., +- Banqiao Dist., China 22063 +- TW +- + A4-DC-BE (hex) HUAWEI TECHNOLOGIES CO.,LTD + A4DCBE (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -91655,12 +92852,6 @@ E08A7E (base 16) Exponent + Menlo Park CA 94025 + US + +-A8-B0-AE (hex) LEONI +-A8B0AE (base 16) LEONI +- 3945 Freedom Circle +- Santa Clara California 95054 +- US +- + E4-27-71 (hex) Smartlabs + E42771 (base 16) Smartlabs + 72, Oktyabrskaya Street +@@ -91739,12 +92930,6 @@ B4A4E3 (base 16) Cisco Systems, Inc + Tainan 70955 + TW + +-AC-83-F0 (hex) ImmediaTV Corporation +-AC83F0 (base 16) ImmediaTV Corporation +- 2005 De La Cruz Blvd +- Santa Clara California 95050 +- US +- + CC-6B-98 (hex) Minetec Wireless Technologies + CC6B98 (base 16) Minetec Wireless Technologies + 10 Kembla Way +@@ -97226,12 +98411,6 @@ D8D67E (base 16) GSK CNC EQUIPMENT CO.,LTD + Portland OR 97223 + US + +-00-13-95 (hex) congatec AG +-001395 (base 16) congatec AG +- Auwiesenstrasse 5 +- Deggendorf 94469 +- DE +- + 00-13-56 (hex) FLIR Radiation Inc + 001356 (base 16) FLIR Radiation Inc + 100 Midland Rd +@@ -98519,12 +99698,6 @@ D8D67E (base 16) GSK CNC EQUIPMENT CO.,LTD + Allendale NJ 07401 + US + +-00-0D-A9 (hex) T.E.A.M. S.L. +-000DA9 (base 16) T.E.A.M. S.L. +- Parque Tecnologico Edificio 108 +- ZAMUDIO Bizkaia 48170 +- ES +- + 00-0D-AB (hex) Parker Hannifin GmbH Electromechanical Division Europe + 000DAB (base 16) Parker Hannifin GmbH Electromechanical Division Europe + Robert-Bosch-Straße 22 +@@ -107270,12 +108443,6 @@ B848AA (base 16) EM Microelectronic + Marin-Epagnier Neuchatel 2074 + CH + +-D8-34-EE (hex) Stem Audio +-D834EE (base 16) Stem Audio +- 2552 White Road, Suite A +- Irvine CA 92614 +- US +- + F8-57-2E (hex) Core Brands, LLC + F8572E (base 16) Core Brands, LLC + 5919 Sea Otter Place +@@ -107798,12 +108965,6 @@ CCDB93 (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp. +-18D61C (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 54-48-E6 (hex) Beijing Xiaomi Mobile Software Co., Ltd + 5448E6 (base 16) Beijing Xiaomi Mobile Software Co., Ltd + Xiaomi Campus, No. 33 Xi erqi Middle Road, Haidian District +@@ -109565,12 +110726,6 @@ F845C4 (base 16) Shenzhen Netforward Micro-Electronic Co., Ltd. + Beijing 100053 + CN + +-9C-4F-5F (hex) TAP Sound System +-9C4F5F (base 16) TAP Sound System +- 15 rue Castel +- Fontenay-sous-Bois 94120 +- FR +- + 00-08-0C (hex) VDA Group S.p.a. + 00080C (base 16) VDA Group S.p.a. + Viale Lino Zanussi 3 +@@ -112079,6 +113234,30 @@ B4B742 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + ++60-BE-B4 (hex) S-Bluetech co., limited ++60BEB4 (base 16) S-Bluetech co., limited ++ Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu ++ Shenzhen Guangdong 518000 ++ CN ++ ++90-DF-7D (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++90DF7D (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++50-C1-F0 (hex) NXP Semiconductor (Tianjin) LTD. ++50C1F0 (base 16) NXP Semiconductor (Tianjin) LTD. ++ No.15 Xinghua Avenue, Xiqing Economic Development Area ++ Tianjin 300385 ++ CN ++ ++F4-84-8D (hex) TP-LINK TECHNOLOGIES CO.,LTD. ++F4848D (base 16) TP-LINK TECHNOLOGIES CO.,LTD. ++ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan ++ Shenzhen Guangdong 518057 ++ CN ++ + A8-54-A2 (hex) Heimgard Technologies AS + A854A2 (base 16) Heimgard Technologies AS + Dronning Mauds gate 15 +@@ -112097,6 +113276,570 @@ BC1D89 (base 16) Motorola Mobility LLC, a Lenovo Company + Chicago IL 60654 + US + ++B8-7E-E5 (hex) Intelbras ++B87EE5 (base 16) Intelbras ++ BR 101, km 210, S/N° ++ São José Santa Catarina 88104800 ++ BR ++ ++58-11-22 (hex) ASUSTek COMPUTER INC. ++581122 (base 16) ASUSTek COMPUTER INC. ++ 15,Li-Te Rd., Peitou, Taipei 112, Taiwan ++ Taipei Taiwan 112 ++ TW ++ ++74-69-4A (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++74694A (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++78-15-2D (hex) UNION CHIP TECHNOLOGY LIMITED ++78152D (base 16) UNION CHIP TECHNOLOGY LIMITED ++ 5th Floor, Building A1, Hangcheng Jinchi Industrial Park, 8TH North Road, Hangcheng Street, Bao 'an District, Shenzhen ++ shenzhen 518000 ++ CN ++ ++94-AB-FE (hex) Nokia ++94ABFE (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++98-A9-2D (hex) New H3C Technologies Co., Ltd ++98A92D (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++00-A5-54 (hex) Intel Corporate ++00A554 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++0C-86-29 (hex) IEEE Registration Authority ++0C8629 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++50-DC-D0 (hex) Observint Technologies, Inc. ++50DCD0 (base 16) Observint Technologies, Inc. ++ 11000 N Mopac Expressway Suite 300 ++ Austin TX 78759 ++ US ++ ++D4-F0-EA (hex) Beijing Xiaomi Mobile Software Co., Ltd ++D4F0EA (base 16) Beijing Xiaomi Mobile Software Co., Ltd ++ The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District ++ Beijing Beijing 100085 ++ CN ++ ++58-76-AC (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++5876AC (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China ++ Suzhou 215021 ++ CN ++ ++E0-03-6B (hex) Samsung Electronics Co.,Ltd ++E0036B (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++80-69-1A (hex) Belkin International Inc. ++80691A (base 16) Belkin International Inc. ++ 12045 East Waterfront Drive ++ Playa Vista 90094 ++ US ++ ++64-31-72 (hex) ZHEJIANG HISING TECHNOLOGY CO.,LTD ++643172 (base 16) ZHEJIANG HISING TECHNOLOGY CO.,LTD ++ Room 201 and 202,Building 5,328 Pingjiang Road,Yuecheng District,Shaoxing ++ Shaoxing Zhejiang 312000 ++ CN ++ ++D0-FC-D0 (hex) HUMAX Co., Ltd. ++D0FCD0 (base 16) HUMAX Co., Ltd. ++ HUMAX Village, 216, Hwangsaeul-ro, Bu ++ Seongnam-si Gyeonggi-do 463-875 ++ KR ++ ++20-FA-DB (hex) Huahao Kunpeng Technology (chengDu) Co.,Ltd. ++20FADB (base 16) Huahao Kunpeng Technology (chengDu) Co.,Ltd. ++ No.99, Hangtian Road, Section 2, East Third Ring Road,Chenghua District, Chengdu ++ Chengdu 610051 ++ CN ++ ++0C-8B-95 (hex) Espressif Inc. ++0C8B95 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++68-5E-1C (hex) Texas Instruments ++685E1C (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++38-AB-41 (hex) Texas Instruments ++38AB41 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++CC-47-92 (hex) ASIX Electronics Corporation ++CC4792 (base 16) ASIX Electronics Corporation ++ 4F, No. 8, Hsin Ann Road, Hsinchu Science Park ++ Hsinchu 30078 ++ TW ++ ++E0-46-EE (hex) NETGEAR ++E046EE (base 16) NETGEAR ++ 350 East Plumeria Drive ++ San Jose CA 95134 ++ US ++ ++9C-4F-5F (hex) Google, Inc. ++9C4F5F (base 16) Google, Inc. ++ 15 rue Castel ++ Fontenay-sous-Bois 94120 ++ FR ++ ++A0-29-42 (hex) Intel Corporate ++A02942 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++10-71-B3 (hex) Zyxel Communications Corporation ++1071B3 (base 16) Zyxel Communications Corporation ++ No. 6 Innovation Road II, Science Park ++ Hsichu Taiwan 300 ++ TW ++ ++04-63-D0 (hex) Huawei Device Co., Ltd. ++0463D0 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++F0-D4-15 (hex) Intel Corporate ++F0D415 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++18-69-D4 (hex) Samsung Electronics Co.,Ltd ++1869D4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++9C-95-61 (hex) Hui Zhou Gaoshengda Technology Co.,LTD ++9C9561 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD ++ No.75,Zhongkai High-Tech Development District,Huizhou ++ Hui Zhou Guangdong 516006 ++ CN ++ ++DC-BE-49 (hex) ITEL MOBILE LIMITED ++DCBE49 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK ++ ++14-44-8F (hex) Edgecore Networks Corporation ++14448F (base 16) Edgecore Networks Corporation ++ 1 Creation RD 3. ++ Hsinchu 30077 ++ TW ++ ++34-25-BE (hex) Amazon Technologies Inc. ++3425BE (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++D4-A3-EB (hex) Shenzhen iComm Semiconductor CO.,LTD ++D4A3EB (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++9C-BF-CD (hex) HUAWEI TECHNOLOGIES CO.,LTD ++9CBFCD (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++B8-9F-CC (hex) HUAWEI TECHNOLOGIES CO.,LTD ++B89FCC (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++9C-E0-41 (hex) Nokia ++9CE041 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++78-34-86 (hex) Nokia ++783486 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++D4-D8-53 (hex) Intel Corporate ++D4D853 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++8C-76-3F (hex) ARRIS Group, Inc. ++8C763F (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++28-12-93 (hex) Honor Device Co., Ltd. ++281293 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++C0-A9-38 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C0A938 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++C0-ED-E5 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++C0EDE5 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++10-A5-62 (hex) Iton Technology Corp. ++10A562 (base 16) Iton Technology Corp. ++ Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District ++ Shenzhen Guangdong 518116 ++ CN ++ ++5C-24-E2 (hex) Suzhou Denbom Electronic S&T Co., Ltd ++5C24E2 (base 16) Suzhou Denbom Electronic S&T Co., Ltd ++ 3F,Building 2, No.415,Changyang Street ++ Suzhou Jiangsu 215000 ++ CN ++ ++64-98-9E (hex) TRINNOV AUDIO ++64989E (base 16) TRINNOV AUDIO ++ 5 rue Edmond Michelet ++ NEUILLY PLAISANCE Ile-de-France 93360 ++ FR ++ ++BC-C7-46 (hex) Hon Hai Precision IND.CO.,LTD ++BCC746 (base 16) Hon Hai Precision IND.CO.,LTD ++ No. 66 Chung Shan Road TU-Cheng Industrial district TAIPEI TAIWAN ++ TAIPEI TAIWAN 33859 ++ CN ++ ++30-E8-E4 (hex) Qorvo International Pte. Ltd. ++30E8E4 (base 16) Qorvo International Pte. Ltd. ++ 1 Changi Business Park Avenue 1 ++ #04-01 486058 ++ SG ++ ++00-0D-A9 (hex) INGETEAM ++000DA9 (base 16) INGETEAM ++ Parque Tecnologico de Bizkaia, Edificio 110 ++ Zamudio Bizkaia 48170 ++ ES ++ ++30-E0-90 (hex) Genevisio Ltd. ++30E090 (base 16) Genevisio Ltd. ++ 13F, No.33, Sec. 1, Minsheng Rd. ++ New Taipei City Banqiao Dist. 220871 ++ TW ++ ++64-FD-96 (hex) Sagemcom Broadband SAS ++64FD96 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++FC-B9-7E (hex) GE Appliances ++FCB97E (base 16) GE Appliances ++ 4000 Buechel Bank Road ++ Louisville KY 40225 ++ US ++ ++88-03-4C (hex) WEIFANG GOERTEK ELECTRONICS CO.,LTD ++88034C (base 16) WEIFANG GOERTEK ELECTRONICS CO.,LTD ++ Gaoxin 2 Road, Free Trade Zone,Weifang,Shandong,261205,P.R.China ++ Weifang Shandong 261205 ++ CN ++ ++48-DC-9D (hex) Grandprint(Beijing) Technology Co., LTD. ++48DC9D (base 16) Grandprint(Beijing) Technology Co., LTD. ++ Room 259, 2 / F, Building 5, 8 Dongbeiwang West Road, Haidian District, ++ Beijing 100089 ++ CN ++ ++C8-EB-EC (hex) Shenzhen YOUHUA Technology Co., Ltd ++C8EBEC (base 16) Shenzhen YOUHUA Technology Co., Ltd ++ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District ++ Shenzhen Guangdong 518055 ++ CN ++ ++04-7C-16 (hex) Micro-Star INTL CO., LTD. ++047C16 (base 16) Micro-Star INTL CO., LTD. ++ No.69, Lide St., ++ New Taipei City Taiwan 235 ++ TW ++ ++E0-D7-38 (hex) WireStar Networks ++E0D738 (base 16) WireStar Networks ++ PO Box 10966 ++ College Station TX 77842 ++ US ++ ++40-42-44 (hex) Cisco Systems, Inc ++404244 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++04-B6-BE (hex) CIG SHANGHAI CO LTD ++04B6BE (base 16) CIG SHANGHAI CO LTD ++ 5th Floor, Building 8 No 2388 Chenhang Road ++ SHANGHAI 201114 ++ CN ++ ++7C-EC-B1 (hex) Apple, Inc. ++7CECB1 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++5C-E9-1E (hex) Apple, Inc. ++5CE91E (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++A8-B0-AE (hex) BizLink Special Cables Germany GmbH ++A8B0AE (base 16) BizLink Special Cables Germany GmbH ++ Eschstrasse 1 ++ Friesoythe 26169 ++ DE ++ ++94-C5-A6 (hex) ITEL MOBILE LIMITED ++94C5A6 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK ++ ++48-57-D2 (hex) Broadcom Limited ++4857D2 (base 16) Broadcom Limited ++ 15191 Alton Parkway ++ Irvine CA 92618 ++ US ++ ++9C-21-83 (hex) Broadcom Limited ++9C2183 (base 16) Broadcom Limited ++ 15191 Alton Parkway ++ Irvine CA 92618 ++ US ++ ++24-1F-BD (hex) Extreme Networks, Inc. ++241FBD (base 16) Extreme Networks, Inc. ++ 6480 Via Del Oro ++ San Jose CA 95119 ++ US ++ ++D8-34-EE (hex) SHURE INCORPORATED ++D834EE (base 16) SHURE INCORPORATED ++ 5800 W. TOUHY AVE. ++ NILES IL 60714 ++ US ++ ++F0-B6-61 (hex) eero inc. ++F0B661 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++04-25-F0 (hex) Nokia ++0425F0 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++1C-BC-EC (hex) silex technology, Inc. ++1CBCEC (base 16) silex technology, Inc. ++ 2-3-1 Hikaridai, Seika-cho, Souraku-gun ++ Kyoto 619-0237 ++ JP ++ ++E0-6A-05 (hex) Shenzhen YOUHUA Technology Co., Ltd ++E06A05 (base 16) Shenzhen YOUHUA Technology Co., Ltd ++ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District ++ Shenzhen Guangdong 518055 ++ CN ++ ++90-CD-1F (hex) Quectel Wireless Solutions Co.,Ltd. ++90CD1F (base 16) Quectel Wireless Solutions Co.,Ltd. ++ 7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District ++ Shanghai 200233 ++ CN ++ ++90-23-5B (hex) Amazon Technologies Inc. ++90235B (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++14-13-0B (hex) Garmin International ++14130B (base 16) Garmin International ++ 1200 E. 151st St ++ Olathe KS 66062 ++ US ++ ++48-9B-E0 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++489BE0 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++5C-FA-25 (hex) Sagemcom Broadband SAS ++5CFA25 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++40-3B-7B (hex) Huawei Device Co., Ltd. ++403B7B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++08-30-CE (hex) Fiberhome Telecommunication Technologies Co.,LTD ++0830CE (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++B0-A2-E7 (hex) Shenzhen TINNO Mobile Technology Corp. ++B0A2E7 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++A0-4C-5B (hex) Shenzhen TINNO Mobile Technology Corp. ++A04C5B (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++BC-41-01 (hex) Shenzhen TINNO Mobile Technology Corp. ++BC4101 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++74-97-79 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++749779 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++F8-CD-C8 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++F8CDC8 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++B0-28-5B (hex) JUHUA Technology Inc. ++B0285B (base 16) JUHUA Technology Inc. ++ No.8,Yanbao Block,Hutian Road,Pingdi Street,Longgang District ++ Shenzhen City Guangdong Province 518117 ++ CN ++ ++18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp. ++18D61C (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++34-CF-6C (hex) Hangzhou Taili wireless communication equipment Co.,Ltd ++34CF6C (base 16) Hangzhou Taili wireless communication equipment Co.,Ltd ++ Room 1901, No.258, Zhonghe Middle Road, Shangcheng District, Hangzhou ++ Hangzhou Zhejiang 310003 ++ CN ++ ++E0-F6-78 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++E0F678 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++28-F7-D6 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++28F7D6 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++C8-24-96 (hex) Jiangsu Yinhe Electronics Co.,Ltd. ++C82496 (base 16) Jiangsu Yinhe Electronics Co.,Ltd. ++ No.188 Nanhuan Road, TangQiao Town ++ Zhangjiagang Jiangsu 215611 ++ CN ++ ++24-18-C0 (hex) E. Wehrle GmbH ++2418C0 (base 16) E. Wehrle GmbH ++ Obertalstraße 8 ++ 78120 Furtwangen Baden-Württemberg 78120 ++ DE ++ ++14-5B-B9 (hex) ConMet ++145BB9 (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US ++ ++AC-83-F0 (hex) Cobalt Digital Inc. ++AC83F0 (base 16) Cobalt Digital Inc. ++ 2506 Galen Drive ++ Champaign IL 61821 ++ US ++ ++40-22-30 (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++402230 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++B8-B4-09 (hex) Samsung Electronics Co.,Ltd ++B8B409 (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++00-13-95 (hex) congatec GmbH ++001395 (base 16) congatec GmbH ++ Auwiesenstrasse 5 ++ Deggendorf 94469 ++ DE ++ ++D4-E2-2F (hex) Roku, Inc ++D4E22F (base 16) Roku, Inc ++ 1155 Coleman Ave ++ San Jose CA 95110 ++ US ++ + F8-D0-27 (hex) Seiko Epson Corporation + F8D027 (base 16) Seiko Epson Corporation + 2070 Kotobuki Koaka +@@ -114863,12 +116606,6 @@ C08135 (base 16) Ningbo Forfan technology Co., LTD + LIBERTYVILLE IL 60048 + US + +-B4-C0-F5 (hex) Shenzhen TINNO Mobile Technology Corp. +-B4C0F5 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 40-62-31 (hex) GIFA + 406231 (base 16) GIFA + 11th Fl., Suojia Business Building , No.7 Hangkong Road , Baoan District +@@ -118919,12 +120656,6 @@ D8E0B8 (base 16) BULAT LLC + Hsichu Taiwan 300 + TW + +-C0-C9-76 (hex) Shenzhen TINNO Mobile Technology Corp. +-C0C976 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 58-8B-F3 (hex) Zyxel Communications Corporation + 588BF3 (base 16) Zyxel Communications Corporation + No. 6 Innovation Road II, Science Park +@@ -121199,12 +122930,6 @@ A8CA7B (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-BC-44-34 (hex) Shenzhen TINNO Mobile Technology Corp. +-BC4434 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 04-BF-6D (hex) Zyxel Communications Corporation + 04BF6D (base 16) Zyxel Communications Corporation + No. 6 Innovation Road II, Science Park +@@ -123221,12 +124946,6 @@ E855B4 (base 16) SAI Technology Inc. + Vikmanshyttan Dalarna SE-776 70 + SE + +-C0-EE-40 (hex) Laird Technologies +-C0EE40 (base 16) Laird Technologies +- 50 South Main St +- Akron Ohio 44308 +- US +- + F4-B8-A7 (hex) zte corporation + F4B8A7 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +@@ -124712,12 +126431,6 @@ C098E5 (base 16) University of Michigan + Seoul 152-789 + KR + +-44-3C-9C (hex) Pintsch Tiefenbach GmbH +-443C9C (base 16) Pintsch Tiefenbach GmbH +- Beisenbruchstrasse 10 +- Sprockhoevel 45549 +- DE +- + 28-FC-51 (hex) The Electric Controller and Manufacturing Co., LLC + 28FC51 (base 16) The Electric Controller and Manufacturing Co., LLC + PO Box 468 +@@ -135533,12 +137246,6 @@ A07332 (base 16) Cashmaster International Limited + Hubbard OR 97032 + US + +-00-0E-DD (hex) SHURE INCORPORATED +-000EDD (base 16) SHURE INCORPORATED +- 5800 W. TOUHY AVE. +- NILES IL 60714 +- US +- + 00-0E-C2 (hex) Lowrance Electronics, Inc. + 000EC2 (base 16) Lowrance Electronics, Inc. + 12000 E. Skelly Drive +@@ -138539,12 +140246,6 @@ A06A00 (base 16) Verilink Corporation + Elmsford NY 10523 + US + +-00-04-35 (hex) InfiNet LLC +-000435 (base 16) InfiNet LLC +- Serafimy Deryabinoy str. 24 +- Yekaterinburg 620149 +- RU +- + 00-04-37 (hex) Powin Information Technology, Inc. + 000437 (base 16) Powin Information Technology, Inc. + 8F, No. 70, Zhou-Z St. +@@ -140483,12 +142184,6 @@ A06A00 (base 16) Verilink Corporation + Yokohama City 226 + JP + +-00-10-43 (hex) A2 CORPORATION +-001043 (base 16) A2 CORPORATION +- 6-14-11 YUTAKA-CHO +- TOKYO +- JP +- + 00-10-A5 (hex) OXFORD INSTRUMENTS + 0010A5 (base 16) OXFORD INSTRUMENTS + Halifax Road +@@ -145481,18 +147176,6 @@ C440F6 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + DONG GUAN GUANG DONG 523860 + CN + +-A4-7D-9F (hex) Shenzhen iComm Semiconductor CO.,LTD +-A47D9F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen. +- Shenzhen 518067 +- CN +- +-84-EA-97 (hex) Shenzhen iComm Semiconductor CO.,LTD +-84EA97 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 501A,Block B,Digital Building,Garden City,No.1079 Nanhai Road,Nanshan District +- Shenzhen 518067 +- CN +- + 00-55-B1 (hex) Shanghai Baud Data Communication Co.,Ltd. + 0055B1 (base 16) Shanghai Baud Data Communication Co.,Ltd. + NO.123 JULI RD +@@ -145613,12 +147296,6 @@ C094AD (base 16) zte corporation + shenzhen guangdong 518057 + CN + +-D0-21-AC (hex) Yo Labs LLC +-D021AC (base 16) Yo Labs LLC +- 3460 Hillview Ave. +- Palo Alto CA 94304 +- US +- + 34-2B-70 (hex) Arris + 342B70 (base 16) Arris + 2500 Walsh Ave. +@@ -146039,12 +147716,6 @@ A8F766 (base 16) ITE Tech Inc + Hsinchu Taiwan 30076 + TW + +-14-B2-E5 (hex) Shenzhen iComm Semiconductor CO.,LTD +-14B2E5 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen. +- Shenzhen 518067 +- CN +- + 00-21-3E (hex) TomTom International BV + 00213E (base 16) TomTom International BV + Oosterdoksstraat 114 +@@ -147884,12 +149555,6 @@ FC5C45 (base 16) Ruckus Wireless + Sunnyvale CA 94089 + US + +-E0-CB-56 (hex) Shenzhen iComm Semiconductor CO.,LTD +-E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen. +- Shenzhen 518067 +- CN +- + 4C-02-20 (hex) Xiaomi Communications Co Ltd + 4C0220 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +@@ -148139,12 +149804,6 @@ E0B72E (base 16) ShenZhen Qualmesh Technology Co.,Ltd. + Shenzhen Guangdong 518055 + CN + +-80-C3-BA (hex) Sennheiser electronic GmbH & Co. KG +-80C3BA (base 16) Sennheiser electronic GmbH & Co. KG +- Am Labor 1 +- Wedemark Niedersachsen 30900 +- DE +- + 04-42-1A (hex) ASUSTek COMPUTER INC. + 04421A (base 16) ASUSTek COMPUTER INC. + 15,Li-Te Rd., Peitou, Taipei 112, Taiwan +@@ -149240,12 +150899,6 @@ F0A951 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-00-90-3F (hex) WorldCast Systems +-00903F (base 16) WorldCast Systems +- 20 Avenue Neil Armstrong +- Mérignac 33700 +- FR +- + 64-D6-9A (hex) Intel Corporate + 64D69A (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -149522,6 +151175,30 @@ D83DCC (base 16) shenzhen UDD Technologies,co.,Ltd + Round Rock TX 78682 + US + ++B4-E2-65 (hex) Shenzhen SDMC Technology Co.,LTD ++B4E265 (base 16) Shenzhen SDMC Technology Co.,LTD ++ 19/F, Changhong Science & Technology Mansion, No.18, Keji South 12th Road, High-tech Industrial Park, Nanshan District ++ Shenzhen GUANGDONG 518027 ++ CN ++ ++EC-7C-5C (hex) Juniper Networks ++EC7C5C (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++00-EB-D8 (hex) MERCUSYS TECHNOLOGIES CO., LTD. ++00EBD8 (base 16) MERCUSYS TECHNOLOGIES CO., LTD. ++ 3F,Zone B,Building R1,High-Tech Industrial Village,No.023 High-Tech South 4 Road,Nanshan,Shenzhen ++ Shenzhen Guangdong 518057 ++ CN ++ ++CC-60-C8 (hex) Microsoft Corporation ++CC60C8 (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ + 6C-8D-77 (hex) Cisco Systems, Inc + 6C8D77 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -149534,11 +151211,11 @@ D83DCC (base 16) shenzhen UDD Technologies,co.,Ltd + San Jose CA 94568 + US + +-B4-E2-65 (hex) Shenzhen SDMC Technology Co.,LTD +-B4E265 (base 16) Shenzhen SDMC Technology Co.,LTD +- 19/F, Changhong Science & Technology Mansion, No.18, Keji South 12th Road, High-tech Industrial Park, Nanshan District +- Shenzhen GUANGDONG 518027 +- CN ++B4-17-A8 (hex) Facebook Technologies, LLC ++B417A8 (base 16) Facebook Technologies, LLC ++ 1 Hacker Way ++ Menlo Park CA 94025 ++ US + + 10-54-D2 (hex) IEEE Registration Authority + 1054D2 (base 16) IEEE Registration Authority +@@ -149546,18 +151223,738 @@ B4E265 (base 16) Shenzhen SDMC Technology Co.,LTD + Piscataway NJ 08554 + US + +-EC-7C-5C (hex) Juniper Networks +-EC7C5C (base 16) Juniper Networks +- 1133 Innovation Way ++00-10-43 (hex) A2 CORPORATION ++001043 (base 16) A2 CORPORATION ++ 1-7-1 Togoshi ++ Tokyo Shinagawa-ku 1420041 ++ JP ++ ++C4-DF-39 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++C4DF39 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++10-63-4B (hex) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++10634B (base 16) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++ 3/F, Building R1-B, High-Tech Industrial Park, Nanshan District ++ Shenzhen Guangdong 518057 ++ CN ++ ++80-97-33 (hex) Shenzhen Elebao Technology Co., Ltd ++809733 (base 16) Shenzhen Elebao Technology Co., Ltd ++ F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District ++ shenzhen GUANGDONG 518126 ++ CN ++ ++F4-6D-2F (hex) TP-LINK TECHNOLOGIES CO.,LTD. ++F46D2F (base 16) TP-LINK TECHNOLOGIES CO.,LTD. ++ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan ++ Shenzhen Guangdong 518057 ++ CN ++ ++00-A2-65 (hex) M2Motive Technology Inc. ++00A265 (base 16) M2Motive Technology Inc. ++ Room 402,No. 125 North Jiangsu Road, Changning District ++ Shanghai Shanghai 200042 ++ CN ++ ++D8-36-5F (hex) Intelbras ++D8365F (base 16) Intelbras ++ BR 101, km 210, S/N° ++ São José Santa Catarina 88104800 ++ BR ++ ++74-04-F1 (hex) Intel Corporate ++7404F1 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++00-04-35 (hex) InfiNet LLC ++000435 (base 16) InfiNet LLC ++ Office 425, 69/75 Vavilova str. ++ Moscow\ 117335 ++ RU ++ ++E8-4D-EC (hex) Xerox Corporation ++E84DEC (base 16) Xerox Corporation ++ 800 Phillips Rd ++ Webster NY 14450 ++ US ++ ++C8-B8-2F (hex) eero inc. ++C8B82F (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++54-78-C9 (hex) AMPAK Technology,Inc. ++5478C9 (base 16) AMPAK Technology,Inc. ++ 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, ++ Hsinchu Hsinchu,Taiwan R.O.C. 30352 ++ TW ++ ++FC-10-1A (hex) Palo Alto Networks ++FC101A (base 16) Palo Alto Networks ++ 3000 Tannery Way ++ Santa Clara CA 95054 ++ US ++ ++6C-AE-E3 (hex) Nokia ++6CAEE3 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++0C-AC-8A (hex) Sagemcom Broadband SAS ++0CAC8A (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++B8-5D-C3 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++B85DC3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++B4-3A-E2 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++B43AE2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++D0-A4-6F (hex) China Dragon Technology Limited ++D0A46F (base 16) China Dragon Technology Limited ++ B4 Bldg.Haoshan 1st Industry Park, ++ Shenzhen Guangdong 518104 ++ CN ++ ++F0-C8-B5 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++F0C8B5 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++2C-60-CD (hex) NR ELECTRIC CO., LTD ++2C60CD (base 16) NR ELECTRIC CO., LTD ++ 69,Suyuan Avenue ++ Nanjing Jiangsu 211102 ++ CN ++ ++8C-1E-80 (hex) Cisco Systems, Inc ++8C1E80 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++A4-1E-E1 (hex) Taicang T&W Electronics ++A41EE1 (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 ++ CN ++ ++E8-FB-1C (hex) AzureWave Technology Inc. ++E8FB1C (base 16) AzureWave Technology Inc. ++ 8F., No. 94, Baozhong Rd. ++ New Taipei City Taiwan 231 ++ TW ++ ++B4-A7-C6 (hex) SERVERCOM (INDIA) PRIVATE LIMITED ++B4A7C6 (base 16) SERVERCOM (INDIA) PRIVATE LIMITED ++ E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI ++ NEW DELHI NA ++ IN ++ ++1C-76-F2 (hex) Samsung Electronics Co.,Ltd ++1C76F2 (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++80-C3-BA (hex) Sennheiser Consumer Audio GmbH ++80C3BA (base 16) Sennheiser Consumer Audio GmbH ++ Am Labor 1 ++ Wedemark Niedersachsen 30900 ++ DE ++ ++40-35-E6 (hex) Samsung Electronics Co.,Ltd ++4035E6 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++28-6B-35 (hex) Intel Corporate ++286B35 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++30-43-D7 (hex) IEEE Registration Authority ++3043D7 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++C0-EE-40 (hex) Laird Connectivity ++C0EE40 (base 16) Laird Connectivity ++ 50 South Main St ++ Akron Ohio 44308 ++ US ++ ++A4-7D-9F (hex) Shenzhen iComm Semiconductor CO.,LTD ++A47D9F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++84-EA-97 (hex) Shenzhen iComm Semiconductor CO.,LTD ++84EA97 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++14-B2-E5 (hex) Shenzhen iComm Semiconductor CO.,LTD ++14B2E5 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++E0-CB-56 (hex) Shenzhen iComm Semiconductor CO.,LTD ++E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++30-04-5C (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++30045C (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++90-79-CF (hex) zte corporation ++9079CF (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++88-8F-A4 (hex) Huawei Device Co., Ltd. ++888FA4 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++3C-82-C0 (hex) Technicolor CH USA Inc. ++3C82C0 (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ ++C4-DE-E2 (hex) Espressif Inc. ++C4DEE2 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++68-B6-B3 (hex) Espressif Inc. ++68B6B3 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++FC-A0-5A (hex) Oray.com co., LTD. ++FCA05A (base 16) Oray.com co., LTD. ++ 8008Rm, building No.1 GuoDing d. Yangpu District ++ Shanghai Shanghai 200433 ++ CN ++ ++90-48-6C (hex) Ring LLC ++90486C (base 16) Ring LLC ++ 1523 26th St ++ Santa Monica CA 90404 ++ US ++ ++3C-46-45 (hex) Shanghai Infinity Wireless Technologies Co.,Ltd. ++3C4645 (base 16) Shanghai Infinity Wireless Technologies Co.,Ltd. ++ Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai ++ Shanghai Shanghai 200082 ++ CN ++ ++A4-F9-33 (hex) Intel Corporate ++A4F933 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++10-F6-0A (hex) Intel Corporate ++10F60A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++70-D8-23 (hex) Intel Corporate ++70D823 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++50-68-AC (hex) Huawei Device Co., Ltd. ++5068AC (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++50-39-2F (hex) INGRAM MICRO SERVICES ++50392F (base 16) INGRAM MICRO SERVICES ++ 100 CHEMIN DE BAILLOT ++ MONTAUBAN 82000 ++ FR ++ ++FC-84-17 (hex) Honor Device Co., Ltd. ++FC8417 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++2C-A7-9E (hex) HUAWEI TECHNOLOGIES CO.,LTD ++2CA79E (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++0C-7F-B2 (hex) ARRIS Group, Inc. ++0C7FB2 (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++AC-B5-66 (hex) Renesas Electronics (Penang) Sdn. Bhd. ++ACB566 (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY ++ ++10-24-07 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++102407 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++74-D9-EB (hex) Petabit Scale, Inc. ++74D9EB (base 16) Petabit Scale, Inc. ++ 5814 Lonetree Blvd, Ste 200 ++ Rocklin CA 95765 ++ US ++ ++D0-21-AC (hex) Yohana ++D021AC (base 16) Yohana ++ 3460 Hillview Ave. ++ Palo Alto CA 94304 ++ US ++ ++38-1F-26 (hex) IEEE Registration Authority ++381F26 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++7C-E1-52 (hex) THE GOODYEAR TIRE & RUBBER COMPANY ++7CE152 (base 16) THE GOODYEAR TIRE & RUBBER COMPANY ++ 200 Innovation Way ++ Akron OH 44316 ++ US ++ ++28-CD-C1 (hex) Raspberry Pi Trading Ltd ++28CDC1 (base 16) Raspberry Pi Trading Ltd ++ Maurice Wilkes Building, Cowley Road ++ Cambridge CB4 0DS ++ GB ++ ++00-90-3F (hex) WorldCast Systems ++00903F (base 16) WorldCast Systems ++ 20 Avenue Neil Armstrong ++ Mérignac 33700 ++ FR ++ ++50-E6-36 (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH ++50E636 (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH ++ Alt-Moabit 95 ++ Berlin Berlin 10559 ++ DE ++ ++78-20-BD (hex) Polysense (Beijing) Technologies Co. Ltd ++7820BD (base 16) Polysense (Beijing) Technologies Co. Ltd ++ 9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist. ++ Beijing 100085 ++ CN ++ ++EC-21-25 (hex) Toshiba Corp. ++EC2125 (base 16) Toshiba Corp. ++ 1-1 Shibaura 1-Chome, Minato-Ku ++ Tokyo 105-8001 ++ JP ++ ++68-4E-05 (hex) HUNAN FN-LINK TECHNOLOGY LIMITED ++684E05 (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED ++ No.8, Litong Road, Liuyan Economic & Tec ++ Changsha HUNAN 410329 ++ CN ++ ++04-99-BB (hex) Apple, Inc. ++0499BB (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++F0-4D-D4 (hex) Sagemcom Broadband SAS ++F04DD4 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++00-E5-F1 (hex) BUFFALO.INC ++00E5F1 (base 16) BUFFALO.INC ++ AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku ++ Nagoya Aichi Pref. 460-8315 ++ JP ++ ++A8-51-AB (hex) Apple, Inc. ++A851AB (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++5C-1B-F4 (hex) Apple, Inc. ++5C1BF4 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++34-EE-2A (hex) ConMet ++34EE2A (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US ++ ++78-66-9D (hex) Hui Zhou Gaoshengda Technology Co.,LTD ++78669D (base 16) Hui Zhou Gaoshengda Technology Co.,LTD ++ No.2, Jin-da Road, Huinan High-tech Industrial Park, Hui-ao Avenue ++ Huizhou Guangdong 516025 ++ CN ++ ++48-46-8D (hex) Zepcam B.V. ++48468D (base 16) Zepcam B.V. ++ Delftechpark, 17-19 ++ Delft 2628 XJ ++ NL ++ ++90-49-92 (hex) YSTen Technology Co.,Ltd ++904992 (base 16) YSTen Technology Co.,Ltd ++ Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing. ++ Beijing 100101 ++ CN ++ ++AC-29-29 (hex) Infinix mobility limited ++AC2929 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ ++3C-CE-0D (hex) Shenzhen juduoping Technology Co.,Ltd ++3CCE0D (base 16) Shenzhen juduoping Technology Co.,Ltd ++ Baoan Xin'an Streat ++ Shenzhen 002052 ++ CN ++ ++00-0E-DD (hex) SHURE INCORPORATED ++000EDD (base 16) SHURE INCORPORATED ++ 5800 W. TOUHY AVE. ++ NILES IL 60714 ++ US ++ ++18-FD-74 (hex) Routerboard.com ++18FD74 (base 16) Routerboard.com ++ Mikrotikls SIA ++ Riga Riga LV1009 ++ LV ++ ++40-D9-5A (hex) AMPAK Technology,Inc. ++40D95A (base 16) AMPAK Technology,Inc. ++ 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, ++ Hsinchu Hsinchu,Taiwan R.O.C. 30352 ++ TW ++ ++4C-D0-DD (hex) HUAWEI TECHNOLOGIES CO.,LTD ++4CD0DD (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++E4-90-2A (hex) HUAWEI TECHNOLOGIES CO.,LTD ++E4902A (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++90-5E-44 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++905E44 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++E8-3A-4B (hex) China Mobile Group Device Co.,Ltd. ++E83A4B (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ ++60-E9-AA (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++60E9AA (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++24-0F-5E (hex) Shenzhen z-router Technology Co., Ltd ++240F5E (base 16) Shenzhen z-router Technology Co., Ltd ++ 406,Block A,Taojindi Building ,Tenglong Road,Longhua New District, ++ Shenzhen GuangDong 518000 ++ CN ++ ++6C-97-6D (hex) Motorola Mobility LLC, a Lenovo Company ++6C976D (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ ++64-11-A4 (hex) Motorola Mobility LLC, a Lenovo Company ++6411A4 (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ ++10-F0-68 (hex) Ruckus Wireless ++10F068 (base 16) Ruckus Wireless ++ 350 West Java Drive + Sunnyvale CA 94089 + US + +-00-EB-D8 (hex) MERCUSYS TECHNOLOGIES CO., LTD. +-00EBD8 (base 16) MERCUSYS TECHNOLOGIES CO., LTD. +- 3F,Zone B,Building R1,High-Tech Industrial Village,No.023 High-Tech South 4 Road,Nanshan,Shenzhen ++F0-87-7F (hex) Magnetar Technology Shenzhen Co., LTD. ++F0877F (base 16) Magnetar Technology Shenzhen Co., LTD. ++ Room211, Building1, No.26 Puzai Road, Pingdi Longgang ++ Shenzhen GUANGDONG 518117 ++ CN ++ ++74-D4-DD (hex) Quanta Computer Inc. ++74D4DD (base 16) Quanta Computer Inc. ++ No. 211, Wenhua 2nd Rd., Guishan Dist. ++ Taoyuan City Taiwan 33377 ++ TW ++ ++C8-D6-B7 (hex) Solidigm Technology ++C8D6B7 (base 16) Solidigm Technology ++ 1921 Corporate Center Circle, Suite 3B ++ Longmont CO 80501 ++ US ++ ++60-5B-30 (hex) Dell Inc. ++605B30 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US ++ ++44-3C-9C (hex) Pintsch GmbH ++443C9C (base 16) Pintsch GmbH ++ Huenxer Strasse 149 ++ Dinslaken 46537 ++ DE ++ ++D8-80-DC (hex) Huawei Device Co., Ltd. ++D880DC (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++E8-B3-EF (hex) Fiberhome Telecommunication Technologies Co.,LTD ++E8B3EF (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++B4-9F-4D (hex) Fiberhome Telecommunication Technologies Co.,LTD ++B49F4D (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++F4-6C-68 (hex) Wistron Neweb Corporation ++F46C68 (base 16) Wistron Neweb Corporation ++ No.20,Park Avenue II,Hsinchu Science Park ++ Hsin-Chu R.O.C. 308 ++ TW ++ ++84-93-B2 (hex) zte corporation ++8493B2 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++20-64-DE (hex) Sunitec Enterprise Co.,Ltd ++2064DE (base 16) Sunitec Enterprise Co.,Ltd ++ 3F.,No.98-1,Mincyuan Rd.Sindian City ++ Taipei County 231 231141 ++ CN ++ ++74-B7-25 (hex) Huawei Device Co., Ltd. ++74B725 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++40-8E-DF (hex) Huawei Device Co., Ltd. ++408EDF (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++A4-0F-98 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++A40F98 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++BC-44-34 (hex) Shenzhen TINNO Mobile Technology Corp. ++BC4434 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++70-66-2A (hex) Sony Interactive Entertainment Inc. ++70662A (base 16) Sony Interactive Entertainment Inc. ++ 1-7-1 Konan ++ Minato-ku Tokyo 108-0075 ++ JP ++ ++34-AC-11 (hex) China Mobile Group Device Co.,Ltd. ++34AC11 (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ ++44-32-C2 (hex) GOAL Co., Ltd. ++4432C2 (base 16) GOAL Co., Ltd. ++ 2-16-6 Mitsuyakita Yodogawa-ku ++ Osaka-shi Osaka-fu 532-0032 ++ JP ++ ++18-B1-85 (hex) Qiao Information Technology (Zhengzhou) Co., Ltd. ++18B185 (base 16) Qiao Information Technology (Zhengzhou) Co., Ltd. ++ Room 405-1, Area A, 4th Floor, Wisdom Island Building, No.6, Zhongdao East, Zhengdong New District, ++ Zhengzhou Henan 450000 ++ CN ++ ++A0-B7-65 (hex) Espressif Inc. ++A0B765 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++CC-DB-A7 (hex) Espressif Inc. ++CCDBA7 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++C8-6C-20 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++C86C20 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++C0-C9-76 (hex) Shenzhen TINNO Mobile Technology Corp. ++C0C976 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++B4-C0-F5 (hex) Shenzhen TINNO Mobile Technology Corp. ++B4C0F5 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++E8-F7-91 (hex) Xiaomi Communications Co Ltd ++E8F791 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++0C-97-5F (hex) Aruba, a Hewlett Packard Enterprise Company ++0C975F (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++DC-71-DD (hex) AX Technologies ++DC71DD (base 16) AX Technologies ++ 1400 Broadway, 18th Floor ++ New York City NY 10018 ++ US ++ ++54-A9-C8 (hex) Home Control Singapore Pte Ltd ++54A9C8 (base 16) Home Control Singapore Pte Ltd ++ 151 Lorong Chuan ++ Singapore 556741 ++ SG ++ ++30-7F-10 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++307F10 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++A4-90-CE (hex) vivo Mobile Communication Co., Ltd. ++A490CE (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++F8-B8-B4 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++F8B8B4 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, + Shenzhen Guangdong 518057 + CN + ++B0-FB-DD (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++B0FBDD (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++3C-69-D1 (hex) ADC Automotive Distance Control System GmbH ++3C69D1 (base 16) ADC Automotive Distance Control System GmbH ++ Peter-Dornier Strasse 10 ++ Lindau Bavaria 88131 ++ DE ++ ++E0-9C-8D (hex) Seakeeper, Inc. ++E09C8D (base 16) Seakeeper, Inc. ++ 45310 Abell House Lane Suite 350 ++ California MD 20619 ++ US ++ ++04-BA-D6 (hex) D-Link Corporation ++04BAD6 (base 16) D-Link Corporation ++ No.289, Sinhu 3rd Rd., Neihu District, ++ Taipei City 114 ++ TW ++ ++30-3F-5D (hex) PT HAN SUNG ELECTORONICS INDONESIA ++303F5D (base 16) PT HAN SUNG ELECTORONICS INDONESIA ++ JL.PALEM 1 BLOK DS-6 ++ KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN BEKASI JAWA BARAT 17550 ++ ID ++ + 7C-8A-E1 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD. + 7C8AE1 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD. + NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE +@@ -151094,12 +153491,6 @@ A8F5DD (base 16) ARRIS Group, Inc. + San Diego CA 92121 + US + +-44-D3-AD (hex) Shenzhen TINNO Mobile Technology Corp. +-44D3AD (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 9C-82-75 (hex) Yichip Microelectronics (Hangzhou) Co.,Ltd + 9C8275 (base 16) Yichip Microelectronics (Hangzhou) Co.,Ltd + Room 401, Building 15, No.498 Guoshoujing Road, Pudong Software Park +@@ -153608,12 +155999,6 @@ F4F5DB (base 16) Xiaomi Communications Co Ltd + NO.68, Qinghe Middle Street Haidian District, Beijing 100085 + CN + +-F4-E2-04 (hex) Traqueur +-F4E204 (base 16) Traqueur +- 1, rue Royale +- Saint-Cloud 92210 +- FR +- + CC-22-37 (hex) IEEE Registration Authority + CC2237 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -159467,12 +161852,6 @@ ACCF85 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Cupertino CA 95014 + US + +-00-73-8D (hex) Shenzhen TINNO Mobile Technology Corp. +-00738D (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F.,H-3 Building,OCT Eastern lndustrial Park. NO.1 XiangShan East Road. +- GuangDong 518053 +- US +- + 34-BA-75 (hex) Everest Networks, Inc + 34BA75 (base 16) Everest Networks, Inc + 2933 Bunker Hill Ln., Suite 100 +@@ -171515,12 +173894,6 @@ EC6C9F (base 16) Chengdu Volans Technology CO.,LTD + Kennesaw Georgia 30144 + US + +-00-16-A3 (hex) Ingeteam Transmission&Distribution, S.A. +-0016A3 (base 16) Ingeteam Transmission&Distribution, S.A. +- C/ Usausuaga, 7 +- Basauri Bizkaia 48970 +- ES +- + 00-16-A0 (hex) Auto-Maskin + 0016A0 (base 16) Auto-Maskin + Sophie Radichs Vei 7 +@@ -182996,12 +185369,6 @@ ECC302 (base 16) HUMAX Co., Ltd. + Seongnam-si Gyeonggi-do 463-875 + KR + +-98-C9-7C (hex) Shenzhen iComm Semiconductor CO.,LTD +-98C97C (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 504A,Block B,Digital Building,Garden City,No.1079 Nanhai Road,Nanshan District,Shenzhen +- shenzhen Guangdong 518067 +- CN +- + 00-C3-43 (hex) E-T-A Circuit Breakers Ltd + 00C343 (base 16) E-T-A Circuit Breakers Ltd + 6 Telford Close +@@ -186803,18 +189170,6 @@ BC6193 (base 16) Xiaomi Communications Co Ltd + Beijing Haidian District 100085 + CN + +-94-7F-D8 (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-947FD8 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 +- CN +- +-C8-54-A4 (hex) Infinix mobility limited +-C854A4 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- + EC-71-DB (hex) Reolink Innovation Limited + EC71DB (base 16) Reolink Innovation Limited + 705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET +@@ -186833,6 +189188,12 @@ F8E57E (base 16) Cisco Systems, Inc + Seoul Seocho-Gu #137-902 + KR + ++94-7F-D8 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++947FD8 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ + 38-5B-44 (hex) Silicon Laboratories + 385B44 (base 16) Silicon Laboratories + 400 West Cesar Chavez Street +@@ -186863,8 +189224,632 @@ CCEB18 (base 16) OOO TSS + Moscow Moscow 105187 + RU + ++6C-24-08 (hex) LCFC(Hefei) Electronics Technology Co., Ltd ++6C2408 (base 16) LCFC(Hefei) Electronics Technology Co., Ltd ++ No.3188-1,YunGu Road(Comprehensive Bonded Zone),Hefei Economic and Technological Development Area ++ HEFEI ANHUI 230601 ++ CN ++ ++EC-60-73 (hex) TP-LINK TECHNOLOGIES CO.,LTD. ++EC6073 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. ++ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan ++ Shenzhen Guangdong 518057 ++ CN ++ ++10-4D-15 (hex) Viaanix Inc ++104D15 (base 16) Viaanix Inc ++ 434 N Main St. ++ Wichita KS 67202 ++ US ++ ++50-A0-15 (hex) Shenzhen Yipingfang Network Technology Co., Ltd. ++50A015 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. ++ 21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China ++ Shenzhen Nanshan District 518000 ++ CN ++ ++C8-54-A4 (hex) Infinix mobility limited ++C854A4 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ + A0-09-2E (hex) zte corporation + A0092E (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN ++ ++B0-AF-F7 (hex) Shenzhen Yipingfang Network Technology Co., Ltd. ++B0AFF7 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. ++ 21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China ++ Shenzhen Nanshan District 518000 ++ CN ++ ++70-85-C4 (hex) Ruijie Networks Co.,LTD ++7085C4 (base 16) Ruijie Networks Co.,LTD ++ No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city ++ Fuzhou Fujian 350002 ++ CN ++ ++5C-C5-63 (hex) HUNAN FN-LINK TECHNOLOGY LIMITED ++5CC563 (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED ++ No.8, Litong Road, Liuyan Economic & Tec ++ Changsha HUNAN 410329 ++ CN ++ ++74-DD-CB (hex) China Leadshine Technology Co.,Ltd ++74DDCB (base 16) China Leadshine Technology Co.,Ltd ++ 9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan? ++ SHENZHEN 518000 ++ CN ++ ++A8-B1-3B (hex) HP Inc. ++A8B13B (base 16) HP Inc. ++ 10300 Energy Dr ++ Spring TX 77389 ++ US ++ ++C4-38-75 (hex) Sonos, Inc. ++C43875 (base 16) Sonos, Inc. ++ 614 Chapala St ++ Santa Barbara 93101 ++ US ++ ++68-B6-91 (hex) Amazon Technologies Inc. ++68B691 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++DC-A9-56 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++DCA956 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++48-27-C5 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++4827C5 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++BC-D2-06 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++BCD206 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++20-89-8A (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++20898A (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ ++14-75-5B (hex) Intel Corporate ++14755B (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++F4-E2-04 (hex) COYOTE SYSTEM ++F4E204 (base 16) COYOTE SYSTEM ++ 1, rue Royale ++ Saint-Cloud 92210 ++ FR ++ ++F8-4E-58 (hex) Samsung Electronics Co.,Ltd ++F84E58 (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++B4-70-64 (hex) Samsung Electronics Co.,Ltd ++B47064 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++CC-82-7F (hex) Advantech Technology (CHINA) Co., Ltd. ++CC827F (base 16) Advantech Technology (CHINA) Co., Ltd. ++ No.666, Han-Pu Rd. Yu-Shan ++ Kun-Shan Jiang Su 215316 ++ CN ++ ++88-3F-0C (hex) system a.v. co., ltd. ++883F0C (base 16) system a.v. co., ltd. ++ 5-16-1,Aoe,KIta-Ku ++ Okayama Okayama 700-0941 ++ JP ++ ++C8-BE-35 (hex) Extreme Networks, Inc. ++C8BE35 (base 16) Extreme Networks, Inc. ++ 6480 Via Del Oro ++ San Jose CA 95119 ++ US ++ ++78-AF-08 (hex) Intel Corporate ++78AF08 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++D8-10-68 (hex) Murata Manufacturing Co., Ltd. ++D81068 (base 16) Murata Manufacturing Co., Ltd. ++ 1-10-1, Higashikotari ++ Nagaokakyo-shi Kyoto 617-8555 ++ JP ++ ++5C-04-5A (hex) Company NA Stage & Light ++5C045A (base 16) Company NA Stage & Light ++ Lambertu 9 ++ M?rupe LV-2167 ++ LV ++ ++58-C3-56 (hex) EM Microelectronic ++58C356 (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ ++A0-ED-FB (hex) Quectel Wireless Solutions Co.,Ltd. ++A0EDFB (base 16) Quectel Wireless Solutions Co.,Ltd. ++ 7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District ++ Shanghai 200233 ++ CN ++ ++B0-23-47 (hex) Shenzhen Giant Microelectronics Company Limited ++B02347 (base 16) Shenzhen Giant Microelectronics Company Limited ++ Room 2108, 21 Floor, Building No.1 of Chang Fu Jin Mao Tower, No.5 Shi Hua Road, Futian District ++ Shenzhen Guangdong 518000 ++ CN ++ ++CC-DD-58 (hex) Robert Bosch GmbH ++CCDD58 (base 16) Robert Bosch GmbH ++ Mittlerer Pfad 9 ++ Stuttgart 70499 ++ DE ++ ++4C-2E-5E (hex) Samsung Electronics Co.,Ltd ++4C2E5E (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++64-5D-F4 (hex) Samsung Electronics Co.,Ltd ++645DF4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++88-FC-5D (hex) Cisco Systems, Inc ++88FC5D (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++F4-C8-8A (hex) Intel Corporate ++F4C88A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++18-3C-98 (hex) Shenzhen Hengyi Technology Co., LTD ++183C98 (base 16) Shenzhen Hengyi Technology Co., LTD ++ Floor 5, Zone 1, Block B, Mingyou Purchasing Center, Baoyuan Road, Xixiang Street ++ Shenzhen Guangdong 518102 ++ CN ++ ++78-71-04 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++787104 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++64-C5-82 (hex) China Mobile Group Device Co.,Ltd. ++64C582 (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ ++D4-E0-53 (hex) Aruba, a Hewlett Packard Enterprise Company ++D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++5C-A4-F4 (hex) zte corporation ++5CA4F4 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++94-09-C9 (hex) ALPSALPINE CO .,LTD ++9409C9 (base 16) ALPSALPINE CO .,LTD ++ nishida 6-1 ++ kakuda-City Miyagi-Pref 981-1595 ++ JP ++ ++50-28-4A (hex) Intel Corporate ++50284A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++98-C9-7C (hex) Shenzhen iComm Semiconductor CO.,LTD ++98C97C (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++24-6C-60 (hex) Huawei Device Co., Ltd. ++246C60 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++28-A3-31 (hex) Sierra Wireless ++28A331 (base 16) Sierra Wireless ++ 13811 Wireless Way ++ Richmond BC V6V 3A4 ++ CA ++ ++18-34-AF (hex) Kaonmedia CO., LTD. ++1834AF (base 16) Kaonmedia CO., LTD. ++ 884-3, Seongnam-daero, Bundang-gu ++ Seongnam-si Gyeonggi-do 13517 ++ KR ++ ++EC-62-60 (hex) Espressif Inc. ++EC6260 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++B0-6E-72 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++B06E72 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++30-3E-A7 (hex) Intel Corporate ++303EA7 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++60-7D-09 (hex) Luxshare Precision Industry Co., Ltd ++607D09 (base 16) Luxshare Precision Industry Co., Ltd ++ 2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District ++ Shenzhen City Guangdong Province 518100 ++ CN ++ ++CC-3E-79 (hex) ARRIS Group, Inc. ++CC3E79 (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++28-F5-D1 (hex) ARRIS Group, Inc. ++28F5D1 (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++10-E1-77 (hex) ARRIS Group, Inc. ++10E177 (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++28-82-7C (hex) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++28827C (base 16) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++ No.17 Longmen Road ++ Changzhou JiangSu 213164 ++ CN ++ ++90-D4-73 (hex) vivo Mobile Communication Co., Ltd. ++90D473 (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++08-EB-F6 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++08EBF6 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++C8-F0-9E (hex) Espressif Inc. ++C8F09E (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++DC-54-75 (hex) Espressif Inc. ++DC5475 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++0C-7B-C8 (hex) Cisco Meraki ++0C7BC8 (base 16) Cisco Meraki ++ 500 Terry A. Francois Blvd ++ San Francisco 94158 ++ US ++ ++00-16-A3 (hex) INGETEAM ++0016A3 (base 16) INGETEAM ++ Parque Tecnologico de Bizkaia, Edificio 110 ++ Zamudio Bizkaia 48170 ++ ES ++ ++24-CF-24 (hex) Beijing Xiaomi Mobile Software Co., Ltd ++24CF24 (base 16) Beijing Xiaomi Mobile Software Co., Ltd ++ The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District ++ Beijing Beijing 100085 ++ CN ++ ++1C-0D-7D (hex) Apple, Inc. ++1C0D7D (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++14-F2-87 (hex) Apple, Inc. ++14F287 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++58-55-95 (hex) Apple, Inc. ++585595 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++F0-6C-5D (hex) Xiaomi Communications Co Ltd ++F06C5D (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++40-B0-2F (hex) Miele & Cie. KG ++40B02F (base 16) Miele & Cie. KG ++ Carl-Miele-Straße 29 ++ Gütersloh 33332 ++ DE ++ ++18-66-F0 (hex) Jupiter Systems ++1866F0 (base 16) Jupiter Systems ++ 31015 Huntwood Ave ++ Hayward CA 94544-7007 ++ US ++ ++74-60-4C (hex) RØDE ++74604C (base 16) RØDE ++ 107 Carnarvon St ++ Silverwater NSW 2128 ++ AU ++ ++28-6F-40 (hex) Tonly Technology Co. Ltd ++286F40 (base 16) Tonly Technology Co. Ltd ++ Section 37, Zhongkai Hi-Tech Development Zone ++ Huizhou Guangdong 516006 ++ CN ++ ++BC-C7-DA (hex) Earda Technologies co Ltd ++BCC7DA (base 16) Earda Technologies co Ltd ++ Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District ++ Guangzhou Guangdong 511455 ++ CN ++ ++0C-86-C7 (hex) Jabil Circuit (Guangzhou) Limited ++0C86C7 (base 16) Jabil Circuit (Guangzhou) Limited ++ Huangpu 128, JunCheng Road ++ GuangZhou Guangdong 510530 ++ CN ++ ++14-94-6C (hex) Apple, Inc. ++14946C (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++1C-59-74 (hex) IEEE Registration Authority ++1C5974 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++58-00-32 (hex) Genexis B.V. ++580032 (base 16) Genexis B.V. ++ Lodewijkstraat 1A ++ Eindhoven 5652AC ++ NL ++ ++B4-7D-76 (hex) KNS Group LLC ++B47D76 (base 16) KNS Group LLC ++ Room 4, Office IV, Floor 4 Rochdelskaya street, 15, b.15 Moscow, 123376 Russia ++ Moscow 123376 ++ RU ++ ++C0-AD-97 (hex) TECNO MOBILE LIMITED ++C0AD97 (base 16) TECNO MOBILE LIMITED ++ ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG ++ Hong Kong Hong Kong 999077 ++ HK ++ ++B0-38-E2 (hex) Wanan Hongsheng Electronic Co.Ltd ++B038E2 (base 16) Wanan Hongsheng Electronic Co.Ltd ++ 1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province ++ Wanan China/jiangxi 343800 ++ CN ++ ++4C-53-69 (hex) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++4C5369 (base 16) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++ No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China ++ ChongQing ChongQing 400025 ++ CN ++ ++70-A9-83 (hex) Cisco Systems, Inc ++70A983 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++BC-FA-EB (hex) Cisco Systems, Inc ++BCFAEB (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++74-76-7D (hex) shenzhen kexint technology co.,ltd ++74767D (base 16) shenzhen kexint technology co.,ltd ++ 5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City ++ shenzhen guangdong 518000 ++ CN ++ ++E0-48-D8 (hex) Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++E048D8 (base 16) Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++ Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, ++ Guangzhou 510623 ++ CN ++ ++F8-E4-A4 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++F8E4A4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++84-85-53 (hex) Biznes Systema Telecom, LLC ++848553 (base 16) Biznes Systema Telecom, LLC ++ room XXII/1, fl 3, block 3, 6 Barklaya street, Moscow, 121087, Russia ++ Moscow 121087 ++ RU ++ ++D8-88-63 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++D88863 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++C0-3E-50 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C03E50 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++80-60-36 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++806036 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++A0-C9-8B (hex) Nokia Solutions and Networks GmbH & Co. KG ++A0C98B (base 16) Nokia Solutions and Networks GmbH & Co. KG ++ Werinherstrasse 91 ++ München Bavaria D-81541 ++ DE ++ ++18-BB-1C (hex) Huawei Device Co., Ltd. ++18BB1C (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++4C-9D-22 (hex) ACES Co.,Ltd ++4C9D22 (base 16) ACES Co.,Ltd ++ TianGong Avenue #916, Tianfu New Area ++ ChengDu Sichuan Province 610000 ++ CN ++ ++88-C9-E8 (hex) Sony Corporation ++88C9E8 (base 16) Sony Corporation ++ Sony City Osaki 2-10-1 ++ Shinagawa-ku Tokyo 141-8610 ++ JP ++ ++B8-F0-B9 (hex) zte corporation ++B8F0B9 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++80-5B-65 (hex) LG Innotek ++805B65 (base 16) LG Innotek ++ 26, Hanamsandan 5beon-ro ++ Gwangju Gwangsan-gu 506-731 ++ KR ++ ++D4-43-0E (hex) Zhejiang Dahua Technology Co., Ltd. ++D4430E (base 16) Zhejiang Dahua Technology Co., Ltd. ++ No.1199,Waterfront Road ++ Hangzhou Zhejiang 310053 ++ CN ++ ++00-73-8D (hex) Shenzhen TINNO Mobile Technology Corp. ++00738D (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++44-D3-AD (hex) Shenzhen TINNO Mobile Technology Corp. ++44D3AD (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++F8-5E-0B (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++94-D3-31 (hex) Xiaomi Communications Co Ltd ++94D331 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++5C-8C-30 (hex) Taicang T&W Electronics ++5C8C30 (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 ++ CN ++ ++2C-9D-65 (hex) vivo Mobile Communication Co., Ltd. ++2C9D65 (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++44-88-16 (hex) Cisco Systems, Inc ++448816 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++34-DD-04 (hex) Minut AB ++34DD04 (base 16) Minut AB ++ Baltzarsgatan 23 ++ Malmö 21136 ++ SE ++ ++60-1E-98 (hex) Axevast Technology ++601E98 (base 16) Axevast Technology ++ 5F., No. 20, Guanqian Road, Zhongzheng District ++ Taipei City 100007 ++ TW ++ ++A8-F7-D9 (hex) Mist Systems, Inc. ++A8F7D9 (base 16) Mist Systems, Inc. ++ 1601 South De Anza Blvd, Suite 248 ++ Cupertino CA 95014 ++ US ++ ++2C-3B-70 (hex) AzureWave Technology Inc. ++2C3B70 (base 16) AzureWave Technology Inc. ++ 8F., No. 94, Baozhong Rd. ++ New Taipei City Taiwan 231 ++ TW +diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt +index aa83fc256f..0410acdf80 100644 +--- a/hwdb.d/ma-medium.txt ++++ b/hwdb.d/ma-medium.txt +@@ -2258,12 +2258,6 @@ C00000-CFFFFF (base 16) Goetting KG + Lehrte Select Your State or Province 31275 + DE + +-50-FF-99 (hex) Coyote Sytem +-100000-1FFFFF (base 16) Coyote Sytem +- 24 quai Gallieni +- Suresnes 92150 +- FR +- + 50-FF-99 (hex) Shenzhen Haipengxin Electronic Co., Ltd. + D00000-DFFFFF (base 16) Shenzhen Haipengxin Electronic Co., Ltd. + Block C3,Mingzhuo Xingye Technology Park,Guangming Avenue +@@ -3719,12 +3713,6 @@ B00000-BFFFFF (base 16) Fibergate Inc. + Beijing Beijing 100037 + CN + +-9C-43-1E (hex) Phoenix Audio Technologies +-E00000-EFFFFF (base 16) Phoenix Audio Technologies +- 2552 White Road, Suite A +- Irvine CA 92614 +- US +- + 70-69-79 (hex) Rivian Automotive LLC + C00000-CFFFFF (base 16) Rivian Automotive LLC + 13250 N. Haggerty Road +@@ -4874,6 +4862,168 @@ C00000-CFFFFF (base 16) Shenzhen Micro&Nano Perception Computing Technology + Tokyo Minato 108-0023 + JP + ++0C-86-29 (hex) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD ++D00000-DFFFFF (base 16) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD ++ 27 Shucun West Road, Haidian District, ++ Beijing 100089 ++ CN ++ ++0C-86-29 (hex) Shenzhen protostellar technology Co., Ltd ++500000-5FFFFF (base 16) Shenzhen protostellar technology Co., Ltd ++ 4/F, #16, DaKan Yangmen industrial park, XiLi town, Nanshan district ++ ShenZhen GuangDong 518055 ++ CN ++ ++0C-86-29 (hex) HONGKONG SAINT TECH INDUSTRIAL LIMITED ++900000-9FFFFF (base 16) HONGKONG SAINT TECH INDUSTRIAL LIMITED ++ RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK ++ HONGKONG 999077 ++ CN ++ ++0C-86-29 (hex) Akribis Systems ++B00000-BFFFFF (base 16) Akribis Systems ++ Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5 ++ Singapore Singapore 569876 ++ SG ++ ++6C-93-08 (hex) Shenzhen C & D Electronics Co., Ltd. ++500000-5FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd. ++ 9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District ++ ShenZhen GuangDong 518000 ++ CN ++ ++6C-93-08 (hex) Braums ++000000-0FFFFF (base 16) Braums ++ Unit M 10-16 South st ++ Rydalmere NSW 2116 ++ AU ++ ++50-FF-99 (hex) COYOTE SYSTEM ++100000-1FFFFF (base 16) COYOTE SYSTEM ++ 24 quai Gallieni ++ Suresnes 92150 ++ FR ++ ++30-43-D7 (hex) Apollo Infoways Private Limited ++200000-2FFFFF (base 16) Apollo Infoways Private Limited ++ G-149, Sector-63 ++ Noida Uttar Pradesh 201301 ++ IN ++ ++30-43-D7 (hex) Luxshare Electronic Technology (Kunshan) LTD ++300000-3FFFFF (base 16) Luxshare Electronic Technology (Kunshan) LTD ++ No.158,Jinchang Road,Jinxi Town,Kunshan City,Jiangsu Province,215324, China ++ Kunshan Jiangsu 215324 ++ CN ++ ++6C-93-08 (hex) WATERFORD CONSULTANTS LLC ++100000-1FFFFF (base 16) WATERFORD CONSULTANTS LLC ++ 7430 NEW TECHNOLOGY WAY, Suite 150 ++ FREDERICK 21703 ++ US ++ ++30-43-D7 (hex) DIGICITI Technology Co.,Ltd ++700000-7FFFFF (base 16) DIGICITI Technology Co.,Ltd ++ Room 3502,Building 1,Huide Building,North Station Community,Minzhi Street,Longhua District ++ Shenzhen Guangdong 518000 ++ CN ++ ++38-1F-26 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++100000-1FFFFF (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China ++ Suzhou 215021 ++ CN ++ ++38-1F-26 (hex) Avon Protection ++800000-8FFFFF (base 16) Avon Protection ++ 503 8th Street ++ Cadillac MI 49601 ++ US ++ ++18-A5-9C (hex) Thermia AB ++500000-5FFFFF (base 16) Thermia AB ++ Snickaregatan 1 ++ Arvika 67134 ++ SE ++ ++38-1F-26 (hex) SMS Evoko Group AB ++900000-9FFFFF (base 16) SMS Evoko Group AB ++ Hastholmsvagen 32 ++ Nacka 13130 ++ SE ++ ++18-A5-9C (hex) CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA ++B00000-BFFFFF (base 16) CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFORMATICA LTDA ++ AVENIDA TORQUATO TAPAJOS, 7503 TARUMA GALPAO 2 - CNPJ: 07.200.194/0003-80 ++ MANAUS AMAZONAS 69041-025 ++ BR ++ ++18-A5-9C (hex) BlueEyes Technology ++C00000-CFFFFF (base 16) BlueEyes Technology ++ 7F-3, No.200, Sec. 4, Wenxin Rd., ++ Taichung City Taiwan 40462 ++ TW ++ ++9C-43-1E (hex) SHURE INCORPORATED ++E00000-EFFFFF (base 16) SHURE INCORPORATED ++ 2552 White Road, Suite A ++ Irvine CA 92614 ++ US ++ ++1C-59-74 (hex) Globe Tracker ApS ++E00000-EFFFFF (base 16) Globe Tracker ApS ++ Strandgade 91 ++ kobenhavn State / Province* 1401 ++ DK ++ ++C4-A1-0E (hex) Connectlab SRL ++D00000-DFFFFF (base 16) Connectlab SRL ++ via donatello 30 ++ Milano Milano 20131 - Milano ++ IT ++ ++C4-A1-0E (hex) BARTEC PIXAVI AS ++100000-1FFFFF (base 16) BARTEC PIXAVI AS ++ Vestre Svanholmen 24 ++ SANDNES Rogaland 4313 ++ NO ++ ++C4-A1-0E (hex) HYOSUNG HEAVY INDUSTRIES ++000000-0FFFFF (base 16) HYOSUNG HEAVY INDUSTRIES ++ 119, Mapo-daero (Gongdeok-dong), Mapo-gu ++ Seoul 04144 ++ KR ++ ++C4-A1-0E (hex) Consolinno Energy GmbH ++300000-3FFFFF (base 16) Consolinno Energy GmbH ++ Franz-Mayer-Straße 1 ++ Regensburg Bayern 93053 ++ DE ++ ++C4-A1-0E (hex) Ayla Networks (Shenzhen) Co., Ltd. ++800000-8FFFFF (base 16) Ayla Networks (Shenzhen) Co., Ltd. ++ Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, ++ Shenzhen 518000 ++ CN ++ ++70-50-E7 (hex) Shenzhen Dangs Science and Technology CO.,Ltd. ++800000-8FFFFF (base 16) Shenzhen Dangs Science and Technology CO.,Ltd. ++ 9th Floor of GDC Building, Gaoxin Middle 3rd St.,Nanshan District ++ Shenzhen GuangDong 518063 ++ CN ++ ++70-50-E7 (hex) KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD) ++E00000-EFFFFF (base 16) KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD) ++ 3F,No.4Building,Yuyao Technology Innovation Center ++ Ningbo ZheJiang Province, P.R.C. 315400 ++ CN ++ ++80-02-F4 (hex) BK Networks Co,. Ltd. ++000000-0FFFFF (base 16) BK Networks Co,. Ltd. ++ 330 Suin-ro, Gwonseon-gu ++ Suwon-si Gyeonggi-do 16371 ++ KR ++ + 4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD + 400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD + Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district +@@ -9452,23 +9602,227 @@ D00000-DFFFFF (base 16) Shenzhen Vitalitim Technology Co., Ltd + Guangzhou 511400 + CN + ++10-54-D2 (hex) Raylogic Control Systems Private Limited ++400000-4FFFFF (base 16) Raylogic Control Systems Private Limited ++ Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West ++ Mumbai Maharashtra 400054 ++ IN ++ ++10-54-D2 (hex) Bamboo Dynamics Corporation., Ltd. ++900000-9FFFFF (base 16) Bamboo Dynamics Corporation., Ltd. ++ No.146, Sec. 1,Donxing Rd. ++ Zhubei City, Hsinchu County Taiwan 302058 ++ TW ++ + 10-54-D2 (hex) SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD + 700000-7FFFFF (base 16) SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD + Bldg.7, N.Industrial Park,No.18 Makan Rd,Xili,Nanshan, + SHENZHEN 518000 + CN + +-10-54-D2 (hex) Bamboo Dynamics Corporation., Ltd. +-900000-9FFFFF (base 16) Bamboo Dynamics Corporation., Ltd. +- No.146, Sec. 1,Donxing Rd. +- Zhubei City, Hsinchu County Taiwan 302058 ++0C-86-29 (hex) Shanghai Prophet Electronic Technology Co.,Ltd ++000000-0FFFFF (base 16) Shanghai Prophet Electronic Technology Co.,Ltd ++ 9th Floor, Building 3, 1535 Hongmei Road, Xuhui District, ++ Shanghai 200030 ++ CN ++ ++0C-86-29 (hex) Beijing Qinmu Data Technology Co., Ltd. ++100000-1FFFFF (base 16) Beijing Qinmu Data Technology Co., Ltd. ++ Room101,Office 701,Floor7,Building4,Courtyard1,Nongda South Road,Haidian District. ++ Beijing 100085 ++ CN ++ ++0C-86-29 (hex) C&A Marketing, INC. ++600000-6FFFFF (base 16) C&A Marketing, INC. ++ 114 Tived Lane East ++ Edison NJ 08837 ++ US ++ ++10-54-D2 (hex) Sybersense ++500000-5FFFFF (base 16) Sybersense ++ Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK ++ Hong Kong 999077 ++ CN ++ ++0C-86-29 (hex) MyGregor Ltd ++800000-8FFFFF (base 16) MyGregor Ltd ++ 11A, Carnegie str. ++ Sofia 1000 ++ BG ++ ++6C-93-08 (hex) Annapurna labs ++D00000-DFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++6C-93-08 (hex) Shenzhen TOPWAY Technology Co.,LTD ++A00000-AFFFFF (base 16) Shenzhen TOPWAY Technology Co.,LTD ++ Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist ++ ShenZhen Guangdong 518055 ++ CN ++ ++6C-93-08 (hex) Shenzhen DOOGEE Hengtong Technology CO., LTD ++900000-9FFFFF (base 16) Shenzhen DOOGEE Hengtong Technology CO., LTD ++ B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District ++ Shenzhen Guangdong 518000 ++ CN ++ ++30-43-D7 (hex) SYMES SA ++000000-0FFFFF (base 16) SYMES SA ++ 4 allée technopolis, chemin des presses ++ Cagnes sur mer PACA 06800 ++ FR ++ ++30-43-D7 (hex) Shenzhen Mees Hi-Tech Co., Ltd ++500000-5FFFFF (base 16) Shenzhen Mees Hi-Tech Co., Ltd ++ 2F & 4F,Building 3 North District,2nd Qianjin Road,Liutang Village, Xixiang,Bao'an District ++ Shenzhen Guangdong 518102 ++ CN ++ ++30-43-D7 (hex) Annapurna labs ++D00000-DFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++6C-93-08 (hex) ANDDORO LLC ++E00000-EFFFFF (base 16) ANDDORO LLC ++ 1430 Broadway NY ++ New York NY 10018 ++ US ++ ++38-1F-26 (hex) Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++500000-5FFFFF (base 16) Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++ Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, ++ Jiaxing 314000 ++ CN ++ ++38-1F-26 (hex) Synamedia ++200000-2FFFFF (base 16) Synamedia ++ Luipaardstraat 12 ++ Kortrijk West-Vlaanderen 8500 ++ BE ++ ++38-1F-26 (hex) Jade Bird Fire Co., Ltd. ++C00000-CFFFFF (base 16) Jade Bird Fire Co., Ltd. ++ Jade Bird Building, 207 Chengfu Road, Haidian District, Beijing, P.R.China ++ Beijing 100871 ++ CN ++ ++18-A5-9C (hex) Omwave ++000000-0FFFFF (base 16) Omwave ++ 5 rue Barbes ++ Montrouge 92120 ++ FR ++ ++18-A5-9C (hex) INTEGRAL PLUS ++600000-6FFFFF (base 16) INTEGRAL PLUS ++ ul. Khalitova, 2 ++ Kazan 420029 ++ RU ++ ++18-A5-9C (hex) estun automation co.,ltd ++900000-9FFFFF (base 16) estun automation co.,ltd ++ 1888 Jiyin Avenue,Jiangning District ++ nanjing 211100 ++ CN ++ ++1C-59-74 (hex) Shenzhen Geshem Technology Co Ltd ++D00000-DFFFFF (base 16) Shenzhen Geshem Technology Co Ltd ++ 12th Floor, Block B, Building 7, International Innovation Valley ++ Shenzhen Gunagdong 518000 ++ CN ++ ++1C-59-74 (hex) King-On Technology Ltd. ++C00000-CFFFFF (base 16) King-On Technology Ltd. ++ 13F, No.207-2, Sec#3, Beixin Rd., Xindian District. ++ New Taipei Taiwan 23146 + TW + +-10-54-D2 (hex) Raylogic Control Systems Private Limited +-400000-4FFFFF (base 16) Raylogic Control Systems Private Limited +- Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West +- Mumbai Maharashtra 400054 +- IN ++1C-59-74 (hex) Topway Global Technology Limited ++800000-8FFFFF (base 16) Topway Global Technology Limited ++ Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong ++ Hong Kong Hong Kong 999077 ++ HK ++ ++18-A5-9C (hex) Annapurna labs ++D00000-DFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++18-A5-9C (hex) BMC Messsysteme GmbH ++E00000-EFFFFF (base 16) BMC Messsysteme GmbH ++ Haupstr. 21 ++ Maisach 82216 ++ DE ++ ++1C-59-74 (hex) Jiangsu Welm Technology Co.,Ltd ++300000-3FFFFF (base 16) Jiangsu Welm Technology Co.,Ltd ++ No.158 Jianghai WestRoad,Haian ++ Haian Jiangsu 226100 ++ CN ++ ++1C-59-74 (hex) Logical Infrastructure PTY LTD ++100000-1FFFFF (base 16) Logical Infrastructure PTY LTD ++ unit 2, 8 Carbine way ++ Mornington Victoria 3931 ++ AU ++ ++1C-59-74 (hex) Shenzhen Shi Fang Communication Technology Co., Ltd ++500000-5FFFFF (base 16) Shenzhen Shi Fang Communication Technology Co., Ltd ++ 601-6 Mitehuapujing No.9 Jinxiu Mid Road Longtian Street Pingshan Distinct ++ Shenzhen Guangdong 518118 ++ CN ++ ++1C-59-74 (hex) Lynxi Technologies Co.,Ltd. ++700000-7FFFFF (base 16) Lynxi Technologies Co.,Ltd. ++ RM 801, 8/F, No. 67 North 4th Ring West Road ++ Beijing Beijing 100084 ++ CN ++ ++6C-15-24 (hex) D-HOME SMAART ++900000-9FFFFF (base 16) D-HOME SMAART ++ 8, rue Edouard Herriot ++ Marigny le Châtel 10350 ++ FR ++ ++6C-15-24 (hex) Forcite Helmet Systems Pty Ltd ++300000-3FFFFF (base 16) Forcite Helmet Systems Pty Ltd ++ 35-39 Bourke Road, Alexandria ++ Sydney NSW 2015 ++ AU ++ ++6C-15-24 (hex) Kunshan Abram Software Technology Co.,Ltd. ++600000-6FFFFF (base 16) Kunshan Abram Software Technology Co.,Ltd. ++ Room 704, No. 666, Changjiang South Road ++ Kunshan Jiangsu 215300 ++ CN ++ ++6C-15-24 (hex) Magicyo Technology CO., LTD. ++400000-4FFFFF (base 16) Magicyo Technology CO., LTD. ++ 7F, Tower A, YuZhou Building, No.78 North Keyuan ++ Shenzhen Nanshan District 518057 ++ CN ++ ++70-50-E7 (hex) shenzhen newbridge communication equipment CO.,LTD ++C00000-CFFFFF (base 16) shenzhen newbridge communication equipment CO.,LTD ++ 5 / F, No. 1 building, Jinli Industrial Park, No. 1, LanJin Sixth Road, Nanbu community, Longtian street, Pingshan District, Shenzhen ++ SHENZHEN GUANGDONG 518000 ++ CN ++ ++70-50-E7 (hex) Quantumdoor Technologies, Inc. ++400000-4FFFFF (base 16) Quantumdoor Technologies, Inc. ++ 1st Floor 108-1,Buiding5,East Districe,No.10 Xibeiwang East Road,haidian Districe, ++ beijing 102629 ++ CN ++ ++80-02-F4 (hex) Shenzhen Suanzi Technology Co., Ltd ++300000-3FFFFF (base 16) Shenzhen Suanzi Technology Co., Ltd ++ Room 207, Research Building, Tsinghua Information Port, No.1, Songpingshan New East Road, Nanshan District ++ Shenzhen Guangdong 518057 ++ CN + + 20-85-93 (hex) UNILUMIN GROUP CO.,LTD + 300000-3FFFFF (base 16) UNILUMIN GROUP CO.,LTD +@@ -14333,18 +14687,204 @@ A00000-AFFFFF (base 16) Pavana Technologies JSC. + Vinh Phuc 35000 + VN + +-10-54-D2 (hex) LUXSHARE-ICT Co., Ltd. +-C00000-CFFFFF (base 16) LUXSHARE-ICT Co., Ltd. +- 1F, No. 22, Lane 35, Jihu Road, Neihu district +- Taipei City Taiwan 114754 ++10-54-D2 (hex) COSMO AIOT TECHNOLOGY CO LTD ++E00000-EFFFFF (base 16) COSMO AIOT TECHNOLOGY CO LTD ++ Haier Information Industrial Complex, No.1 HaierRoad ++ Qingdao Shandong 266101 ++ CN ++ ++10-54-D2 (hex) GIPS Technology Co., Ltd. ++000000-0FFFFF (base 16) GIPS Technology Co., Ltd. ++ Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist. ++ Tainan City TAIWAN 701024 + TW + ++10-54-D2 (hex) Embion B.V. ++A00000-AFFFFF (base 16) Embion B.V. ++ Biestraat 1b ++ Gilze Noord-Brabant 5126NH ++ NL ++ + 10-54-D2 (hex) Little Array Technology (Shenzhen) Co., Ltd. + 300000-3FFFFF (base 16) Little Array Technology (Shenzhen) Co., Ltd. + Unit 215, 2F, A1, Zhimei Industry Park, Fuhai Industrial Zone B2, Fuyong Street, Baoan District + Shenzhen Guangdong 518103 + CN + ++10-54-D2 (hex) LUXSHARE-ICT Co., Ltd. ++C00000-CFFFFF (base 16) LUXSHARE-ICT Co., Ltd. ++ 1F, No. 22, Lane 35, Jihu Road, Neihu district ++ Taipei City Taiwan 114754 ++ TW ++ ++0C-86-29 (hex) SHENZHEN YINGMU TECHNOLOGY.,LTD ++C00000-CFFFFF (base 16) SHENZHEN YINGMU TECHNOLOGY.,LTD ++ 8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District, ++ Shenzhen 518000 ++ CN ++ ++0C-86-29 (hex) Nipron Co.,Ltd ++A00000-AFFFFF (base 16) Nipron Co.,Ltd ++ 1-3-30 Nishinagasucho ++ Amagasaki-shi Hyogo-ken 660-0805 ++ JP ++ ++0C-86-29 (hex) FX TECHNOLOGY LIMITED ++E00000-EFFFFF (base 16) FX TECHNOLOGY LIMITED ++ 38a High Street, Northwood ++ Middlesex - HA6 1BN ++ GB ++ ++6C-93-08 (hex) LightnTec GmbH ++300000-3FFFFF (base 16) LightnTec GmbH ++ Haid-und-Neu-Strasse 7 ++ Karlsruhe 76131 ++ DE ++ ++30-43-D7 (hex) Sprocomm Technologies Co., Ltd.Guangming Branch ++600000-6FFFFF (base 16) Sprocomm Technologies Co., Ltd.Guangming Branch ++ Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, ++ Shenzhen 518000 ++ CN ++ ++6C-93-08 (hex) Shenzhen haichangxing Technology Co., Ltd. ++C00000-CFFFFF (base 16) Shenzhen haichangxing Technology Co., Ltd. ++ Room 3102, 31 / F, Wen an Center, Wenjin Square, Luohu ++ SHENZHEN GUANGZHOU 518000 ++ CN ++ ++30-43-D7 (hex) Shenzhen juduoping Technology Co.,Ltd ++100000-1FFFFF (base 16) Shenzhen juduoping Technology Co.,Ltd ++ Baoan Xin'an Streat ++ Shenzhen 002052 ++ CN ++ ++30-43-D7 (hex) Guangdong Hongqin Telecom Technology Co. Ltd. ++E00000-EFFFFF (base 16) Guangdong Hongqin Telecom Technology Co. Ltd. ++ 10 Keyuan Road, Songshan Lake ++ Dongguan Guangdong 523808 ++ CN ++ ++38-1F-26 (hex) Bosch Automotive Electronics India Pvt. Ltd. ++300000-3FFFFF (base 16) Bosch Automotive Electronics India Pvt. Ltd. ++ Naganathapura ++ Bengaluru Karnataka 560100 ++ IN ++ ++18-A5-9C (hex) ePower Network Solution Co., Ltd. ++700000-7FFFFF (base 16) ePower Network Solution Co., Ltd. ++ No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., ++ New Taipei City , 242063 ++ TW ++ ++18-A5-9C (hex) Erba Lachema s.r.o. ++A00000-AFFFFF (base 16) Erba Lachema s.r.o. ++ Karasek1d ++ Brno 62100 ++ CZ ++ ++1C-59-74 (hex) Shenzhen Hanshine Technology Co.Ltd. ++000000-0FFFFF (base 16) Shenzhen Hanshine Technology Co.Ltd. ++ Buiding 2 ,row 3,number 2 industrail zone,yulv community,Yutang street ++ Shenzhen Guangdong 518000 ++ CN ++ ++1C-59-74 (hex) Chongqing Taishan Cable Co., Ltd ++200000-2FFFFF (base 16) Chongqing Taishan Cable Co., Ltd ++ 17 Shiyan Avenue, Yufengshan Town, Yubei District, ++ Chongqing 400000 ++ CN ++ ++6C-15-24 (hex) Telsonic AG ++100000-1FFFFF (base 16) Telsonic AG ++ Industriestrasse 6b ++ Bronschhofen St.Gallen 9552 ++ CH ++ ++18-A5-9C (hex) Beijing QS Medical Technology Co., Ltd. ++300000-3FFFFF (base 16) Beijing QS Medical Technology Co., Ltd. ++ Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area ++ Beijing 100176 ++ CN ++ ++6C-15-24 (hex) SYMLINK CORPORATION ++D00000-DFFFFF (base 16) SYMLINK CORPORATION ++ 6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park ++ Taipei 11492 ++ TW ++ ++C4-A1-0E (hex) Clinton Electronics Corporation ++B00000-BFFFFF (base 16) Clinton Electronics Corporation ++ 6701 Clinton Road ++ Loves Park IL 61111 ++ US ++ ++C4-A1-0E (hex) Wistron InfoComn (Kunshan) Co., Ltd. ++200000-2FFFFF (base 16) Wistron InfoComn (Kunshan) Co., Ltd. ++ No.88 Hongyan Road, Kunshan Economic & Technological Development Zone ++ Kunshan Jiangsu 215300 ++ CN ++ ++C4-A1-0E (hex) Guangzhou South Satellite Navigation Instrument Co., Ltd. ++700000-7FFFFF (base 16) Guangzhou South Satellite Navigation Instrument Co., Ltd. ++ Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District, ++ Guangzhou GuangDong 510663 ++ CN ++ ++6C-15-24 (hex) Motium Pty Ltd ++700000-7FFFFF (base 16) Motium Pty Ltd ++ 11/4 Brodie Hall Drive, ++ Bentley Western Australia 6102 ++ AU ++ ++6C-15-24 (hex) AEC s.r.l. ++E00000-EFFFFF (base 16) AEC s.r.l. ++ Via Zambon, 33/A ++ Creazzo Vicenza 36051 ++ IT ++ ++70-50-E7 (hex) Shenzhen C & D Electronics Co., Ltd. ++000000-0FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd. ++ 9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District ++ ShenZhen GuangDong 518000 ++ CN ++ ++70-50-E7 (hex) Beijing Shannoncyber Technology Co.,Ltd ++B00000-BFFFFF (base 16) Beijing Shannoncyber Technology Co.,Ltd ++ 913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District ++ beijing beijing 100029 ++ CN ++ ++C4-A1-0E (hex) Harbour Cross Technology Ltd ++400000-4FFFFF (base 16) Harbour Cross Technology Ltd ++ Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang, ++ Hong Kong China 000000 ++ HK ++ ++70-50-E7 (hex) Annapurna labs ++100000-1FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++80-02-F4 (hex) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++900000-9FFFFF (base 16) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++ SECOND FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA ++ XIAMEN 361106 ++ CN ++ ++80-02-F4 (hex) PassiveLogic ++A00000-AFFFFF (base 16) PassiveLogic ++ 6405 S 3000 E, Suite 300 ++ Holladay UT 84121 ++ US ++ ++80-02-F4 (hex) Sichuan Fanyi Technology Co. Ltd. ++500000-5FFFFF (base 16) Sichuan Fanyi Technology Co. Ltd. ++ No. 1707, Unit 1, Building 1, 888, Middle Section of Yizhou Avenue, Gaoxin District ++ Chengdu Sichuan 650000 ++ CN ++ + 4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd. + 600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd. + 22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone +@@ -17420,12 +17960,6 @@ A00000-AFFFFF (base 16) Winsonic Electronics Co., Ltd. + Suwon-si Gyeonggi-do 443-270 + KR + +-7C-70-BC (hex) Ametek VIS +-A00000-AFFFFF (base 16) Ametek VIS +- 287 27 Road +- Grand Junction CO 81503 +- US +- + BC-34-00 (hex) Parlay Labs dba Highfive + C00000-CFFFFF (base 16) Parlay Labs dba Highfive + 471 Emerson St. +@@ -19067,12 +19601,6 @@ DC-36-43 (hex) Hangzhou Chingan Tech Co., Ltd. + hangzhou zhejiang 310000 + CN + +-08-26-AE (hex) Flextronics International Kft. +-A00000-AFFFFF (base 16) Flextronics International Kft. +- Zrínyi Miklós str. 38. +- Zalaegerszeg 8900 +- HU +- + 08-26-AE (hex) Wuhan Tianyu Information Industry Co., Ltd. + 000000-0FFFFF (base 16) Wuhan Tianyu Information Industry Co., Ltd. + Tianyu Building, S.&T.Park, Huazhong University of S.&T.,East Lake Development Zone +@@ -19109,12 +19637,6 @@ DC-36-43 (hex) Hefei EA Excelsior Information Security Co., Ltd. + Wijk en Aalburg 4261 LN + NL + +-10-54-D2 (hex) ComNav Technology Ltd. +-200000-2FFFFF (base 16) ComNav Technology Ltd. +- 3 floor Building 2,No.618 Chengliu Middle RD. Malu town, +- Shanghai 200000 +- CN +- + 10-54-D2 (hex) Shenzhen Dinstech Technology Co.,Ltd. + B00000-BFFFFF (base 16) Shenzhen Dinstech Technology Co.,Ltd. + Shenzhen Qianhai Shenzhen-Hong Kong Cooperation Zone Nanshan Street Linhai Avenue No. 59 Seaside Avenue 3rd Floor D378, Port Building, Shipping Center +@@ -19127,6 +19649,186 @@ D00000-DFFFFF (base 16) Sun wealth technology corporation limited + shenzhen Guang dong 518000 + CN + ++10-54-D2 (hex) ComNav Technology Ltd. ++200000-2FFFFF (base 16) ComNav Technology Ltd. ++ 3 floor Building 2,No.618 Chengliu Middle RD. Malu town, ++ Shanghai 200000 ++ CN ++ ++10-54-D2 (hex) Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd. ++100000-1FFFFF (base 16) Jiangxi Ofilm&Jvneng IoT Tech Co., Ltd. ++ Building 2 and 3,Intelligent Technology Industrial Park,high-tech industrial Development Zone, ++ Yingtan 335000 ++ CN ++ ++0C-86-29 (hex) BADA SYSTEM co., Ltd ++200000-2FFFFF (base 16) BADA SYSTEM co., Ltd ++ Saemalro 99 Kumsuk building 501 ++ Seoul 05808 ++ KR ++ ++0C-86-29 (hex) HagerEnergy GmbH ++700000-7FFFFF (base 16) HagerEnergy GmbH ++ Karlstrasse 5 ++ Osnabrueck 49074 ++ DE ++ ++6C-93-08 (hex) Shenzhen EZpro Sound & Light Technology Co., Ltd. ++B00000-BFFFFF (base 16) Shenzhen EZpro Sound & Light Technology Co., Ltd. ++ E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District ++ shenz guangdong 518055 ++ CN ++ ++30-43-D7 (hex) Xiaoniu network technology (Shanghai) Co., Ltd. ++C00000-CFFFFF (base 16) Xiaoniu network technology (Shanghai) Co., Ltd. ++ Room 706, building 3, no.20 east road, jingan district. ++ Shang hai 200040 ++ CN ++ ++6C-93-08 (hex) Estelar s.r.o ++400000-4FFFFF (base 16) Estelar s.r.o ++ Palackého 744/1 ++ Holešov ?eská republika 76901 ++ CZ ++ ++08-26-AE (hex) Flextronics International Kft ++A00000-AFFFFF (base 16) Flextronics International Kft ++ Zrínyi Miklós str. 38. ++ Zalaegerszeg 8900 ++ HU ++ ++38-1F-26 (hex) HWACHANG CORPORATION ++D00000-DFFFFF (base 16) HWACHANG CORPORATION ++ 90, NONGGONGANJI-GIL ++ SOCHO-SI 24899 ++ KR ++ ++38-1F-26 (hex) Airmaster A/S ++400000-4FFFFF (base 16) Airmaster A/S ++ Industrivej 59 ++ Aars 9600 ++ DK ++ ++18-A5-9C (hex) Actiontec Electronics Inc. ++200000-2FFFFF (base 16) Actiontec Electronics Inc. ++ 2445 Augustine Dr #501 ++ Santa Clara CA 95054 ++ US ++ ++18-A5-9C (hex) IT-1 ++400000-4FFFFF (base 16) IT-1 ++ 260, Changnyong-daero ++ Yeongtong-gu, Suwon-si Gyeonggi-do 16229 ++ KR ++ ++18-A5-9C (hex) Residence Control Ltd ++800000-8FFFFF (base 16) Residence Control Ltd ++ Cvetan Vuchkov 7 ++ Sofia Sofia 1614 ++ BG ++ ++7C-70-BC (hex) Motec GmbH ++A00000-AFFFFF (base 16) Motec GmbH ++ 287 27 Road ++ Grand Junction CO 81503 ++ US ++ ++1C-59-74 (hex) Syntax technology(tianjin)Co.,LTD ++400000-4FFFFF (base 16) Syntax technology(tianjin)Co.,LTD ++ Room 510-5,Comprehensive Office Building,Carpet Industrial Park,Wuqing District ++ Tianjin Tianjin 301700 ++ CN ++ ++1C-59-74 (hex) Beijing Flintec Electronic Technology Co.,Ltd. ++B00000-BFFFFF (base 16) Beijing Flintec Electronic Technology Co.,Ltd. ++ Room 102,Building No.6,China Technology Venture Park,No.8,LaiGuangYing West Road,ChaoYang District ++ Beijing Beijing 100012 ++ CN ++ ++1C-59-74 (hex) Shanghai Laisi Information Technology Co.,Ltd ++900000-9FFFFF (base 16) Shanghai Laisi Information Technology Co.,Ltd ++ 1001,21#,No.1158 Zhongxin RD,Songjiang district Shanghai ++ shanghai 201614 ++ CN ++ ++6C-15-24 (hex) Shenzhen Electron Technology Co., LTD. ++500000-5FFFFF (base 16) Shenzhen Electron Technology Co., LTD. ++ Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District ++ Shenzhen Guangzhou 51800 ++ CN ++ ++6C-15-24 (hex) ShenZhen Chainway Information Technology Co., Ltd. ++800000-8FFFFF (base 16) ShenZhen Chainway Information Technology Co., Ltd. ++ 9F Building2, Phase2, Gaoxinqi Industrial Park , Bao'an District ++ ShenZhen GuangDong 518102 ++ CN ++ ++6C-15-24 (hex) Annapurna labs ++B00000-BFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++1C-59-74 (hex) Square Inc. ++600000-6FFFFF (base 16) Square Inc. ++ 1455 Market St. ++ San Francisco CA 94103 ++ US ++ ++6C-15-24 (hex) DEFA AS ++000000-0FFFFF (base 16) DEFA AS ++ Blingsmovegen 30 ++ Nesbyen 3540 ++ NO ++ ++6C-15-24 (hex) Linkplay ++200000-2FFFFF (base 16) Linkplay ++ 891 W. Washington Ave. ++ Sunnyvale CA 94086 ++ US ++ ++6C-15-24 (hex) CORAL-TAIYI ++C00000-CFFFFF (base 16) CORAL-TAIYI ++ 8F-3, No. 200, Gangqian Rd, Neihu District ++ Taipei City 114 ++ TW ++ ++C4-A1-0E (hex) O-NET Industrial Technologies (Shenzhen) Limited ++500000-5FFFFF (base 16) O-NET Industrial Technologies (Shenzhen) Limited ++ 501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District ++ Shenzhen Guangdong 518118 ++ CN ++ ++70-50-E7 (hex) Nippon Pulse America, Inc. ++600000-6FFFFF (base 16) Nippon Pulse America, Inc. ++ 4 Corporate Drive ++ Radford VA 24141-5100 ++ US ++ ++C4-A1-0E (hex) Focus-on ++C00000-CFFFFF (base 16) Focus-on ++ Kerkeplaat 12 ++ Dordrecht 3313LC ++ NL ++ ++70-50-E7 (hex) Eta Compute Inc. ++D00000-DFFFFF (base 16) Eta Compute Inc. ++ 182 S. Murphy Ave ++ Sunnyvale CA 94086 ++ US ++ ++80-02-F4 (hex) Sichuan lookout environment protection technology co.,Ltd ++100000-1FFFFF (base 16) Sichuan lookout environment protection technology co.,Ltd ++ No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone ++ Chengdu Sichuan 610052 ++ CN ++ ++80-02-F4 (hex) Wuhan Glory Road Intelligent Technology Co., Ltd. ++C00000-CFFFFF (base 16) Wuhan Glory Road Intelligent Technology Co., Ltd. ++ 18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone ++ Wuhan Hubei 430073 ++ CN ++ + 20-85-93 (hex) Great Lite International + 700000-7FFFFF (base 16) Great Lite International + 11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist., +@@ -22970,12 +23672,6 @@ CC-4F-5C (hex) Dtrovision + Fair Lawn NJ 07410 + US + +-CC-4F-5C (hex) Buttons (Beijing) Technology Limited +-E00000-EFFFFF (base 16) Buttons (Beijing) Technology Limited +- Room 202, Floor 2, Building No. 3, No. 9 Xiaoying Road, Chaoyang District +- Beijing 100101 +- CN +- + CC-4F-5C (hex) AZ-TECHNOLOGY SDN BHD + A00000-AFFFFF (base 16) AZ-TECHNOLOGY SDN BHD + A108 & A109 BLOCK A KELANA BUSINESS CENTRE NO: 97 JALAN SS7/2 KELANA JAYA +@@ -23180,12 +23876,6 @@ A0-02-4A (hex) Vitec Imaging Solutions Spa + Cassola Vicenza 36022 + IT + +-78-D4-F1 (hex) Cartender +-100000-1FFFFF (base 16) Cartender +- Via della Meccanica 2a +- Padova PD 35127 +- IT +- + 78-D4-F1 (hex) Jiangsu byzoro intelligent technology Co.,Ltd + B00000-BFFFFF (base 16) Jiangsu byzoro intelligent technology Co.,Ltd + Room 301, Building D, Yunmi City, No.19 Ningshuang Road, Yuhuatai District +@@ -23923,3 +24613,201 @@ E00000-EFFFFF (base 16) CEL Terminus (Shanghai) Information Technologies Co + Matam Scientific Industries Center, Building 8.2 + Mail box 15123 Haifa 3508409 + IL ++ ++10-54-D2 (hex) Lanao Communication Technology Limited ++600000-6FFFFF (base 16) Lanao Communication Technology Limited ++ #B2, Zhongbaotong Creative Park Changfa West Road No.34 Bantian ++ Shenzhen 518029 ++ CN ++ ++0C-86-29 (hex) Ag Express Electronics ++400000-4FFFFF (base 16) Ag Express Electronics ++ 6280 NE 14th St ++ Des Moines IA 50313 ++ US ++ ++6C-93-08 (hex) Liberty AV Solutions ++700000-7FFFFF (base 16) Liberty AV Solutions ++ 1490 Garden of the Gods Road ++ Colorado Springs CO 80907 ++ US ++ ++6C-93-08 (hex) Uconfree technology(shenzhen)limited ++600000-6FFFFF (base 16) Uconfree technology(shenzhen)limited ++ Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China ++ SHENZHEN 518111 ++ CN ++ ++0C-86-29 (hex) Annapurna labs ++300000-3FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++6C-93-08 (hex) Hangzhou Risco System Co.,Ltd ++800000-8FFFFF (base 16) Hangzhou Risco System Co.,Ltd ++ No. 19, Naxian street, Liangzhu street, Yuhang District ++ Hangzhou City Zhejiang Province 31000 ++ CN ++ ++30-43-D7 (hex) Bodhi ++A00000-AFFFFF (base 16) Bodhi ++ 3150 W. Prospect Road, Suite 330 ++ Fort Lauderdale FL 33309 ++ US ++ ++6C-93-08 (hex) ZHEJIANG XIAN DA Environmental Technology Co., Ltd ++200000-2FFFFF (base 16) ZHEJIANG XIAN DA Environmental Technology Co., Ltd ++ Room 103,1st F,unit A,Buliding 3,No. 8,Xiyuan 1st Road,Sandun Town,Xihu District ++ HANGZHOU ZHEJIANG 310000 ++ CN ++ ++30-43-D7 (hex) Kesu (Shanghai) Electronic Technology Co., Ltd ++800000-8FFFFF (base 16) Kesu (Shanghai) Electronic Technology Co., Ltd ++ 3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District ++ Shanghai 202150 ++ CN ++ ++30-43-D7 (hex) PK Solutions LLC ++900000-9FFFFF (base 16) PK Solutions LLC ++ 10811 E Harry ++ Wichita KS 67207 ++ US ++ ++30-43-D7 (hex) FIBERME COMMUNICATIONS LLC ++400000-4FFFFF (base 16) FIBERME COMMUNICATIONS LLC ++ 1749 Old Meadow Rd. ++ McLean VA 22102 ++ US ++ ++38-1F-26 (hex) NOITAC sp. z o.o. sp.k. ++600000-6FFFFF (base 16) NOITAC sp. z o.o. sp.k. ++ Szlak 28/3 ++ Kraków 31-153 ++ PL ++ ++38-1F-26 (hex) JAESUNG INFORMATION & COMMUNICATION CO.LTD ++000000-0FFFFF (base 16) JAESUNG INFORMATION & COMMUNICATION CO.LTD ++ 41-69, POWOL SAEMALGIL, YANG YANG-EUP ++ YANG YANG GUN 25017 ++ KR ++ ++38-1F-26 (hex) Deutronic Elektronik GmbH ++B00000-BFFFFF (base 16) Deutronic Elektronik GmbH ++ Deutronicstraße 5 ++ Adlkofen Bayern 84166 ++ DE ++ ++38-1F-26 (hex) Annapurna labs ++E00000-EFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++38-1F-26 (hex) RCE systems s.r.o. ++700000-7FFFFF (base 16) RCE systems s.r.o. ++ Svatopluka Cecha 2008/1d ++ Brno CR 61200 ++ CZ ++ ++38-1F-26 (hex) Sercomm Corporation. ++A00000-AFFFFF (base 16) Sercomm Corporation. ++ 3F,No.81,Yu-Yih Rd.,Chu-Nan Chen ++ Miao-Lih Hsuan 115 ++ TW ++ ++30-43-D7 (hex) Motec GmbH ++B00000-BFFFFF (base 16) Motec GmbH ++ 287 27 Road ++ Grand Junction CO 81503 ++ US ++ ++CC-4F-5C (hex) Beijing Techao Weijia Technology Limited ++E00000-EFFFFF (base 16) Beijing Techao Weijia Technology Limited ++ Room 202, Floor 2, Building No. 3, No. 9 Xiaoying Road, Chaoyang District ++ Beijing 100101 ++ CN ++ ++1C-59-74 (hex) Council Rock ++A00000-AFFFFF (base 16) Council Rock ++ 11 Centre Park ++ Rochester 14614 ++ US ++ ++C4-A1-0E (hex) Hainan World Electronic Science and Techology Co.,Ltd ++600000-6FFFFF (base 16) Hainan World Electronic Science and Techology Co.,Ltd ++ Room 1502,15th Floor,Building 20,NO.487 Tianlin Road,Shanghai,200233 China ++ Shanghai Shanghai 200233 ++ CN ++ ++C4-A1-0E (hex) Jiangsu Perceive World Technology Co.,Ltd. ++A00000-AFFFFF (base 16) Jiangsu Perceive World Technology Co.,Ltd. ++ 4-5F,Hengsheng Science Park 70#,Zhonghui Ave 1588#,HuiShan District,Wuxi,Jiangsu,China ++ Wu xi Jiangsu 214181 ++ CN ++ ++78-D4-F1 (hex) Silla Industries ++100000-1FFFFF (base 16) Silla Industries ++ Via della Meccanica 2a ++ Padova PD 35127 ++ IT ++ ++18-A5-9C (hex) Cuman ++100000-1FFFFF (base 16) Cuman ++ Al-Farabi 97/1 ++ Nur-Sultan 010000 ++ KZ ++ ++C4-A1-0E (hex) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD ++900000-9FFFFF (base 16) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD ++ No.211 Tiangu 8th Road, High-tech Zone ++ Xi 'an Shaanxi 710065 ++ CN ++ ++6C-15-24 (hex) STERIS ++A00000-AFFFFF (base 16) STERIS ++ Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road ++ Bishops Stortford herts CM23 5GZ ++ GB ++ ++C4-A1-0E (hex) Alio, Inc ++E00000-EFFFFF (base 16) Alio, Inc ++ 10901 W. 120th Ave, Suite 380 ++ Bloomfield CO 80021 ++ US ++ ++70-50-E7 (hex) Wall Box Chargers, S.L. ++500000-5FFFFF (base 16) Wall Box Chargers, S.L. ++ Paseo Castellana 95, 28 floor ++ Madrid Madrid 28046 ++ ES ++ ++70-50-E7 (hex) Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company ++A00000-AFFFFF (base 16) Guangzhou Tianhe High Tech Industrial Development Zone Zhongsheng Electrical Limited Company ++ D01, Zone D, No. 6 (Yishun), Huangcun North Road, Tianhe District ++ Guangzhou 510660 ++ CN ++ ++70-50-E7 (hex) Electronic's Time SRL ++200000-2FFFFF (base 16) Electronic's Time SRL ++ Via Madonna Piccola 32R/Q ++ Martina Franca Taranto 74015 ++ IT ++ ++70-50-E7 (hex) Yoctopuce ++700000-7FFFFF (base 16) Yoctopuce ++ Route de Cartigny 33 ++ Cartigny 1236 ++ CH ++ ++70-50-E7 (hex) Skychers Creations ShenZhen Limited ++300000-3FFFFF (base 16) Skychers Creations ShenZhen Limited ++ Room 907A, 9/F, Block T2, FongDa City, Longjing Village, Longzhu Avenue, Nanshan District ++ Shenzhen Guangdong 518073 ++ CN ++ ++70-50-E7 (hex) Elastics.cloud ++900000-9FFFFF (base 16) Elastics.cloud ++ 1730 North First Street, 5th Floor ++ San Jose CA 95112 ++ US +diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt +index d6fd58e50a..6a21795559 100644 +--- a/hwdb.d/ma-small.txt ++++ b/hwdb.d/ma-small.txt +@@ -5687,6 +5687,12 @@ F74000-F74FFF (base 16) GE AVIC Civil Avionics Systems Company Limited + Shanghai 200241 + CN + ++8C-1F-64 (hex) Shenzhen zhushida Technology lnformation Co.,Ltd ++A5D000-A5DFFF (base 16) Shenzhen zhushida Technology lnformation Co.,Ltd ++ 1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, ++ SHENZHEN 518000 ++ CN ++ + 8C-1F-64 (hex) EnviroNode IoT Solutions + 1AF000-1AFFFF (base 16) EnviroNode IoT Solutions + 4 Malvern Avenue +@@ -5699,6 +5705,204 @@ F74000-F74FFF (base 16) GE AVIC Civil Avionics Systems Company Limited + Weyarn Bayern 83629 + DE + ++8C-1F-64 (hex) Gateview Technologies ++B7B000-B7BFFF (base 16) Gateview Technologies ++ 104 White St #201 ++ Wake Forest 27587 ++ US ++ ++8C-1F-64 (hex) Suntech Engineering ++7D3000-7D3FFF (base 16) Suntech Engineering ++ 30, Gukgasandan-daero 34-gil, Guji-myeon, Dalseong-gun, Daegu, Republic of Korea ++ Daegu 43008 ++ KR ++ ++8C-1F-64 (hex) Ascon Tecnologic S.r.l. ++FF6000-FF6FFF (base 16) Ascon Tecnologic S.r.l. ++ via Indipendenza, 56 ++ Vigevano PV 27029 ++ IT ++ ++8C-1F-64 (hex) Delta Computers LLC. ++59F000-59FFFF (base 16) Delta Computers LLC. ++ Office 22/10, room part 22, room IV, floor 3, 41A, 3-rd Parkovaya str. ++ Moscow 105425 ++ RU ++ ++8C-1F-64 (hex) Newtec A/S ++BF0000-BF0FFF (base 16) Newtec A/S ++ Stærmosegårdsvej 18 ++ Odense SV Region Syd 5230 ++ DK ++ ++8C-1F-64 (hex) Onto Innovation ++FBA000-FBAFFF (base 16) Onto Innovation ++ 16 Jonspin rd ++ Wilmington MA 01887 ++ US ++ ++8C-1F-64 (hex) Becton Dickinson ++775000-775FFF (base 16) Becton Dickinson ++ 7 Loveton Circle ++ Sparks MD 21152 ++ US ++ ++8C-1F-64 (hex) FIBERME COMMUNICATIONS LLC ++C68000-C68FFF (base 16) FIBERME COMMUNICATIONS LLC ++ 1749 Old Meadow Rd. ++ McLean VA 22102 ++ US ++ ++8C-1F-64 (hex) TechArgos ++BFB000-BFBFFF (base 16) TechArgos ++ Nizhnyaya Krasnoselskaya Str. 35-64 ++ Moscow 105066 ++ RU ++ ++8C-1F-64 (hex) DAVE SRL ++967000-967FFF (base 16) DAVE SRL ++ VIA TALPONEDO 29/A ++ PORCIA PORDENONE 330850 ++ IT ++ ++8C-1F-64 (hex) e.kundenservice Netz GmbH ++855000-855FFF (base 16) e.kundenservice Netz GmbH ++ Steindamm 100 ++ Hamburg 20099 ++ DE ++ ++8C-1F-64 (hex) Meiryo Denshi Corp. ++EB5000-EB5FFF (base 16) Meiryo Denshi Corp. ++ 38-23 higashi maeda ++ Nishin City Aichi 470-0124 ++ JP ++ ++8C-1F-64 (hex) Baker Hughes EMEA ++40E000-40EFFF (base 16) Baker Hughes EMEA ++ Sensing House, Shannon Free Zone East ++ Shannon Co. Clare V14 V99 ++ IE ++ ++8C-1F-64 (hex) Calnex Solutions plc ++703000-703FFF (base 16) Calnex Solutions plc ++ Oracle Campus ++ Linlithgow West Lothian EH49 7LR ++ GB ++ ++8C-1F-64 (hex) LLC NTPC ++660000-660FFF (base 16) LLC NTPC ++ Kharkovsky alley 36g, office room 1 ++ Belgorod 308012 ++ RU ++ ++8C-1F-64 (hex) Renukas Castle Hard- and Software ++4E5000-4E5FFF (base 16) Renukas Castle Hard- and Software ++ Renukas Castle, 35th Ward, Kalyan Nagar, Ring Road, near Lions School ++ Gadag Karnataka 582103 ++ IN ++ ++8C-1F-64 (hex) Tesat-Spacecom GmbH & Co. KG ++F27000-F27FFF (base 16) Tesat-Spacecom GmbH & Co. KG ++ Gerberstrasse 49 ++ Backnang 71522 ++ DE ++ ++8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme ++059000-059FFF (base 16) MB connect line GmbH Fernwartungssysteme ++ Winnettener Straße 6 ++ Dinkelsbuehl Bavaria 91550 ++ DE ++ ++8C-1F-64 (hex) JBF ++F45000-F45FFF (base 16) JBF ++ via goretta 90 ++ mappano torino 10079 ++ IT ++ ++8C-1F-64 (hex) REFU Storage System GmbH ++53B000-53BFFF (base 16) REFU Storage System GmbH ++ Marktstraße 185 ++ Pfullingen 72793 ++ DE ++ ++8C-1F-64 (hex) DEUTA-WERKE GmbH ++883000-883FFF (base 16) DEUTA-WERKE GmbH ++ Paffrather Str. 140 ++ Bergisch Gladbach North Rhine-Westphalia 51465 ++ DE ++ ++8C-1F-64 (hex) Micro Electroninc Products ++765000-765FFF (base 16) Micro Electroninc Products ++ TT Vasumweg 150 ++ Amsterdam 1033 SH ++ NL ++ ++8C-1F-64 (hex) Logical Product ++622000-622FFF (base 16) Logical Product ++ 2-25-5,matoba,minamiku ++ Fukuoka Fukuoka 811-1314 ++ JP ++ ++8C-1F-64 (hex) Dan Smith LLC ++4D6000-4D6FFF (base 16) Dan Smith LLC ++ 4638 Cameron Ridge Drive, Apt 138 ++ Indianapolis IN 46240 ++ US ++ ++8C-1F-64 (hex) INVIXIUM ACCESS INC ++274000-274FFF (base 16) INVIXIUM ACCESS INC ++ 111 Gordon Baker Road, Suite #300 ++ Toronto Ontario M2H 3R1 ++ CA ++ ++8C-1F-64 (hex) Sicon srl ++B3B000-B3BFFF (base 16) Sicon srl ++ Via Sila 1/3 ++ Isola Vicentina Vicenza 36033 ++ IT ++ ++8C-1F-64 (hex) Sanchar Telesystems limited ++958000-958FFF (base 16) Sanchar Telesystems limited ++ A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI ++ New Delhi Delhi 110020 ++ IN ++ ++8C-1F-64 (hex) Tantronic AG ++1EF000-1EFFFF (base 16) Tantronic AG ++ Gewerbering 12 ++ Wohlen AG 5610 ++ CH ++ ++8C-1F-64 (hex) Tunstall A/S ++F2C000-F2CFFF (base 16) Tunstall A/S ++ Niels Bohrs vej 42 ++ Stilling Skanderborg 8660 ++ DK ++ ++8C-1F-64 (hex) Bunka Shutter Co., Ltd. ++0B0000-0B0FFF (base 16) Bunka Shutter Co., Ltd. ++ 644-1 Tenjingoe,Ooaza-Kamiishizuka ++ Oyama Tochigi 323-0063 ++ JP ++ ++8C-1F-64 (hex) Rodgers Instruments US LLC ++A42000-A42FFF (base 16) Rodgers Instruments US LLC ++ 6497 NE Croeni Avenue ++ Hillsboro 97124 ++ US ++ ++8C-1F-64 (hex) Potter Electric Signal Company ++316000-316FFF (base 16) Potter Electric Signal Company ++ 1609 Park 370 Place ++ Hazelwood MO 63042 ++ US ++ ++8C-1F-64 (hex) Diffraction Limited ++8CF000-8CFFFF (base 16) Diffraction Limited ++ 59 Grenfell Crescent, Unit B ++ Ottawa ON K2G 0G3 ++ CA ++ + 70-B3-D5 (hex) EVCO SPA + A80000-A80FFF (base 16) EVCO SPA + VIA FELTRE N. 81 +@@ -9089,12 +9293,6 @@ CF3000-CF3FFF (base 16) Mesh Motion Inc + Kocaeli Kocaeli 41470 + TR + +-70-B3-D5 (hex) Nke +-E75000-E75FFF (base 16) Nke +- Rue Gutenberg +- Hennebont Brittany 56700 +- FR +- + 70-B3-D5 (hex) UNISOR MULTISYSTEMS LTD + 05F000-05FFFF (base 16) UNISOR MULTISYSTEMS LTD + HAYETZIRA 6 ST +@@ -11063,12 +11261,6 @@ AD2000-AD2FFF (base 16) YUYAMA MFG Co.,Ltd + Tehran 1533655514 + IR + +-8C-1F-64 (hex) Flextronics International Kft. +-A4C000-A4CFFF (base 16) Flextronics International Kft. +- Zrínyi Miklós str. 38. +- Zalaegerszeg 8900 +- HU +- + 8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme + 9F2000-9F2FFF (base 16) MB connect line GmbH Fernwartungssysteme + Winnettener Straße 6 +@@ -11267,6 +11459,204 @@ E02000-E02FFF (base 16) ITS Teknik A/S + Vejle 7100 + DK + ++8C-1F-64 (hex) NETGEN HITECH SOLUTIONS LLP ++ED9000-ED9FFF (base 16) NETGEN HITECH SOLUTIONS LLP ++ B 301 KNOX PLAZA MALAD WEST ++ MUMBAI MAHARASHTRA 400064 ++ IN ++ ++8C-1F-64 (hex) Wolfspyre Labs ++9D4000-9D4FFF (base 16) Wolfspyre Labs ++ 5007 Highland Ct #WPL-IEEE ++ Austin TX 78731 ++ US ++ ++8C-1F-64 (hex) Vekto ++4AC000-4ACFFF (base 16) Vekto ++ Televisieweg 75 ++ Almere 1322AK ++ NL ++ ++8C-1F-64 (hex) SpectraDynamics, Inc. ++581000-581FFF (base 16) SpectraDynamics, Inc. ++ 1849 Cherry St. ++ Louisville CO 80027 ++ US ++ ++8C-1F-64 (hex) IO Master Technology ++BD3000-BD3FFF (base 16) IO Master Technology ++ 4F?1 No. 258, Lian Cheng Rd, Zhong He Dist ++ New Taipei City 235 Taipei 235 ++ TW ++ ++8C-1F-64 (hex) ESCAD AUTOMATION GmbH ++05F000-05FFFF (base 16) ESCAD AUTOMATION GmbH ++ Escadstr. 1 ++ Pfullendorf 88630 ++ DE ++ ++8C-1F-64 (hex) TIFLEX ++194000-194FFF (base 16) TIFLEX ++ 10 Avenue de la 1ère Armée Française Rhin - Danube ++ PONCIN 01450 ++ FR ++ ++8C-1F-64 (hex) Neuralog LP ++115000-115FFF (base 16) Neuralog LP ++ 4800 Sugar Grove Blvd., Ste. 200 ++ Stafford TX 77479 ++ US ++ ++8C-1F-64 (hex) Sichuan Aiyijan Technology Company Ltd. ++40C000-40CFFF (base 16) Sichuan Aiyijan Technology Company Ltd. ++ C1102 No. 65 Wuke West 1st Rd Wuhou District ++ Chengdu Sichuan 61000 ++ CN ++ ++8C-1F-64 (hex) Rapidev Pvt Ltd ++A44000-A44FFF (base 16) Rapidev Pvt Ltd ++ Office # G201-204 NSTP, NUST ISLAMABAD ++ ISLAMABAD Islamabad Capital Territory 44000 ++ PK ++ ++8C-1F-64 (hex) Opgal Optronic Industries ltd ++35C000-35CFFF (base 16) Opgal Optronic Industries ltd ++ Hanapach 11 ++ Karmiel 2165317 ++ IL ++ ++8C-1F-64 (hex) Alifax S.r.l. ++C24000-C24FFF (base 16) Alifax S.r.l. ++ VIA PETRARCA 2/1 ++ POLVERARA PD 35020 ++ IT ++ ++8C-1F-64 (hex) Flextronics International Kft ++A4C000-A4CFFF (base 16) Flextronics International Kft ++ Zrínyi Miklós str. 38. ++ Zalaegerszeg 8900 ++ HU ++ ++8C-1F-64 (hex) Pietro Fiorentini Spa ++8D9000-8D9FFF (base 16) Pietro Fiorentini Spa ++ Via Armenia, 16 ++ San Vito al Tagliamento (PN) 33078 ++ IT ++ ++8C-1F-64 (hex) Flextronics International Kft ++D02000-D02FFF (base 16) Flextronics International Kft ++ 38. Zrinyi Str. ++ Zalaegerszeg Zala 8900 ++ HU ++ ++8C-1F-64 (hex) VMukti Solutions Private Limited ++E30000-E30FFF (base 16) VMukti Solutions Private Limited ++ 3-4, Shivalik Plaza, Panjrapole, Ambawadi ++ Ahmedabad Gujarat 380015 ++ IN ++ ++8C-1F-64 (hex) Autark GmbH ++943000-943FFF (base 16) Autark GmbH ++ Platz des Friedens 8 ++ Baunatal Hessen D-34225 ++ DE ++ ++8C-1F-64 (hex) ACTELSER S.L. ++3F4000-3F4FFF (base 16) ACTELSER S.L. ++ CARRER ALBERT EINSTEIN, 44 ++ TERRASSA BARCELONA 08223 ++ ES ++ ++8C-1F-64 (hex) Timegate Instruments Ltd. ++7A7000-7A7FFF (base 16) Timegate Instruments Ltd. ++ Tutkijantie 7 ++ Oulu 90540 ++ FI ++ ++8C-1F-64 (hex) GSP Sprachtechnologie GmbH ++FED000-FEDFFF (base 16) GSP Sprachtechnologie GmbH ++ Teltowkanalstraße 1 ++ Berlin 12247 ++ DE ++ ++8C-1F-64 (hex) Wartsila Voyage Limited ++38E000-38EFFF (base 16) Wartsila Voyage Limited ++ 13-18 City Quay ++ Dublin 2 D02 ED70 ++ IE ++ ++8C-1F-64 (hex) AZD Praha s.r.o., ZOZ Olomouc ++FA2000-FA2FFF (base 16) AZD Praha s.r.o., ZOZ Olomouc ++ Zeleznicni ++ Olomouc czech republic 77900 ++ CZ ++ ++8C-1F-64 (hex) Cubic ITS, Inc. dba GRIDSMART Technologies ++52D000-52DFFF (base 16) Cubic ITS, Inc. dba GRIDSMART Technologies ++ 10545 Hardin Valley Rd ++ Knoxville TN 37932 ++ US ++ ++70-B3-D5 (hex) Watteco ++E75000-E75FFF (base 16) Watteco ++ Rue Gutenberg ++ Hennebont Brittany 56700 ++ FR ++ ++8C-1F-64 (hex) Toolplanet Co., Ltd. ++54F000-54FFFF (base 16) Toolplanet Co., Ltd. ++ 43-2 Himigaike-cho ++ Gifu-shi Gifu 500-8122 ++ JP ++ ++8C-1F-64 (hex) AIDirections ++702000-702FFF (base 16) AIDirections ++ Torch Tower ++ Dubai Dubai 74249 ++ AE ++ ++8C-1F-64 (hex) Beijing Zhongchen Microelectronics Co.,Ltd ++AB4000-AB4FFF (base 16) Beijing Zhongchen Microelectronics Co.,Ltd ++ Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District ++ Beijing Beijing 100081 ++ CN ++ ++8C-1F-64 (hex) Weidmann Tecnologia Electrica de Mexico ++7B7000-7B7FFF (base 16) Weidmann Tecnologia Electrica de Mexico ++ Oscar Flores Tapia No. 304, Col. El Llano ++ Arteaga Coahuila 25350 ++ MX ++ ++8C-1F-64 (hex) Ashinne Technology Co., Ltd ++E7C000-E7CFFF (base 16) Ashinne Technology Co., Ltd ++ 10F-1, No.18, Lane 609, Sec.5, Chung Hsin Rd., San Chung Dist. ++ New Taipei City 241 ++ TW ++ ++8C-1F-64 (hex) Forever Engineering Systems Pvt. Ltd. ++AC5000-AC5FFF (base 16) Forever Engineering Systems Pvt. Ltd. ++ B-817, 8th floor, Advant Navis Business Park, Sector-142 ++ NOIDA Uttar Pradesh 201301 ++ IN ++ ++8C-1F-64 (hex) AMESS ++EEA000-EEAFFF (base 16) AMESS ++ C-1501, 60, Haan-ro ++ Gwangmyeong-si Gyeonggi-do 14322 ++ KR ++ ++8C-1F-64 (hex) EVERNET CO,.LTD TAIWAN ++B7C000-B7CFFF (base 16) EVERNET CO,.LTD TAIWAN ++ 12 F., No. 206-2, Sec. 2, Daxing W. Rd ++ Taoyuan Taiwan 330 ++ TW ++ ++8C-1F-64 (hex) Farmote Limited ++017000-017FFF (base 16) Farmote Limited ++ 92 Collingwood Street, Nelson ++ Nelson Nelson 7010 ++ NZ ++ + 70-B3-D5 (hex) System West dba ICS Electronics + E06000-E06FFF (base 16) System West dba ICS Electronics + 7034 Commerce Circle Suite A +@@ -16826,6 +17216,150 @@ E61000-E61FFF (base 16) Stange Elektronik GmbH + yokohama kanagawa 2220033 + JP + ++8C-1F-64 (hex) Beijing Tongtech Technology Co., Ltd. ++12B000-12BFFF (base 16) Beijing Tongtech Technology Co., Ltd. ++ Room 3017, Building 1, Hongfu Science Park, Changping District ++ Beijing Beijing 100029 ++ CN ++ ++8C-1F-64 (hex) EOLANE ++911000-911FFF (base 16) EOLANE ++ ZI DU VAL D OMBREE ++ COMBREE - 49520 ++ FR ++ ++8C-1F-64 (hex) Abbott Diagnostics Technologies AS ++429000-429FFF (base 16) Abbott Diagnostics Technologies AS ++ P. O. Box 6863 Rodeløkka ++ Oslo Oslo 0504 ++ NO ++ ++8C-1F-64 (hex) Huz Electronics Ltd ++BC2000-BC2FFF (base 16) Huz Electronics Ltd ++ 10 Avondale road ++ Cwmbran S Wales NP44 1UD ++ GB ++ ++8C-1F-64 (hex) Microlynx Systems Ltd ++F3C000-F3CFFF (base 16) Microlynx Systems Ltd ++ #107, 1925 - 18 Ave NE ++ Calgary AB T2E 7T8 ++ CA ++ ++8C-1F-64 (hex) ANDDORO LLC ++6F9000-6F9FFF (base 16) ANDDORO LLC ++ 1430 Broadway NY ++ New York NY 10018 ++ US ++ ++8C-1F-64 (hex) GIORDANO CONTROLS SPA ++807000-807FFF (base 16) GIORDANO CONTROLS SPA ++ VIA PARALLELA 2/4 ++ VILLA BARTOLOMEA IT 37049 ++ IT ++ ++8C-1F-64 (hex) VEILUX INC. ++045000-045FFF (base 16) VEILUX INC. ++ 802 GREENVIEW DR. STE 200 ++ GRAND PRAIRIE 75050 ++ US ++ ++8C-1F-64 (hex) Cleanwatts Digital, S.A. ++0E6000-0E6FFF (base 16) Cleanwatts Digital, S.A. ++ Ladeira da Paula, 6 ++ Antanhol-Coimbra 3040-574 ++ PT ++ ++8C-1F-64 (hex) FORSEE POWER ++0AF000-0AFFFF (base 16) FORSEE POWER ++ 2 chemin du ruisseau ++ ECULLY 69130 ++ FR ++ ++8C-1F-64 (hex) Sakura Seiki Co.,Ltd. ++28C000-28CFFF (base 16) Sakura Seiki Co.,Ltd. ++ 75-5, Imojiya ++ Chikuma-city Nagano Prefecture 387-0015 ++ JP ++ ++8C-1F-64 (hex) Indefac company ++E64000-E64FFF (base 16) Indefac company ++ Ka-211, Whangmool ro 190, DongDaemoon Gu ++ Seoul 02622 ++ KR ++ ++8C-1F-64 (hex) Jide Car Rastreamento e Monitoramento LTDA ++22E000-22EFFF (base 16) Jide Car Rastreamento e Monitoramento LTDA ++ Rua Arcipreste Andrade 630 ++ São Paulo São Paulo 04268020 ++ BR ++ ++8C-1F-64 (hex) Real Digital ++3B2000-3B2FFF (base 16) Real Digital ++ 655 SW James Pl ++ Pullman WA 99163 ++ US ++ ++8C-1F-64 (hex) Fingoti Limited ++CD9000-CD9FFF (base 16) Fingoti Limited ++ Barnam Ham Farm ++ Bickleigh, Plymouth Devon PL6 7AL ++ GB ++ ++8C-1F-64 (hex) Grace Design/Lunatec LLC ++FB7000-FB7FFF (base 16) Grace Design/Lunatec LLC ++ 4689 Ute Highway ++ Longmont CO 80503 ++ US ++ ++8C-1F-64 (hex) Farmobile LLC ++672000-672FFF (base 16) Farmobile LLC ++ 4001 W. 114th, Suite 300 ++ Leawood KS 66251 ++ US ++ ++8C-1F-64 (hex) Zhuhai Yunzhou Intelligence Technology Ltd. ++254000-254FFF (base 16) Zhuhai Yunzhou Intelligence Technology Ltd. ++ Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town ++ Zhuhai Guangdong 519000 ++ CN ++ ++8C-1F-64 (hex) AIQuatro ++AC0000-AC0FFF (base 16) AIQuatro ++ 143B ++ São Paulo São Paulo 02433-070 ++ BR ++ ++8C-1F-64 (hex) Active Research Limited ++0C0000-0C0FFF (base 16) Active Research Limited ++ 21 Harwell Road ++ Poole Dorset BH17 0GE ++ GB ++ ++8C-1F-64 (hex) Beijing Redlink Information Technology Co., Ltd. ++D9A000-D9AFFF (base 16) Beijing Redlink Information Technology Co., Ltd. ++ Room 5, 2nd floor, Deshi Building, Haidian District, Beijing, China ++ Beijing 100085 ++ CN ++ ++8C-1F-64 (hex) Sphere Com Services Pvt Ltd ++A6A000-A6AFFF (base 16) Sphere Com Services Pvt Ltd ++ Sphere Com Services Pvt Ltd, F-16-22, pankaj plaza, plot-no-7, Sector - 12, Dwarka, New Delhi - 110075, New Delhi ++ New Delhi Delhi 110075 ++ IN ++ ++8C-1F-64 (hex) suzhou yuecrown Electronic Technology Co.,LTD ++CCB000-CCBFFF (base 16) suzhou yuecrown Electronic Technology Co.,LTD ++ B6,no.1599,West Chengbei Road,Gusu District ++ suzhou jiangsu 215000 ++ CN ++ ++8C-1F-64 (hex) Paragraf ++01A000-01AFFF (base 16) Paragraf ++ 7-8 West Newlands ++ Somersham Cambridgeshire PE28 3EB ++ GB ++ + 70-B3-D5 (hex) YUYAMA MFG Co.,Ltd + BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd + 3-3-1 +@@ -19259,12 +19793,6 @@ E9B000-E9BFFF (base 16) NUMATA R&D Co.,Ltd + Osaki city 989-6161 + JP + +-70-B3-D5 (hex) Active Research Limited +-6A0000-6A0FFF (base 16) Active Research Limited +- Unit 5, Wessex Trade Centre, Ringwood Road +- Poole Dorset BH12 3PF +- GB +- + 70-B3-D5 (hex) Scame Sistemi srl + 2F3000-2F3FFF (base 16) Scame Sistemi srl + Via Lombardia 5 +@@ -21287,12 +21815,6 @@ E73000-E73FFF (base 16) Zeus Control Systems Ltd + Nuneaton CV13 0PE + GB + +-70-B3-D5 (hex) Flextronics International Kft. +-E2F000-E2FFFF (base 16) Flextronics International Kft. +- Zrínyi Miklós str. 38. +- Zalaegerszeg 8900 +- HU +- + 70-B3-D5 (hex) Beijing Lihong Create Co., Ltd. + ED3000-ED3FFF (base 16) Beijing Lihong Create Co., Ltd. + Changping, Zhenxinglu. 46 +@@ -22328,12 +22850,6 @@ CCB000-CCBFFF (base 16) RealD, Inc. + Wakefield West Yorkshire WF1 2ED + GB + +-8C-1F-64 (hex) Flextronics International Kft. +-F5C000-F5CFFF (base 16) Flextronics International Kft. +- Zrínyi Miklós str. 38. +- Zalaegerszeg 8900 +- HU +- + 8C-1F-64 (hex) Bulwark + 6A8000-6A8FFF (base 16) Bulwark + 2/3 Sahra Grove +@@ -22484,12 +23000,174 @@ EFB000-EFBFFF (base 16) WARECUBE,INC + Suwon-si 16648 + KR + ++8C-1F-64 (hex) Missing Link Electronics, Inc. ++47A000-47AFFF (base 16) Missing Link Electronics, Inc. ++ 2880 Zanker Road, Ste 203 ++ San Jose 95134 ++ US ++ + 8C-1F-64 (hex) Gemini Electronics B.V. + 81A000-81AFFF (base 16) Gemini Electronics B.V. + Burg. van Meeuwenstraat 14 + Beek Limburg 6191 ND + NL + ++8C-1F-64 (hex) AixControl GmbH ++08F000-08FFFF (base 16) AixControl GmbH ++ Sonnenweg 15 ++ Aachen NRW 52070 ++ DE ++ ++8C-1F-64 (hex) Zilica Limited ++A1B000-A1BFFF (base 16) Zilica Limited ++ 8 Hasting Close, Bray, Bray ++ Maidenhead Bray Berks SL6 2DA ++ GB ++ ++8C-1F-64 (hex) REO AG ++73C000-73CFFF (base 16) REO AG ++ Brühlerstr. 100 ++ Solingen 42657 ++ DE ++ ++8C-1F-64 (hex) Borrell USA Corp ++38B000-38BFFF (base 16) Borrell USA Corp ++ 240 RIGGS AV ++ MERCED 95341 ++ US ++ ++8C-1F-64 (hex) NOVA Products GmbH ++BD6000-BD6FFF (base 16) NOVA Products GmbH ++ Thierschstr. 11 ++ Munich 80538 ++ DE ++ ++8C-1F-64 (hex) ECO-ADAPT ++C38000-C38FFF (base 16) ECO-ADAPT ++ 39 Rue de Chateaudun ++ Paris Ile-de-France 75009 ++ FR ++ ++8C-1F-64 (hex) Flextronics International Kft ++F5C000-F5CFFF (base 16) Flextronics International Kft ++ Zrínyi Miklós str. 38. ++ Zalaegerszeg 8900 ++ HU ++ ++70-B3-D5 (hex) Flextronics International Kft ++E2F000-E2FFFF (base 16) Flextronics International Kft ++ Zrínyi Miklós str. 38. ++ Zalaegerszeg 8900 ++ HU ++ ++8C-1F-64 (hex) ADETEC SAS ++AE8000-AE8FFF (base 16) ADETEC SAS ++ 8 rue de l'Angoumois ++ ARGENTEUIL 95100 ++ FR ++ ++8C-1F-64 (hex) AML ++634000-634FFF (base 16) AML ++ 2190 Regal Parkway ++ Euless TX 76040 ++ US ++ ++8C-1F-64 (hex) In-lite Design BV ++557000-557FFF (base 16) In-lite Design BV ++ Stephensonweg 18 ++ Gorinchem Zuid-Holland 4207 HB ++ NL ++ ++8C-1F-64 (hex) SMS group GmbH ++FF4000-FF4FFF (base 16) SMS group GmbH ++ Hirtenwiese 4 ++ Elkenroth Rhineland-Palantine 57578 ++ DE ++ ++8C-1F-64 (hex) CyberneX Co., Ltd ++A6D000-A6DFFF (base 16) CyberneX Co., Ltd ++ Kamata, 5-26-8, Ardel Kamata #1107 ++ O-taku Tokyo-to 1440052 ++ JP ++ ++8C-1F-64 (hex) Enestone Corporation ++2FD000-2FDFFF (base 16) Enestone Corporation ++ 3-24-5 Shin yokohama Kohoku ++ YOKOHAMA Kanagawa 222-0033 ++ JP ++ ++70-B3-D5 (hex) Active Research Limited ++6A0000-6A0FFF (base 16) Active Research Limited ++ 21 Harwell Road ++ Poole Dorset BH17 0GE ++ GB ++ ++8C-1F-64 (hex) SiEngine Technology Co., Ltd. ++F7A000-F7AFFF (base 16) SiEngine Technology Co., Ltd. ++ 6th floor,Building 23,No.1999,Yi Shan Road ++ Shanghai Shanghai 201114 ++ CN ++ ++8C-1F-64 (hex) Vesperix Corporation ++8E9000-8E9FFF (base 16) Vesperix Corporation ++ 803 West Broad St Suite 520 ++ Falls Church VA 22046 ++ US ++ ++8C-1F-64 (hex) SOCNOC AI Inc ++7DE000-7DEFFF (base 16) SOCNOC AI Inc ++ 2800 Innovation Avenue, Innovation Industrial Park? ++ Hefei Anhui 230000 ++ CN ++ ++8C-1F-64 (hex) Sontay Ltd. ++697000-697FFF (base 16) Sontay Ltd. ++ Four Elms Road ++ Edenbridge TN86AB ++ GB ++ ++8C-1F-64 (hex) Lumiplan Duhamel ++C4C000-C4CFFF (base 16) Lumiplan Duhamel ++ 2 rue de l'industrie ++ Domène Isère 38420 ++ FR ++ ++8C-1F-64 (hex) BRICKMAKERS GmbH ++E5E000-E5EFFF (base 16) BRICKMAKERS GmbH ++ Am Plan 14-16 ++ Koblenz 56068 ++ DE ++ ++8C-1F-64 (hex) AvMap srlu ++84C000-84CFFF (base 16) AvMap srlu ++ Viale Zaccagna 6 ++ Carrara 54033 ++ IT ++ ++8C-1F-64 (hex) Neurable ++B92000-B92FFF (base 16) Neurable ++ 45 Bromfield St ++ Chicago IL 60641 ++ US ++ ++8C-1F-64 (hex) ADiCo Corporation ++D69000-D69FFF (base 16) ADiCo Corporation ++ 2045-32, Takaragi-honcho ++ Utsunomiya-shi Tochigi 320-0075 ++ JP ++ ++8C-1F-64 (hex) Wittra Networks AB ++DF8000-DF8FFF (base 16) Wittra Networks AB ++ Västra Järnvägsgatan 39th floor(Convendum) ++ Stockholm Stockholm 111 64 ++ SE ++ ++8C-1F-64 (hex) METRONA-Union GmbH ++9FA000-9FAFFF (base 16) METRONA-Union GmbH ++ Aidenbachstr. 40 ++ München 81379 ++ DE ++ + 70-B3-D5 (hex) DISMUNTEL SAL + 92C000-92CFFF (base 16) DISMUNTEL SAL + Pol ind cotes +@@ -22952,12 +23630,6 @@ E1F000-E1FFFF (base 16) THETA432 + El Segundo CA 90245 + US + +-70-B3-D5 (hex) Root Automation +-6A2000-6A2FFF (base 16) Root Automation +- 1916 Fort Jones Rd +- Yreka CA 96097 +- US +- + 70-B3-D5 (hex) DIEHL Connectivity Solutions + 1F1000-1F1FFF (base 16) DIEHL Connectivity Solutions + Stephanstraße 49 +@@ -27934,3 +28606,225 @@ A9A000-A9AFFF (base 16) Signasystems Elektronik San. ve Tic. Ltd. Sti. + 2683 151st Place NE + Redmond WA 98052 + US ++ ++8C-1F-64 (hex) Pigs Can Fly Labs LLC ++DC0000-DC0FFF (base 16) Pigs Can Fly Labs LLC ++ 9450 SW Gemini Dr, PMB 41687 ++ Beaverton OR 97008 ++ US ++ ++8C-1F-64 (hex) EMBSYS SISTEMAS EMBARCADOS ++FD4000-FD4FFF (base 16) EMBSYS SISTEMAS EMBARCADOS ++ AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324 ++ MARILIA SAO PAULO 17512752 ++ BR ++ ++8C-1F-64 (hex) Cardinal Scales Manufacturing Co ++DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co ++ 203 East Daugherty Street ++ Webb City MO 64870 ++ US ++ ++8C-1F-64 (hex) United States Technologies Inc. ++525000-525FFF (base 16) United States Technologies Inc. ++ 1701 Pollitt Drive ++ Fair Lawn NJ 07410 ++ US ++ ++8C-1F-64 (hex) Rumble, Inc ++837000-837FFF (base 16) Rumble, Inc ++ Bluebonnet Ln ++ Austin TX 78704 ++ US ++ ++8C-1F-64 (hex) EA Elektroautomatik GmbH & Co. KG ++504000-504FFF (base 16) EA Elektroautomatik GmbH & Co. KG ++ Helmholtzstraße 31-33 ++ Viersen NRW 41747 ++ DE ++ ++8C-1F-64 (hex) PuS GmbH und Co. KG ++4E0000-4E0FFF (base 16) PuS GmbH und Co. KG ++ Hainstr. 13 ++ Gera Germany 07545 ++ DE ++ ++8C-1F-64 (hex) Cinetix Srl ++89E000-89EFFF (base 16) Cinetix Srl ++ Via Armentera, 8 ++ Borgo Valsugana Trento 38051 ++ IT ++ ++8C-1F-64 (hex) ATM SOLUTIONS ++9BD000-9BDFFF (base 16) ATM SOLUTIONS ++ Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine ++ Navi Mumbai Maharashatra 400709 ++ IN ++ ++8C-1F-64 (hex) Mitsubishi Electric India Pvt. Ltd. ++D92000-D92FFF (base 16) Mitsubishi Electric India Pvt. Ltd. ++ EL3, J BLOCK, M.I.D.C. Bhosari ++ PUNE Maharastra 411027 ++ IN ++ ++8C-1F-64 (hex) Integer.pl S.A. ++A97000-A97FFF (base 16) Integer.pl S.A. ++ Wielicka 28 ++ Krakow 30-552 ++ PL ++ ++8C-1F-64 (hex) Monnit Corporation ++94E000-94EFFF (base 16) Monnit Corporation ++ 450 South Simmons STE 670 ++ Kaysville UT 84037 ++ US ++ ++8C-1F-64 (hex) SASYS e.K. ++1CB000-1CBFFF (base 16) SASYS e.K. ++ Spannstiftstr. 16 ++ Hagen 58119 ++ DE ++ ++8C-1F-64 (hex) ADAMCZEWSKI elektronische Messtechnik GmbH ++F4E000-F4EFFF (base 16) ADAMCZEWSKI elektronische Messtechnik GmbH ++ Felix-Wankel-Str. 13 ++ Zaberfeld Baden-Württemberg 74374 ++ DE ++ ++8C-1F-64 (hex) XSENSOR Technology Corp. ++7AA000-7AAFFF (base 16) XSENSOR Technology Corp. ++ 133 12 Ave SE ++ Calgary Alberta T2G 0Z9 ++ CA ++ ++8C-1F-64 (hex) MG s.r.l. ++67A000-67AFFF (base 16) MG s.r.l. ++ via Monte Bianco, 1 ++ Solbiate Olona VA 21058 ++ IT ++ ++8C-1F-64 (hex) Beijing Wenrise Technology Co., Ltd. ++A84000-A84FFF (base 16) Beijing Wenrise Technology Co., Ltd. ++ No.10 Shangdi Road, Haidian District ++ Beijing Beijing 100085 ++ CN ++ ++8C-1F-64 (hex) AMF Medical SA ++F52000-F52FFF (base 16) AMF Medical SA ++ Chemin de la Dent-d'Oche 1 A ++ Ecublens VD Vaud 1024 ++ CH ++ ++8C-1F-64 (hex) SCIREQ Scientific Respiratory Equipment Inc ++01E000-01EFFF (base 16) SCIREQ Scientific Respiratory Equipment Inc ++ 6600 rue St. Urbain, Suite 300 ++ Montreal Quebec H2S 3G8 ++ CA ++ ++8C-1F-64 (hex) HUPI ++489000-489FFF (base 16) HUPI ++ 45 allée théodore monod ++ Bidart Sélectionnez un département / état 64210 ++ FR ++ ++8C-1F-64 (hex) Qualitrol LLC ++905000-905FFF (base 16) Qualitrol LLC ++ 1385 Fairport Rd ++ Fairport NY 14450 ++ US ++ ++8C-1F-64 (hex) WINTUS SYSTEM ++9BA000-9BAFFF (base 16) WINTUS SYSTEM ++ E1102, 7 yeonmujang 5ga gil, seongdong-gu ++ SEOUL SEOUL 04782 ++ KR ++ ++8C-1F-64 (hex) TTC TELEKOMUNIKACE, s.r.o. ++E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. ++ Trebohosticka 5 ++ Praha 10 Praha 10000 ++ CZ ++ ++70-B3-D5 (hex) Root Automation ++6A2000-6A2FFF (base 16) Root Automation ++ 112 4 H Way ++ Yreka CA 96097 ++ US ++ ++8C-1F-64 (hex) Proterra, Inc ++552000-552FFF (base 16) Proterra, Inc ++ 1 Whitlee Court ++ Greenville SC 29607 ++ US ++ ++8C-1F-64 (hex) eumig industrie-TV GmbH. ++5B3000-5B3FFF (base 16) eumig industrie-TV GmbH. ++ Gewerbeparkstrasse 9 ++ Anif Salzburg 5081 ++ AT ++ ++8C-1F-64 (hex) TeraDiode / Panasonic ++2C3000-2C3FFF (base 16) TeraDiode / Panasonic ++ 30 Upton Dr ++ Wilmington MA 01887 ++ US ++ ++8C-1F-64 (hex) QUERCUS TECHNOLOGIES, S.L. ++D7C000-D7CFFF (base 16) QUERCUS TECHNOLOGIES, S.L. ++ Av. Onze de Setembre 19 ++ Reus Tarragona 43203 ++ ES ++ ++8C-1F-64 (hex) SPIT Technology, Inc ++939000-939FFF (base 16) SPIT Technology, Inc ++ 2F, 91-1, Gyeongui-ro ++ Uijeongbu-si Gyonggi-do 11652 ++ KR ++ ++8C-1F-64 (hex) VECOS Europe B.V. ++C80000-C80FFF (base 16) VECOS Europe B.V. ++ ESP 237 ++ Eindhoven Noord-Brabant 5633 AD ++ NL ++ ++8C-1F-64 (hex) EMIT GmbH ++3D1000-3D1FFF (base 16) EMIT GmbH ++ Johannes-Mauthe-Straße 14 ++ Albstadt Baden Württemberg 72458 ++ DE ++ ++8C-1F-64 (hex) M/S MILIND RAMACHANDRA RAJWADE ++721000-721FFF (base 16) M/S MILIND RAMACHANDRA RAJWADE ++ 713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru ++ Pune Maharashtra 411051 ++ IN ++ ++8C-1F-64 (hex) JW Froehlich Maschinenfabrik GmbH ++C8F000-C8FFFF (base 16) JW Froehlich Maschinenfabrik GmbH ++ Kohlhammerstrasse 18-24 ++ Leinfelden-Echterdingen 70771 ++ DE ++ ++8C-1F-64 (hex) Power Electronics Espana, S.L. ++D08000-D08FFF (base 16) Power Electronics Espana, S.L. ++ Poligono Industrial Carrases. Ronda del camp d Aviacio 4 ++ Lliria Valencia 46160 ++ ES ++ ++8C-1F-64 (hex) Mediana ++C6B000-C6BFFF (base 16) Mediana ++ Wonju Medical Industry Park, 1650-1 Donghwa-Ri, ++ Wonju-Si Gangwon-Do 220-801 ++ KR ++ ++8C-1F-64 (hex) noah ++B01000-B01FFF (base 16) noah ++ Augustusplatz 1-4 ++ Leipzig 04109 ++ DE ++ ++8C-1F-64 (hex) Nokeval Oy ++E0E000-E0EFFF (base 16) Nokeval Oy ++ Rounionkatu 107 ++ Nokia 37150 ++ FI +diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids +index 4c99c149f4..19832a58b3 100644 +--- a/hwdb.d/pci.ids ++++ b/hwdb.d/pci.ids +@@ -1,8 +1,8 @@ + # + # List of PCI ID's + # +-# Version: 2021.12.15 +-# Date: 2021-12-15 03:15:02 ++# Version: 2022.03.22 ++# Date: 2022-03-22 03:15:02 + # + # Maintained by Albert Pool, Martin Mares, and other volunteers from + # the PCI ID Project at https://pci-ids.ucw.cz/. +@@ -105,14 +105,24 @@ + 0731 7215 JM7200 + 9200 JM9200 + 920a JH920 ++ 0731 920a JH920 ++ 0731 920b JH920-I ++ 0731 920c JH920-M + 920b JH920-I + 920c JH920-M + 9210 JM9210 ++ 0731 9210 JM9210 ++ 0731 9211 JM9210-I + 9211 JM9210-I + 9230 JM9230 ++ 0731 9230 JM9230 ++ 0731 9231 JM9230-I + 9231 JM9231-I + 9250 JM9250 ++ 0731 9250 JM9250 + 930a JH930-I ++ 0731 930a JH930-I ++ 0731 930b JH930-M + 930b JH930-M + 0777 Ubiquiti Networks, Inc. + 0795 Wired Inc. +@@ -821,14 +831,16 @@ + 1028 200c HBA355i Front + 1028 200d HBA355e Adapter + 1028 200e HBA350i MX ++ 1028 2170 HBA350i MM + 1028 2175 HBA350i Adapter ++ 1028 2197 HBA350i MM LP + 1d49 0205 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb Internal HBA + 1d49 0206 ThinkSystem 440-16e SAS/SATA PCIe Gen4 12Gb HBA + 1d49 0207 ThinkSystem 440-8i SAS/SATA PCIe Gen4 12Gb HBA + 1d49 0208 ThinkSystem 440-16i SAS/SATA PCIe Gen4 12Gb HBA + 1d49 0209 ThinkSystem 440-8e SAS/SATA PCIe Gen4 12Gb HBA +- 8086 4050 Storage Controller RS3P4QF160F +- 8086 4070 Storage Controller RS3P4GF016F ++ 8086 4050 Storage Controller RS3P4QF160J ++ 8086 4070 Storage Controller RS3P4GF016J + 00e7 Fusion-MPT 12GSAS/PCIe Unsupported SAS38xx + # Tampered part + 1028 200b HBA355i Adapter Tampered +@@ -932,6 +944,8 @@ + 10e2 MegaRAID 12GSAS/PCIe Secure SAS39xx + # 9560 16 internal port RAID controller + 1000 4000 MegaRAID 9560-16i ++# 9561 16 internal port RAID controller ++ 1000 4002 MegaRAID 9561-16i + # 9560 8 internal port RAID controller + 1000 4010 MegaRAID 9560-8i + # 9580 8 internal & 8 external port RAID controller +@@ -965,6 +979,7 @@ + 1028 2173 PERC H355 Front + 1028 2174 PERC H350 Mini + 1028 2177 PERC H350 Adapter ++ 1028 2199 PERC H350 Mini LP + 1d49 0505 ThinkSystem RAID 540-8i PCIe Gen4 12Gb Adapter + 1d49 0506 ThinkSystem RAID 540-16i PCIe Gen4 12Gb Adapter + 10e7 MegaRAID 12GSAS/PCIe Unsupported SAS38xx +@@ -986,6 +1001,7 @@ + c010 PEX88048 50 lane, 50 port, PCI Express Gen 4.0 ExpressFabric Platform + c012 PEX880xx PCIe Gen 4 Switch + 1d49 0003 ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter ++ c030 PEX890xx PCIe Gen 5 Switch + 1001 Kolter Electronic + 0010 PCI 1616 Measurement card with 32 digital I/O lines + 0011 OPTO-PCI Opto-Isolated digital I/O board +@@ -1062,7 +1078,7 @@ + 163f VanGogh + 164c Lucienne + 164d Rembrandt +- 1681 Rembrandt ++ 1681 Rembrandt [Radeon 680M] + 1714 BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] + 103c 168b ProBook 4535s + 3150 RV380/M24 [Mobility Radeon X600] +@@ -2032,9 +2048,10 @@ + 174b a240 Radeon R7 240 OEM + 174b d340 Radeon R7 340 OEM + 1b0a 90d3 Radeon R7 240 OEM +- 6613 Oland PRO [Radeon R7 240/340] ++ 6613 Oland PRO [Radeon R7 240/340 / Radeon 520] + 148c 7340 Radeon R7 340 + 1682 7240 R7 240 2048 MB ++ 1dcf 3000 Oland PRO [Radeon R7 240/340 / Radeon 520] + 6631 Oland + 6640 Saturn XT [FirePro M6100] + 106b 014b Tropo XT [Radeon R9 M380 Mac Edition] +@@ -3742,23 +3759,29 @@ + 73a2 Navi 21 Pro-XTA [Radeon Pro W6900X] + 73a3 Navi 21 GL-XL [Radeon PRO W6800] + 73a4 Navi 21 USB ++ 73a5 Navi 21 [Radeon RX 6950 XT] + 73ab Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo] + 73af Navi 21 [Radeon RX 6900 XT] ++ 148c 2414 Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate] + 73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] + 1002 0e3a Radeon RX 6900 XT ++ 148c 2408 Red Devil AMD Radeon RX 6900 XT + 1eae 6701 XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black + 73c3 Navi 22 + 73c4 Navi 22 USB +- 73df Navi 22 [Radeon RX 6700/6700 XT / 6800M] ++ 73df Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M] + 73e0 Navi 23 + 73e1 Navi 23 WKS-XM [Radeon PRO W6600M] + 73e3 Navi 23 WKS-XL [Radeon PRO W6600] + 73e4 Navi 23 USB ++ 73ef Navi 23 [Radeon RX 6650 XT] + 73ff Navi 23 [Radeon RX 6600/6600 XT/6600M] + 148c 2412 PowerColor Red Devil RX 6600 XT + 7408 Aldebaran + 740c Aldebaran + 740f Aldebaran ++ 743f Navi 24 [Radeon RX 6400 / 6500 XT] ++ 1da2 e457 PULSE AMD Radeon RX 6500 XT + 7833 RS350 Host Bridge + 7834 RS350 [Radeon 9100 PRO/XT IGP] + 7835 RS350M [Mobility Radeon 9000 IGP] +@@ -4161,7 +4184,7 @@ + ab10 Lexa HDMI Audio + ab18 Vega 12 HDMI Audio + ab20 Vega 20 HDMI Audio [Radeon VII] +- ab28 Navi 21 HDMI Audio [Radeon RX 6800/6800 XT / 6900 XT] ++ ab28 Navi 21/23 HDMI/DP Audio Controller + ab38 Navi 10 HDMI Audio + ac00 Theater 506 World-Wide Analog Decoder + ac01 Theater 506 World-Wide Analog Decoder +@@ -4956,14 +4979,14 @@ + 1043 876b PRIME Motherboard + 17aa 5124 ThinkPad E595 + ea50 ce19 mCOM10-L1900 +- 15e2 Raven/Raven2/FireFlight/Renoir Audio Processor ++ 15e2 ACP/ACP3X/ACP6x Audio Coprocessor + 17aa 5124 ThinkPad E595 + ea50 ce19 mCOM10-L1900 +- 15e3 Family 17h (Models 10h-1fh) HD Audio Controller ++ 15e3 Family 17h/19h HD Audio Controller + 103c 8615 Pavilion Laptop 15-cw1xxx + 1043 86c7 PRIME B450M-A Motherboard + 17aa 5124 ThinkPad E595 +- 15e4 Raven/Raven2/Renoir Sensor Fusion Hub ++ 15e4 Sensor Fusion Hub + 15e5 Raven2 USB 3.1 + ea50 ce19 mCOM10-L1900 + 15e6 Raven/Raven2/Renoir Non-Sensor Fusion Hub KMDF driver +@@ -5139,6 +5162,13 @@ + 43c7 400 Series Chipset PCIe Port + 43c8 400 Series Chipset SATA Controller + 43d5 400 Series Chipset USB 3.1 XHCI Controller ++ 43e9 500 Series Chipset Switch Upstream Port ++ 43eb 500 Series Chipset SATA Controller ++# or ASM106X Serial ATA Controller ++ 1b21 1062 ASM1062 Serial ATA Controller ++ 43ee 500 Series Chipset USB 3.1 XHCI Controller ++# maybe ++ 1b21 1142 ASM1042A USB 3.0 Host Controller + 57a3 Matisse PCIe GPP Bridge + 57a4 Matisse PCIe GPP Bridge + 57ad Matisse Switch Upstream +@@ -11492,6 +11522,7 @@ + 10ef GP102 HDMI Audio Controller + 10f0 GP104 High Definition Audio Controller + 10f1 GP106 High Definition Audio Controller ++ 1043 85b6 DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual] + 10f7 TU102 High Definition Audio Controller + 10f8 TU104 HD Audio Controller + 10f9 TU106 High Definition Audio Controller +@@ -12189,6 +12220,7 @@ + 1c01 GP106 + 1c02 GP106 [GeForce GTX 1060 3GB] + 1c03 GP106 [GeForce GTX 1060 6GB] ++ 1043 85b6 DUAL-GTX1060-O6G [GeForce GTX 1060 6GB Dual] + 1c04 GP106 [GeForce GTX 1060 5GB] + 1c06 GP106 [GeForce GTX 1060 6GB Rev. 2] + 1c07 GP106 [P106-100] +@@ -12321,6 +12353,7 @@ + 1ef5 TU104GLM [Quadro RTX 5000 Mobile Refresh] + 1f02 TU106 [GeForce RTX 2070] + 1043 8673 TURBO RTX 2070 ++ 1f03 TU106 [GeForce RTX 2060 12GB] + 1f04 TU106 + 1f06 TU106 [GeForce RTX 2060 SUPER] + 1f07 TU106 [GeForce RTX 2070 Rev. A] +@@ -12354,21 +12387,32 @@ + 1f99 TU117M + 1f9c TU117M [GeForce MX450] + 1f9d TU117M [GeForce GTX 1650 Mobile / Max-Q] ++# via Lenovo 496.90 ++ 1f9f TU117M [GeForce MX550] ++ 1fa0 TU117M [GeForce MX550] + 1fae TU117GL + 1fb0 TU117GLM [Quadro T1000 Mobile] + 1fb1 TU117GL [T600] + 1fb2 TU117GLM [Quadro T400 Mobile] ++ 1fb6 TU117GLM [T600 Laptop GPU] ++ 1fb7 TU117GLM [T550 Laptop GPU] + 1fb8 TU117GLM [Quadro T2000 Mobile / Max-Q] + 1fb9 TU117GLM [Quadro T1000 Mobile] + 1fba TU117GLM [T600 Mobile] + 1fbb TU117GLM [Quadro T500 Mobile] ++ 1fbc TU117GLM [T1200 Laptop GPU] + 1fbf TU117GL + 1fd9 TU117BM [GeForce GTX 1650 Mobile Refresh] + 1fdd TU117BM [GeForce GTX 1650 Mobile Refresh] ++ 1ff0 TU117GL [T1000 8GB] ++ 1ff2 TU117GL [T400 4GB] + 1ff9 TU117GLM [Quadro T1000 Mobile] ++ 2082 GA100 [CMP 170HX] + 20b0 GA100 [A100 SXM4 40GB] + 20b1 GA100 [A100 PCIe 40GB] + 20b2 GA100 [A100 SXM4 80GB] ++# 20B3 14A7 10DE PG506-242 / 20B3 14A8 10DE PG506-243 ++ 20b3 GA100 [PG506-242/243] + 20b5 GA100 [A100 PCIe 80GB] + 20b6 GA100GL [PG506-232] + 20b7 GA100GL [A30 PCIe] +@@ -12376,7 +12420,9 @@ + 20be GA100 [GRID A100A] + 20bf GA100 [GRID A100B] + 20c2 GA100 [CMP 170HX] ++ 20f0 GA100 [A100-PG506-207] + 20f1 GA100 [A100 PCIe 40GB] ++ 20f2 GA100 [A100-PG506-217] + 2182 TU116 [GeForce GTX 1660 Ti] + 2183 TU116 + 2184 TU116 [GeForce GTX 1660] +@@ -12399,6 +12445,7 @@ + 10de 146d GA102 [GeForce RTX 3080 20GB] + 1462 3892 RTX 3080 10GB GAMING X TRIO + 2208 GA102 [GeForce RTX 3080 Ti] ++ 220a GA102 [GeForce RTX 3080 12GB] + 220d GA102 [CMP 90HX] + 2216 GA102 [GeForce RTX 3080 Lite Hash Rate] + 222b GA102 [GeForce RTX 3090 Engineering Sample] +@@ -12406,15 +12453,20 @@ + 2230 GA102GL [RTX A6000] + 2231 GA102GL [RTX A5000] + 2232 GA102GL [RTX A4500] ++ 2233 GA102GL [RTX A5500] + 2235 GA102GL [A40] + 2236 GA102GL [A10] + 2237 GA102GL [A10G] ++ 2238 GA102GL [A10M] + 223f GA102GL + 228b GA104 High Definition Audio Controller + 2296 Tegra PCIe Endpoint Virtual Network + 2302 GA103 + 2321 GA103 ++ 2414 GA103 [GeForce RTX 3060 Ti] + 2420 GA103M [GeForce RTX 3080 Ti Mobile] ++ 2438 GA103GLM [RTX A5500 Laptop GPU] ++ 2460 GA103M [GeForce RTX 3080 Ti Laptop GPU] + 2482 GA104 [GeForce RTX 3070 Ti] + 2483 GA104 + 2484 GA104 [GeForce RTX 3070] +@@ -12436,29 +12488,46 @@ + 24b6 GA104GLM [RTX A5000 Mobile] + 24b7 GA104GLM [RTX A4000 Mobile] + 24b8 GA104GLM [RTX A3000 Mobile] ++ 24b9 GA104GLM [RTX A3000 12GB Laptop GPU] ++ 24ba GA104GLM [RTX A4500 Laptop GPU] ++ 24bb GA104GLM [RTX A3000 Laptop GPU] + 24bf GA104 [GeForce RTX 3070 Engineering Sample] + 24dc GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB] + 24dd GA104M [GeForce RTX 3070 Mobile / Max-Q] ++ 24e0 GA104M [Geforce RTX 3070 Ti Laptop GPU] ++ 24fa GA104 [RTX A4500 Embedded GPU ] + 2501 GA106 [GeForce RTX 3060] + 2503 GA106 [GeForce RTX 3060] + 2504 GA106 [GeForce RTX 3060 Lite Hash Rate] + 2505 GA106 ++ 2507 GA106 [Geforce RTX 3050] + 2520 GA106M [GeForce RTX 3060 Mobile / Max-Q] + 2523 GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] + 252f GA106 [GeForce RTX 3060 Engineering Sample] ++ 2531 GA106 [RTX A2000] + 2560 GA106M [GeForce RTX 3060 Mobile / Max-Q] + 2563 GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] ++ 2571 GA106 [RTX A2000 12GB] + 2583 GA107 [GeForce RTX 3050] + 25a0 GA107M [GeForce RTX 3050 Ti Mobile] + 25a2 GA107M [GeForce RTX 3050 Mobile] + 25a4 GA107 + 25a5 GA107M [GeForce RTX 3050 Mobile] ++ 25a6 GA107M [GeForce MX570] ++ 25a7 GA107M [GeForce MX570] ++ 25a9 GA107M [GeForce RTX 2050] + 25af GA107 [GeForce RTX 3050 Engineering Sample] + 25b5 GA107GLM [RTX A4 Mobile] ++# A16 - 25B6 10DE 14A9 / A2 - 25B6 10DE 157E ++ 25b6 GA107GL [A2 / A16] + 25b8 GA107GLM [RTX A2000 Mobile] ++ 25b9 GA107GLM [RTX A1000 Laptop GPU] ++ 25ba GA107GLM [RTX A2000 8GB Laptop GPU] + 25e0 GA107BM [GeForce RTX 3050 Ti Mobile] + 25e2 GA107BM [GeForce RTX 3050 Mobile] + 25e5 GA107BM [GeForce RTX 3050 Mobile] ++ 25f9 GA107 [RTX A1000 Embedded GPU ] ++ 25fa GA107 [RTX A2000 Embedded GPU] + 10df Emulex Corporation + 0720 OneConnect NIC (Skyhawk) + 103c 1934 FlexFabric 20Gb 2-port 650M Adapter +@@ -12689,6 +12758,7 @@ + 1028 09be Latitude 7410 + 17aa 224f ThinkPad X1 Carbon 5th Gen + 5260 RTS5260 PCI Express Card Reader ++ 5261 RTS5261 PCI Express Card Reader + 5286 RTS5286 PCI Express Card Reader + 5287 RTL8411B PCI Express Card Reader + 1025 1094 Acer Aspire E5-575G +@@ -12790,6 +12860,8 @@ + 103c 2a6f Asus IPIBL-LB Motherboard + 103c 825b OMEN-17-w001nv + 103c 8615 Pavilion Laptop 15-cw1xxx ++# Rev 29, uses r8169 Driver on Linux ++ 103c 8882 HP ProDesk 405 G8 Desktop Mini PC + 1043 11f5 Notebook motherboard (one of many models) + 1043 16d5 U6V/U31J laptop + 1043 81aa P5B +@@ -13699,6 +13771,8 @@ + 9082 Standard AHCI 1.0 SATA Controller + 9140 HDMI Audio Device + 9201 USB3.0 Controller ++# Centaur CNS Coprocessor ++ 9380 Ncore Coprocessor + 9530 VX800/820/900 Series Secure Digital Memory Card Controller + 95d0 VX800/820/900 Series SDIO Host Controller + a208 PT890 PCI to PCI Bridge Controller +@@ -16795,6 +16869,7 @@ + # PI7C9X20508GP 5Port-8Lane PCI Express Switch GreenPacket Family + 0508 PI7C9X20508GP PCI Express Switch 5Port-8Lane + 2304 PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch ++ 2308 PI7C9X2G308GP 8-lane PCI Express 2.0 Switch with 3 PCI Express ports + 2404 PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch + 2608 PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch + ea50 cc10 RXi2-BP +@@ -17454,6 +17529,8 @@ + 13a3 0036 DX1730 Acceleration Card + 0037 8204 Acceleration Processor + 13a3 0036 DX1740 Acceleration Card ++ 9240 XR9240 Compression and Security Coprocessor [Panther II] ++ 13a3 9200 DX2040 Compression and Security Acceleration Card [Panther II] + 13a4 Rascom Inc + 13a5 Audio Digital Imaging Inc + 13a6 Videonics Inc +@@ -19077,11 +19154,15 @@ + 103c 1240 Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM) + 14c2 DTK Computer + 14c3 MEDIATEK Corp. ++ 0608 RZ608 Wi-Fi 6E 80MHz ++ 0616 MT7922 802.11ax PCI Express Wireless Network Adapter + 7612 MT7612E 802.11acbgn PCI Express Wireless Network Adapter ++ 7615 MT7615E 802.11ac PCI Express Wireless Network Adapter + 7630 MT7630e 802.11bgn Wireless Network Adapter + # MT7612E too? + 7662 MT7662E 802.11ac PCI Express Wireless Network Adapter + 7915 MT7915E 802.11ax PCI Express Wireless Network Adapter ++ 7961 MT7921 802.11ax PCI Express Wireless Network Adapter + 14c4 IWASAKI Information Systems Co Ltd + 14c5 Automation Products AB + 14c6 Data Race Inc +@@ -19424,6 +19505,10 @@ + 1259 2708 AT-2712 FX + # The Broadcom 57800 device has two 1Gig ports and two 10Gig ports. The subsystem information can be used to differentiate. + 168a NetXtreme II BCM57800 1/10 Gigabit Ethernet ++# SFP+ ports ++ 1014 0493 PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3) ++# RJ-45 ports ++ 1014 0494 PCIe2 LP 4-Port (10Gb+1GbE) SR+RJ45 Adapter (FC EN0T; CCIN 2CC3) + 1028 1f5c BCM57800 10-Gigabit Ethernet + 1028 1f5d BCM57800 10-Gigabit Ethernet + 1028 1f67 BCM57800 1-Gigabit Ethernet +@@ -20635,6 +20720,7 @@ + 07b0 VMXNET3 Ethernet Controller + 07c0 PVSCSI SCSI Controller + 07e0 SATA AHCI controller ++ 07f0 NVMe SSD Controller + 0801 Virtual Machine Interface + 15ad 0800 Hypervisor ROM Interface + 0820 Paravirtual RDMA controller +@@ -20668,6 +20754,8 @@ + 021d MT43244 Family [BlueField-3 Secure Flash Recovery] + 021e CX8 Family [ConnectX-8 Flash Recovery] + 021f CX8 Family [ConnectX-8 Secure Flash Recovery] ++ 0220 BF4 Family Flash Recovery [BlueField-4 SoC Flash Recovery] ++ 0221 BF4 Family Secure Flash Recovery [BlueField-4 Secure Flash Recovery] + 024e MT53100 [Spectrum-2, Flash recovery mode] + 024f MT53100 [Spectrum-2, Secure Flash recovery mode] + 0250 Spectrum-3, Flash recovery mode +@@ -20679,6 +20767,7 @@ + 0256 Abir GearBox + 0257 Quantum-2 in Flash Recovery Mode + 0258 Quantum-2 RMA ++ 0259 Abir Chiplet + 0262 MT27710 [ConnectX-4 Lx Programmable] EN + 0263 MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN + 0264 Innova-2 Flex Burn image +@@ -20686,6 +20775,7 @@ + 0271 Spectrum-4L, RMA + 0274 Spectrum-4C, Flash recovery mode + 0275 Spectrum-4C RMA ++ 0277 Spectrum-4TOR RMA + 0281 NPS-600 Flash Recovery + 1002 MT25400 Family [ConnectX-2 Virtual Function] + 1003 MT27500 Family [ConnectX-3] +@@ -20857,10 +20947,14 @@ + a2da MT43244 BlueField-3 SoC Crypto enabled + a2db MT43244 BlueField-3 SoC Crypto disabled + a2dc MT43244 BlueField-3 integrated ConnectX-7 network controller ++ a2dd BF4 Family Crypto enabled [BlueField-4 SoC Crypto enabled] ++ a2de BF4 Family Crypto disabled [BlueField-4 SoC Crypto disabled] ++ a2df BF4 Family integrated network controller [BlueField-4 integrated network controller] + c2d2 MT416842 BlueField SoC management interfac + c2d3 MT42822 BlueField-2 SoC Management Interface + c2d4 MT43162 BlueField-3 Lx SoC Management Interface + c2d5 MT43244 BlueField-3 SoC Management Interface ++ c2d6 BF4 Family Management Interface [BlueField-4 SoC Management Interface] + # SwitchX-2, 40GbE switch + c738 MT51136 + c739 MT51136 GW +@@ -20956,8 +21050,9 @@ + 15cc Hotrail Inc + 15cd Dreamtech Co Ltd + 15ce Genrad Inc +-15cf Hilscher GmbH +- 0000 CIFX 50E-DP(M/S) ++# https://www.hilscher.com/imprint/ ++15cf Hilscher Gesellschaft für Systemautomation mbH ++ 0000 CIFX PCI/PCIe + 15d1 Infineon Technologies AG + 15d2 FIC (First International Computer Inc) + 15d3 NDS Technologies Israel Ltd +@@ -21819,6 +21914,32 @@ + a036 ThunderX RAD (RAID acceleration engine) virtual function + a037 THUNDERX ZIP virtual function + a040 THUNDERX CPT Cryptographic Accelerator ++# MAC found on OcteonTx2 series of silicons ++ a059 Octeon TX2 CGX (MAC) ++# MAC found on Octeon 10 series of silicons ++ a060 Octeon 10 RPM (MAC) ++# Octeon Tx2 Loopback Interface block ++ a061 Octeon Tx2 Loopback Interface (LBK) ++# Octeon Tx2 Resource Virtualization Unit Physical Function ++ a063 Octeon Tx2 RVU Physical Function ++# Octeon Tx2 Resource Virtualization Unit Virtual Function ++ a064 Octeon Tx2 RVU Virtual Function ++# Octeon Tx2 Resource Virtualization Unit Admin Function ++ a065 Octeon Tx2 RVU Admin Function ++# PTP Timestamping unit on Octeon 10 silicon series ++ a09e Octeon 10 PTP controller ++# Cryptographic Accelerator found on Octeon 10 series of silicons ++ a0f2 Octeon 10 CPT Cryptographic Accelerator, Physical function ++ a0f3 Octeon 10 CPT Cryptographic Accelerator, Virtual function ++# Octeon Tx2 System DPI Interface (SDP) Physical Function ++ a0f6 Octeon Tx2 SDP Physical Function ++# Octeon Tx2 System DPI Interface (SDP) Virtual Function ++ a0f7 Octeon Tx2 SDP Virtual Function ++ a0f8 Octeon Tx2 Loopback Interface Virtual Function (LBKVF) ++# Cryptographic Accelerator found on OcteonTx2 series of silicons ++ a0fd Octeon Tx2 CPT Cryptographic Accelerator, Physical function ++# Cryptographic Accelerator found on OcteonTx2 series of silicons ++ a0fe Octeon Tx2 CPT Cryptographic Accelerator, Virtual function + a100 THUNDERX CN88XX 48 core SoC + a200 OCTEON TX CN81XX/CN80XX + a300 OCTEON TX CN83XX +@@ -21933,6 +22054,8 @@ + 0401 Datacenter Technologies QDF2400 PCI Express Root Port + 1000 QCS405 PCIe Root Complex + 1101 QCA6390 Wireless Network Adapter [AX500-DBS (2x2)] ++ 1103 Atheros QCNFA765 ++ 1104 QCN6024/9024/9074 Wireless Network Adapter + 17cc NetChip Technology, Inc + 2280 USB 2.0 + 17cd Cadence Design Systems, Inc. +@@ -22806,6 +22929,10 @@ + 0011 FlexCard PMC-II Ethernet + 0018 FlexCard PXIe3 + 0019 FlexCard PCIe3 ++# IO card for std ethernet and automotive ethernet (ieee 1000Base-T1) ++ 001a FlexCard PXIe Ethernet ++# IO card for std ethernet and automotive ethernet (ieee 1000Base-T1) ++ 001b FlexCard PCIe Ethernet + 1976 TRENDnet + 1977 Parsec + 197b JMicron Technology Corp. +@@ -23137,6 +23264,11 @@ + 1aa8 Ciprico, Inc. + 0009 RAIDCore Controller + 000a RAIDCore Controller ++1aa9 Schweitzer Engineering Laboratories ++ 000d SEL-3390S8 Serial Adapter ++ 000e SEL-3390E4 Ethernet Adapter ++ 0014 SEL-3390T Time and Ethernet Adapter ++ 0018 SEL-3390E4 Ethernet Adapter + 1aae Global Velocity, Inc. + 1ab4 Distributed Management Task Force, Inc. (DMTF) + 1ab6 CalDigit, Inc. +@@ -23207,6 +23339,8 @@ + 0a58 microEnable 5 VD8-CL + # CameraLink frame grabber + 0a5a microEnable 5 AD8-CL ++# CoaXpress frame grabber ++ 0a64 imaWorx CXP-12 Quad + # OEM product + 0b52 mE5 Abacus 4G Base + # OEM product +@@ -23311,12 +23445,15 @@ + 1080 ASM1083/1085 PCIe to PCI Bridge + 1849 1080 Motherboard + 1142 ASM1042A USB 3.0 Host Controller ++ 1166 ASM1166 Serial ATA Controller + 1182 ASM1182e 2-Port PCIe x1 Gen2 Packet Switch + 1b21 118f ASM1182e 2-Port PCIe x1 Gen2 Packet Switch + 1184 ASM1184e 4-Port PCIe x1 Gen2 Packet Switch + 1849 1184 ASM1184e 4-Port PCIe x1 Gen2 Packet Switch ++ 1187 ASM1187e 7-Port PCIe x1 Gen2 Packet Switch + 1242 ASM1142 USB 3.1 Host Controller + 1343 ASM1143 USB 3.1 Host Controller ++ 1812 ASM1812 6-Port PCIe x4 Gen2 Packet Switch + 2142 ASM2142 USB 3.1 Host Controller + 1462 7a72 H270 PC MATE + 2824 ASM2824 PCIe Gen3 Packet Switch +@@ -23392,6 +23529,8 @@ + 2241 88NR2241 Non-Volatile memory controller + 1028 2112 BOSS-N1 Monolithic + 1028 2113 BOSS-N1 Modular ++ 1028 2151 BOSS-N1 Modular ET ++ 1028 2196 ROR-N100 + 1d49 0306 ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit + 1d49 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit + 9120 88SE9120 SATA 6Gb/s Controller +@@ -23401,6 +23540,7 @@ + 9128 88SE9128 PCIe SATA 6 Gb/s RAID controller + 9130 88SE9128 PCIe SATA 6 Gb/s RAID controller with HyperDuo + 1043 8438 P8P67 Deluxe Motherboard ++ 9170 88SE9170 PCIe 2.0 x1 2-port SATA 6 Gb/s Controller + 9172 88SE9172 SATA 6Gb/s Controller + 9178 88SE9170 PCIe SATA 6Gb/s Controller + 917a 88SE9172 SATA III 6Gb/s RAID Controller +@@ -23532,9 +23672,22 @@ + 1bb1 0151 Nytro 5520 + # Kersey 2.5" TCG + 1bb1 0152 Nytro 5520 TCG ++# Nytro 5050H (Ebonhawk - High Performance) ++ 1bb1 0153 Nytro 5050H ++# Nytro 5050H TCG (Ebonhawk High Performance) ++ 1bb1 0154 Nytro 5050H TCG ++# Nytro 5050M (Ebonhawk Mainstream Performance) ++ 1bb1 0155 Nytro 5050M ++# Nytro 5050M TCG (Ebonhawk Mainstream Performance) ++ 1bb1 0156 Nytro 5050M TCG ++# Nytro 5050M (Ebonhawk Mainstream Performance) - 7mm ++ 1bb1 0157 Nytro 5050M 7mm ++# Nytro 5050M (Ebonhawk Mainstream Performance) TCG - 7mm ++ 1bb1 0158 Nytro 5050M TCG 7mm + 1bb1 01a1 Nytro XP7102 + 5012 FireCuda 510 SSD + 5016 FireCuda 520 SSD ++ 5018 FireCuda 530 SSD + 1bb3 Bluecherry + 4304 BC-04120A MPEG4 4 port video encoder / decoder + 4309 BC-08240A MPEG4 4 port video encoder / decoder +@@ -23688,8 +23841,22 @@ + 1028 2149 DC NVMe SED PE8010 RI U.2 7.68TB + 1028 214a DC NVMe PE8010 RI U.2 7.68TB + 1c5c 0100 PE8000 Series NVMe Solid State Drive ++ 2849 PE81x0 U.2/3 NVMe Solid State Drive + 1c5f Beijing Memblaze Technology Co. Ltd. + 000d PBlaze5 520/526 ++ 000e PBlaze6 6530 ++ 1c5f 0b20 NVMe SSD PBlaze6 6530 1920G AIC ++ 1c5f 0b21 NVMe SSD PBlaze6 6530 1920G 2.5" U.2 ++ 1c5f 0b30 NVMe SSD PBlaze6 6530 3840G AIC ++ 1c5f 0b31 NVMe SSD PBlaze6 6530 3840G 2.5" U.2 ++ 1c5f 0b40 NVMe SSD PBlaze6 6530 7680G AIC ++ 1c5f 0b41 NVMe SSD PBlaze6 6530 7680G 2.5" U.2 ++ 1c5f 4b20 NVMe SSD PBlaze6 6530 1600G AIC ++ 1c5f 4b21 NVMe SSD PBlaze6 6530 1600G 2.5" U.2 ++ 1c5f 4b30 NVMe SSD PBlaze6 6530 3200G AIC ++ 1c5f 4b31 NVMe SSD PBlaze6 6530 3200G 2.5" U.2 ++ 1c5f 4b40 NVMe SSD PBlaze6 6530 6400G AIC ++ 1c5f 4b41 NVMe SSD PBlaze6 6530 6400G 2.5" U.2 + 003d PBlaze5 920/926 + 003e PBlaze6 6920 + 1c5f 0a31 NVMe SSD PBlaze6 6920 3840GB 2.5" U.2 +@@ -23738,6 +23905,8 @@ + 0002 Clarett + 1cb8 Dawning Information Industry Co., Ltd. + 1cc1 ADATA Technology Co., Ltd. ++# 256GB NVMe SSD ++ 5766 ADATA XPG GAMMIXS1 1L Media + 8201 XPG SX8200 Pro PCIe Gen3x4 M.2 2280 Solid State Drive + 1cc4 Union Memory (Shenzhen) + 1203 NVMe SSD Controller UHXXXa series +@@ -23751,6 +23920,7 @@ + 1cc4 a213 NVMe SSD UHXXXa series U.2 3200GB + 1cc4 a214 NVMe SSD UHXXXa series U.2 6400GB + 17ab NVMe 256G SSD device ++ 6303 AM630 PCIe 4.0 x4 NVMe SSD Controller + 1cc5 Embedded Intelligence, Inc. + 0100 CAN-PCIe-02 + 1cc7 Radian Memory Systems Inc. +@@ -23946,6 +24116,7 @@ + 101c AR-ARK-SRIOV-VF [Arkville Virtual Function] + 101d AR-ARK-NIC [Arkville ArkNIC Kernel Path Device] + 101e AR-ARKA-FX1 [Arkville 64B DPDK Data Mover for Agilex R-Tile] ++ 101f AR-TK242 [2x100GbE Packet Capture Device] + 4200 A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument] + 1d72 Xiaomi + 1d78 DERA Storage +@@ -24157,6 +24328,9 @@ + 2000 NoLoad Hardware Development Kit + 3000 eBPF-based PCIe Accelerator + 1ded Alibaba (China) Co., Ltd. ++# A RDMA (iWarp) device provided by Alibaba Cloud used in ECS environment ++ 107f Elastic RDMA Adapter ++ 5007 Elastic RDMA Adapter + 8000 M1 Root Port + 8001 ACC-RCiEP + 8002 RCiEP VF +@@ -24264,9 +24438,20 @@ + 1028 210e Dell Ent NVMe FIPS CM6 MU 1.6TB + 1028 210f Dell Ent NVMe FIPS CM6 MU 3.2TB + 1028 2110 Dell Ent NVMe FIPS CM6 MU 6.4TB +- 1e0f 0001 Generic NVMe CM6 RI 3.84TB ++ 1e0f 0001 Generic NVMe CM6 + 0009 NVMe SSD + 1e0f 0001 Toshiba RC500 NVMe SSD 500GB ++ 0011 NVMe SSD Controller CD7 ++ 1028 2189 DC NVMe SED CD7 RI 960GB ++ 1028 218a DC NVMe CD7 RI 960GB ++ 1028 218b DC NVMe SED CD7 RI 1.92TB ++ 1028 218c DC NVMe CD7 RI 1.92TB ++ 1028 218d DC NVMe SED CD7 RI 3.84TB ++ 1028 218e DC NVMe CD7 RI 3.84TB ++ 1028 218f DC NVMe SED CD7 RI 7.68TB ++ 1028 2190 DC NVMe CD7 RI 7.68TB ++ 1028 2191 DC NVMe SED CD7 RI 15.36TB ++ 1028 2192 DC NVMe CD7 RI 15.36TB + 1e17 Arnold & Richter Cine Technik GmbH & Co. Betriebs KG + 1e24 Squirrels Research Labs + 0101 Acorn CLE-101 +@@ -24296,7 +24481,7 @@ + 0102 Xplorer X1600 + # https://www.medion.com/ + 1e39 MEDION AG +-1e3b Shenzhen DAPU Microelectronics Co., Ltd ++1e3b DapuStor Corporation + 0600 NVMe SSD Controller DPU600 + 1e3b 0030 Enterprise NVMe SSD U.2 3.84TB (J5100) + 1e3b 0031 Enterprise NVMe SSD U.2 7.68TB (J5100) +@@ -24359,6 +24544,7 @@ + 1e3b 0091 Enterprise NVMe SSD HHHL 0.75TB (H3900) + 1e3d Burlywood, Inc + 1e49 Yangtze Memory Technologies Co.,Ltd ++ 0041 ZHITAI TiPro7000 + # YMTC PCIe/NVMe SSD + 1013 PC210 + 1e4b MAXIO Technology (Hangzhou) Ltd. +@@ -24377,6 +24563,9 @@ + 0000 0100 PY8800 64GB Accelerator + 1e59 Oxford Nanopore Technologies + 0001 MinION Mk1C ++1e5d ASR Microelectronics ++ 7000 AI controller A7000 ++ 7010 AI controller A7010 + 1e60 Hailo Technologies Ltd. + 2864 Hailo-8 AI Processor + 1e68 Jiangsu Xinsheng Intelligent Technology Co., Ltd +@@ -24414,14 +24603,22 @@ + 1eab Hefei DATANG Storage Technology Co.,LTD. + 300a NVMe SSD Controller 300A + 300b NVMe SSD Controller 300B ++1eac Quectel Wireless Solutions Co., Ltd. ++ 1001 EM120R-GL LTE Modem ++ 1002 EM160R-GL LTE Modem + 1eae XFX Limited + 1eb1 VeriSilicon Inc + 1001 Video Accelerator ++1eb4 Quantum Nebula Microelectronics Technology Co.,Ltd. ++ 3401 SSD Contoller + 1ebd EMERGETECH Company Ltd. + 0101 Seirios 2063 Video Codec + 1ed2 FuriosaAI, Inc. + 0000 Warboy + 1ed3 Yeston ++1ed5 Moore Threads Technology Co.,Ltd ++ 0100 MTT S10 ++ 0101 MTT S30 + 1ed8 Digiteq Automotive + 0101 FG4 PCIe Frame Grabber + 1ed9 Myrtle.ai +@@ -24439,6 +24636,13 @@ + 5220 IG5220-Based NVMe SSD + 5236 IG5236-Based NVMe SSD + 5636 IG5636-Based NVMe SSD ++1f2f China Mobile (Hangzhou) Information Technology Co.Ltd. ++ 1513 DERA MENG NVMe Controller ++ 1f2f 6113 KM660 U.2 1.6TB NVMe SSD ++ 1f2f 6114 KM560 U.2 1.92TB NVMe SSD ++ 1f2f 6115 KM660 U.2 3.2TB NVMe SSD ++ 1f2f 6116 KM560 U.2 3.84TB NVMe SSD ++ 1f2f 6118 KM560 U.2 7.68TB NVMe SSD + 1fab Unifabrix Ltd. + 0000 Nexus Alpha IVPU + # nee Tumsan Oy +@@ -25182,6 +25386,12 @@ + 1400 CooVOX TDM GSM Module + 1600 CooVOX TDM E1/T1 Module + 1800 CooVOX TDM BRI Module ++6766 Glenfly Tech Co., Ltd. ++ 3d00 Arise-GT-10C0 ++ 3d02 Arise 1020 ++ 3d40 Arise-GT-10C0 High Definition Audio Controller ++ 3d41 Arise 1020 High Definition Audio Controller ++6899 ZT Systems + # nee Qumranet + 6900 Red Hat, Inc. + 7063 pcHDTV +@@ -25194,6 +25404,9 @@ + 7401 EndRun Technologies + e100 PTP3100 PCIe PTP Slave Clock + 7470 TP-LINK Technologies Co., Ltd. ++7526 HongQin (Beijing) Technology Co., Ltd. ++ 0082 HQ SSD 1TB ++ 0083 HQ SSD 2TB M.2 NVMe + 7604 O.N. Electronic Co Ltd. + 7bde MIDAC Corporation + 7fed PowerTV +@@ -26006,6 +26219,12 @@ + 1028 2102 NVMe RI U.2 1.92TB (P5500) + 1028 2103 NVMe RI U.2 3.84TB (P5500) + 1028 2104 NVMe RI U.2 7.68TB (P5500) ++ 1028 219a NVMe P5316 RI 15.36TB ++ 1028 219b NVMe P5316 RI 30.72TB ++ 1028 219c NVMe SED P5316 RI 15.36 ++ 1028 219d NVMe SED P5316 RI 30.72 ++ 1028 219e NVMe FIPS P5316 RI 15.36TB ++ 1028 219f NVMe FIPS P5316 RI 30.72 + 8086 8008 NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510) + 8086 8d08 NVMe Datacenter SSD [3DNAND] VE 2.5" U.2 (P5316) + 8086 8d1d NVMe Datacenter SSD [3DNAND] VE E1.L 9.5/18mm (P5316) +@@ -26114,8 +26333,15 @@ + 8086 0001 Ethernet Controller XXV710 Intel(R) FPGA Programmable Acceleration Card N3000 for Networking + 0d9f Ethernet Controller (2) I225-IT + 0dd2 Ethernet Network Adapter I710 ++ 1137 0000 I710T4LG 4x1 GbE RJ45 PCIe NIC ++ 1137 02e3 I710T4LG 4x1 GbE RJ45 PCIe NIC ++ 8086 0000 Ethernet Network Adapter I710-T4L + 8086 000d Ethernet Network Adapter I710-T4L + 8086 0010 Ethernet Network Adapter I710-T4L for OCP 3.0 ++ 8086 401a Ethernet Network Adapter I710-T4L ++ 8086 401b Ethernet Network Adapter I710-T4L for OCP 3.0 ++ 0dda Ethernet Connection X722 for 10GbE SFP+ ++ 1bd4 0076 Ethernet Connection X722 for 10GbE SFP+ + 0e00 Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 + 1028 04f7 Xeon E5 v2 on PowerEdge R320 server + 15d9 066b X9SRL-F +@@ -27466,6 +27692,7 @@ + 8086 000c Ethernet 100G 2P E810-C OCP + 8086 000d Ethernet Network Adapter E810-L-Q2 for OCP 3.0 + 8086 000e Ethernet Network Adapter E810-2C-Q2 ++ 8086 0010 Ethernet 100G 2P E810-C-stg Adapter + 1593 Ethernet Controller E810-C for SFP + 1137 02c3 E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC + 8086 0002 Ethernet Network Adapter E810-L-2 +@@ -27478,7 +27705,10 @@ + 8086 000c Ethernet Network Adapter E810-XXV-4 for OCP 3.0 + 8086 000d Ethernet 25G 4P E810-XXV OCP + 8086 000e Ethernet Network Adapter E810-XXV-4T ++ 8086 000f Ethernet 25G 4P E810-XXV-stg Adapter ++ 8086 0010 Ethernet 25G 4P E810-XXV-st Adapter + 1599 Ethernet Controller E810-XXV for backplane ++ 8086 0001 Ethernet 25G 2P E810-XXV-k Mezz + 159a Ethernet Controller E810-XXV for QSFP + 159b Ethernet Controller E810-XXV for SFP + 1137 02be E810XXVDA2 2x25/10 GbE SFP28 PCIe NIC +@@ -31187,6 +31417,7 @@ + 3432 5520/5500/X58 Chipset QuickData Technology Device + 3433 5520/5500/X58 Chipset QuickData Technology Device + 3438 7500/5520/5500/X58 I/O Hub Throttle Registers ++ 347e Ice Lake Xeon Non-Transparent Bridge + 3482 Ice Lake-LP LPC Controller + 34a3 Ice Lake-LP SMBus Controller + 34a4 Ice Lake-LP SPI Controller +@@ -31997,8 +32228,10 @@ + 8086 02a4 Wireless-AC 9462 + 444e Turbo Memory Controller + 460d 12th Gen Core Processor PCI Express x16 Controller #1 ++ 461d Alder Lake Innovation Platform Framework Processor Participant + 461e Alder Lake-P Thunderbolt 4 USB Controller + 461f Alder Lake-P Thunderbolt 4 PCI Express Root Port #3 ++ 4626 Alder Lake-P Integrated Graphics Controller + 4629 12th Gen Core Processor Host Bridge/DRAM Registers + 462f Alder Lake-P Thunderbolt 4 PCI Express Root Port #2 + 463d 12th Gen Core Processor PCI Express x4 Controller #2 +@@ -32007,6 +32240,7 @@ + 4641 12th Gen Core Processor Host Bridge/DRAM Registers + 464d 12th Gen Core Processor PCI Express x4 Controller #0 + 464f 12th Gen Core Processor Gaussian & Neural Accelerator ++ 4660 12th Gen Core Processor Host Bridge/DRAM Registers + 466d Alder Lake-P Thunderbolt 4 NHI #1 + 466e Alder Lake-P Thunderbolt 4 PCI Express Root Port #0 + 467d Platform Monitoring Technology +@@ -32015,6 +32249,7 @@ + 46a0 AlderLake-P GT2 + 46a1 UHD Graphics + 46a3 Alder Lake-P GT1 [UHD Graphics] ++ 46a6 Alder Lake-P Integrated Graphics Controller + 46c0 AlderLake-M GT1 + 4905 DG1 [Iris Xe MAX Graphics] + 4906 DG1 [Iris Xe Pod] +@@ -32026,8 +32261,9 @@ + 4c8b RocketLake-S GT1 [UHD Graphics 730] + 4c90 RocketLake-S GT1 [UHD Graphics P750] + 4c9a RocketLake-S [UHD Graphics] +- 4da3 JaserLake SMBus +- 4da4 JaserLake SPI (flash) Controller ++ 4da3 Jasper Lake SMBus ++ 4da4 Jasper Lake SPI Controller ++ 4dc8 Jasper Lake HD Audio + 4de0 Management Engine Interface + 4de8 Serial IO I2C Host Controller + 4de9 Serial IO I2C Host Controller +@@ -32088,8 +32324,11 @@ + 504b EP80579 Reserved + 504c EP80579 Integrated Processor with QuickAssist TDM + 5181 Alder Lake PCH-P LPC/eSPI Controller ++ 5182 Alder Lake PCH eSPI Controller + 51a3 Alder Lake PCH-P SMBus Host Controller + 51a4 Alder Lake-P PCH SPI Controller ++ 51a8 Alder Lake PCH UART #0 ++ 51a9 Alder Lake PCH UART #1 + 51bf Alder Lake PCH-P PCI Express Root Port #9 + 51c5 Alder Lake-P Serial IO I2C Controller #0 + 51c6 Alder Lake-P Serial IO I2C Controller #1 +@@ -32471,6 +32710,20 @@ + 10b4 202f Lightspeed 740 + 8086 0000 Terminator 2x/i + 8086 0100 Intel740 Graphics Accelerator ++# Unlike other PCH components. The eSPI controller is specific to each chipset model ++ 7a84 Z690 Chipset LPC/eSPI Controller ++ 7aa3 Alder Lake-S PCH SMBus Controller ++ 7aa4 Alder Lake-S PCH SPI Controller ++ 7aa7 Alder Lake-S PCH Shared SRAM ++ 7ab4 Alder Lake-S PCH PCI Express Root Port #13 ++ 7abd Alder Lake-S PCH PCI Express Root Port #6 ++ 7acc Alder Lake-S PCH I2C Controller #0 ++ 7ad0 Alder Lake-S HD Audio Controller ++ 7ae0 Alder Lake-S PCH USB 3.2 Gen 2x2 XHCI Controller ++ 7ae2 Alder Lake-S PCH SATA Controller [AHCI Mode] ++ 7ae8 Alder Lake-S PCH HECI Controller #1 ++ 7af0 Alder Lake-S PCH CNVi WiFi ++ 8086 0094 Wi-Fi 6 AX201 160MHz + 8002 Trusted Execution Technology Registers + 8003 Trusted Execution Technology Registers + 8100 US15W/US15X SCH [Poulsbo] Host Bridge +@@ -32840,6 +33093,7 @@ + 1028 09be Latitude 7410 + 9b63 10th Gen Core Processor Host Bridge/DRAM Registers + 9b64 10th Gen Core Processor Host Bridge/DRAM Registers ++ 9ba8 CometLake-S GT1 [UHD Graphics 610] + 9bc4 CometLake-H GT2 [UHD Graphics] + 9bc5 CometLake-S GT2 [UHD Graphics 630] + 9bc8 CometLake-S GT2 [UHD Graphics 630] +@@ -33040,6 +33294,7 @@ + 9d3d Sunrise Point-LP Active Management Technology - SOL + 103c 8079 EliteBook 840 G3 + 17aa 2247 ThinkPad T570 ++ 9d3e iTouch Controller + 9d43 Sunrise Point-LP LPC Controller + 17aa 382a B51-80 Laptop + 9d46 LPC/eSPI Controller +@@ -33094,6 +33349,7 @@ + 9da4 Cannon Point-LP SPI Controller + 9da8 Cannon Point-LP Serial IO UART Controller #2 + 9daa Cannon Point-LP Serial IO SPI Controller ++ 9dab Cannon Point-LP Serial IO SPI Controller + 9db0 Cannon Point-LP PCI Express Root Port #9 + 9db1 Cannon Point-LP PCI Express Root Port #10 + 9db2 Cannon Point-LP PCI Express Root Port #1 +@@ -33104,6 +33360,7 @@ + 9dbc Cannon Point-LP PCI Express Root Port #5 + 9dbe Cannon Point-LP PCI Express Root Port #7 + 9dbf Cannon Point PCI Express Root Port #8 ++ 9dc4 Cannon Point-LP SD Host Controller + 9dc5 Cannon Point-LP Serial IO I2C Host Controller + 9dc8 Cannon Point-LP High Definition Audio Controller + 1028 089e Inspiron 5482 +@@ -33467,7 +33724,7 @@ + a397 Comet Lake PCI Express Root Port #08 + a398 Comet Lake PCI Express Root Port 9 + a39a Comet Lake PCI Express Root Port 11 +- a3a1 Memory controller ++ a3a1 Cannon Lake PCH Power Management Controller + a3a3 Comet Lake PCH-V SMBus Host Controller + a3af Comet Lake PCH-V USB Controller + a3b1 Comet Lake PCH-V Thermal Subsystem +@@ -33958,6 +34215,8 @@ + 1bd4 0070 RS0800M5E24i + 1bd4 0071 RS0800M5H16i + 1bd4 0072 RS0800M5E16i ++ 1cc4 0101 Ramaxel FBGF-RAD PM8204 ++ 1cc4 0201 Ramaxel FBGF-RAD PM8222 + 1d49 0220 ThinkSystem 4350-8i SAS/SATA 12Gb HBA + 1d49 0221 ThinkSystem 4350-16i SAS/SATA 12Gb HBA + 1d49 0520 ThinkSystem RAID 5350-8i PCIe 12Gb Adapter +@@ -34244,6 +34503,8 @@ cddd Tyzx, Inc. + 0101 DeepSea 1 High Speed Stereo Vision Frame Grabber + 0200 DeepSea 2 High Speed Stereo Vision Frame Grabber + ceba KEBA AG ++cf86 Spectrum-4TOR ++ 0276 Spectrum-4TOR in Flash Recovery Mode + d161 Digium, Inc. + 0120 Wildcard TE120P single-span T1/E1/J1 card + 0205 Wildcard TE205P/TE207P dual-span T1/E1/J1 card 5.0V +@@ -34728,8 +34989,7 @@ C 11 Signal processing controller + 80 Signal processing controller + C 12 Processing accelerators + 00 Processing accelerators +-# For the class of PCI attached devices which perform a function of Deep Learning Neural Network inference acceleration +- 01 AI Inference Accelerator ++ 01 SNIA Smart Data Accelerator Interface (SDXI) controller + C 13 Non-Essential Instrumentation + C 40 Coprocessor + C ff Unassigned class +diff --git a/hwdb.d/pnp_id_registry.html b/hwdb.d/pnp_id_registry.html +index 9b98e18c66..a1d6f63bcd 100644 +--- a/hwdb.d/pnp_id_registry.html ++++ b/hwdb.d/pnp_id_registry.html +@@ -2499,6 +2499,9 @@ + Kopin CorporationKOP10/01/2021 + Anker Innovations LimitedAKR12/10/2021 + SAMPO CORPORATIONSPO12/10/2021 ++ Shiftall Inc.SFL12/31/2021 ++ AudioControlAUD12/31/2021 ++ Schneider Consumer GroupSCA02/08/2022 + + + +diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids +index 1b9f9f82ba..d02e59f5e2 100644 +--- a/hwdb.d/usb.ids ++++ b/hwdb.d/usb.ids +@@ -9,8 +9,8 @@ + # The latest version can be obtained from + # http://www.linux-usb.org/usb.ids + # +-# Version: 2021.10.24 +-# Date: 2021-10-24 20:34:08 ++# Version: 2022.03.18 ++# Date: 2022-03-18 20:34:09 + # + + # Vendors, devices and interfaces. Please keep sorted. +@@ -2712,6 +2712,8 @@ + 0845 ConferenceCam CC3000e Camera + 0846 ConferenceCam CC3000e Speakerphone + 084b ConferenceCam Connect Video ++ 084c ConferenceCam Connect Audio ++ 084e ConferenceCam Connect + 0850 QuickCam Web + 0857 Logi Group Speakerphone + 085c C922 Pro Stream Webcam +@@ -2764,7 +2766,7 @@ + 08d7 QuickCam Communicate STX + 08d8 QuickCam for Notebook Deluxe + 08d9 QuickCam IM/Connect +- 08da QuickCam Messanger ++ 08da QuickCam Messenger + 08dd QuickCam for Notebooks + 08e0 QuickCam Express + 08e1 Labtec Webcam +@@ -2903,7 +2905,7 @@ + c06a USB Optical Mouse + c06b G700 Wireless Gaming Mouse + c06c Optical Mouse +- c077 M105 Optical Mouse ++ c077 Mouse + c07c M-R0017 [G700s Rechargeable Gaming Mouse] + c07d G502 Mouse + c07e G402 Gaming Mouse +@@ -2911,7 +2913,7 @@ + c083 G403 Prodigy Gaming Mouse + c084 G203 Gaming Mouse + c08b G502 SE HERO Gaming Mouse +- c092 G203 LIGHTSYNC Gaming Mouse ++ c092 G102/G203 LIGHTSYNC Gaming Mouse + c101 UltraX Media Remote + c110 Harmony 785/880/885 Remote + c111 Harmony 525 Remote +@@ -3060,6 +3062,7 @@ + c532 Unifying Receiver + c534 Unifying Receiver + c537 Cordless Mouse Receiver ++ c539 Cordless Mouse Receiver + c53a PowerPlay Wireless Charging System + c53d G631 Keyboard + c603 3Dconnexion Spacemouse Plus XT +@@ -19572,10 +19575,11 @@ + 5512 CH341 in EPP/MEM/I2C mode, EPP/I2C adapter + 5523 CH341 in serial mode, usb to serial port converter + 5584 CH341 in parallel mode, usb to printer port converter ++ 7522 CH340 serial converter + 7523 CH340 serial converter + 752d CH345 MIDI adapter + 7584 CH340S +- e008 HID-based serial adapater ++ e008 HID-based serial adapter + 1a89 Dynalith Systems Co., Ltd. + 1a8b SGS Taiwan Ltd. + 1a8d BandRich, Inc. +@@ -20338,7 +20342,7 @@ + 6052 APB Team Robotic Development Board + 6053 Darkgame Controller + 6054 Satlab/AAUSAT3 BlueBox +- 6055 RADiuS ER900TRS-02 transciever with SMA Connector ++ 6055 RADiuS ER900TRS-02 transceiver with SMA Connector + 6056 The Glitch + 6057 OpenPipe MIDI Shield + 6058 Novena OTG port +@@ -20475,10 +20479,10 @@ + 60ec Duet 2 WiFi or Duet 2 Ethernet 3D printer control electronics + 60ed Duet 2 Maestro 3D printer control electronics + 60ee Duet 3 motion control electronics +- 60f0 UDAD-T1 data aquisition device (boot) +- 60f1 UDAD-T1 data aquisition device +- 60f2 UDAD-T2 data aquisition device (boot) +- 60f3 UDAD-T2 data aquisition device ++ 60f0 UDAD-T1 data acquisition device (boot) ++ 60f1 UDAD-T1 data acquisition device ++ 60f2 UDAD-T2 data acquisition device (boot) ++ 60f3 UDAD-T2 data acquisition device + 60f4 Uniti ARC motor controller + 60f5 EightByEight Blinky Badge (DFU) + 60f6 EightByEight Blinky Badge +@@ -20494,6 +20498,7 @@ + 6118 Thomson MO5 keyboard + 6122 Ultimate Hacking Keyboard + 614c dwtk In-Circuit Emulator ++ 614d Generic Display + 8085 Box0 (box0-v5) + cc15 rad1o badge for CCC summer camp 2015 + 1d57 Xenta +@@ -20511,7 +20516,7 @@ + ad03 [T3] 2.4GHz and IR Air Mouse Remote Control + af01 AUVIO Universal Remote Receiver for PlayStation 3 + af03 Wireless Receiver +- fa20 2.4GHz Wireless Reciever (Mini Keyboard & Mouse) ++ fa20 2.4GHz Wireless Receiver (Mini Keyboard & Mouse) + 1d5b Smartronix, Inc. + 1d5c Fresco Logic + 2000 FL2000/FL2000DX VGA/DVI/HDMI Adapter +@@ -20819,7 +20824,12 @@ + 0001 Wi-Fi Body Scale (WBS01) + 1fba DERMALOG Identification Systems GmbH + 1fbd Delphin Technology AG +- 0001 Expert Key - Data aquisition system ++ 0001 Expert Key - Data acquisition system ++ 0004 MetiOS Device (RNDIS) ++ 0005 Loggito ++ 0006 LoggitoLab 8 AI-RTD ++ 0007 LoggitoLab 8 TC ++ 0008 LoggitoLab 4 AI-RTD 4 TC + 1fc9 NXP Semiconductors + 0003 LPC1343 + 000c LPC4330FET180 [ARM Cortex M4 + M0] (device firmware upgrade mode) +@@ -22644,6 +22654,14 @@ + f190 MSO-19 + f280 MSO-28 + f281 MSO-28 ++3197 Katusha ++ 1001 M151 ++ 1002 M250 ++ 1003 P130 ++ 1004 M130 ++ 1101 P247 ++ 1102 M247 ++ 1103 M348 + 31c9 BeiJing LanXum Computer Technology Co., Ltd. + 1001 Printer + 1301 Black and White Laser Printer +@@ -23238,7 +23256,12 @@ + 0780 CS780 Microphone Input + 07d3 BLOB boot loader firmware + 07dc Bluetooth 4.0* Smart Ready (low energy) ++ 0a66 RealSense 3D Camera (Front F200) ++ 0aa5 RealSense SR300 ++ 0ad2 RealSense D410 ++ 0ad3 RealSense D415 + 0b07 RealSense D435 ++ 0b64 RealSense L515 + 0dad Cherry MiniatureCard Keyboard + 1010 AnyPoint(TM) Home Network 10 Mbps Phoneline Adapter + 110a Bluetooth Controller from (Ericsson P4A) +@@ -23264,6 +23287,7 @@ + 9303 8x930Hx Hub + 9500 CE 9500 DVB-T + 9890 82930 Test Board ++ a36d Host Controller + beef SCM Miniature Card Reader/Writer + c013 Wireless HID Station + dead Galileo +@@ -23278,7 +23302,6 @@ + 0032 AX210 Bluetooth + 0716 Modem Flashloader + 07da Centrino Bluetooth Wireless Transceiver +- 8087 07da Centrino Advanced-N 6235 + 07db Atom C2000 Root Hub + 07dc Bluetooth wireless interface + 07eb Oaktrail tablet diff --git a/SOURCES/0296-hwdb-update-autosuspend-entries.patch b/SOURCES/0296-hwdb-update-autosuspend-entries.patch new file mode 100644 index 0000000..ea3feae --- /dev/null +++ b/SOURCES/0296-hwdb-update-autosuspend-entries.patch @@ -0,0 +1,78 @@ +From 67c40c730543daaa6ca87216afb9b777def06167 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 29 Mar 2022 12:22:21 +0200 +Subject: [PATCH] hwdb: update autosuspend entries + +(cherry picked from commit f1589efb7fe4ed71c0f73dded61d5925c06cd71e) + +Related: #2087778 +--- + hwdb.d/60-autosuspend-fingerprint-reader.hwdb | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb +index 91a0793747..b44e3e328b 100644 +--- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb ++++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb +@@ -148,6 +148,7 @@ usb:v04F3p0C58* + # Supported by libfprint driver elanmoc + usb:v04F3p0C7D* + usb:v04F3p0C7E* ++usb:v04F3p0C82* + ID_AUTOSUSPEND=1 + ID_PERSIST=0 + +@@ -185,7 +186,6 @@ usb:v06CBp00DF* + usb:v06CBp00F9* + usb:v06CBp00FC* + usb:v06CBp00C2* +-usb:v06CBp00C9* + usb:v06CBp0100* + usb:v06CBp00F0* + usb:v06CBp0103* +@@ -272,15 +272,19 @@ usb:v06CBp008A* + usb:v06CBp009A* + usb:v06CBp009B* + usb:v06CBp00A2* ++usb:v06CBp00A8* + usb:v06CBp00B7* + usb:v06CBp00BB* + usb:v06CBp00BE* + usb:v06CBp00C4* + usb:v06CBp00CB* ++usb:v06CBp00C9* + usb:v06CBp00D8* + usb:v06CBp00DA* ++usb:v06CBp00DC* + usb:v06CBp00E7* + usb:v06CBp00E9* ++usb:v06CBp00FD* + usb:v0A5Cp5801* + usb:v0A5Cp5805* + usb:v0A5Cp5834* +@@ -292,6 +296,7 @@ usb:v0A5Cp5844* + usb:v0A5Cp5845* + usb:v0BDAp5812* + usb:v10A5p0007* ++usb:v10A5p9200* + usb:v1188p9545* + usb:v138Ap0007* + usb:v138Ap003A* +@@ -309,6 +314,7 @@ usb:v1491p0088* + usb:v16D1p1027* + usb:v1C7Ap0300* + usb:v1C7Ap0575* ++usb:v1C7Ap0576* + usb:v27C6p5042* + usb:v27C6p5110* + usb:v27C6p5117* +@@ -328,7 +334,9 @@ usb:v27C6p55A2* + usb:v27C6p55A4* + usb:v27C6p55B4* + usb:v27C6p5740* ++usb:v27C6p5E0A* + usb:v2808p9338* ++usb:v298Dp2020* + usb:v298Dp2033* + usb:v3538p0930* + ID_AUTOSUSPEND=1 diff --git a/SOURCES/0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch b/SOURCES/0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch new file mode 100644 index 0000000..182a097 --- /dev/null +++ b/SOURCES/0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch @@ -0,0 +1,117 @@ +From 24ac19e1816ab2ec93360d346edd16e3f678bf47 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Wed, 6 Apr 2022 11:56:05 +0200 +Subject: [PATCH] hwdb: drop boilerplate about match patterns being unstable + +We've had this text since the beginning, but in fact the patterns must be +stable in order for people to create local hwdb entries. And we support that +and can't change the match patterns without being very careful. So let's just +drop the text. + +(cherry picked from commit adbe000e3df5f91572bf4a77a2acd84ff5b87320) + +Related: #2087778 +--- + hwdb.d/60-evdev.hwdb | 5 ----- + hwdb.d/60-input-id.hwdb | 5 ----- + hwdb.d/60-keyboard.hwdb | 5 ----- + hwdb.d/60-sensor.hwdb | 5 ----- + hwdb.d/70-mouse.hwdb | 5 ----- + hwdb.d/70-pointingstick.hwdb | 4 ---- + 6 files changed, 29 deletions(-) + +diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb +index 9fcb4a3ddf..c97cd13557 100644 +--- a/hwdb.d/60-evdev.hwdb ++++ b/hwdb.d/60-evdev.hwdb +@@ -3,11 +3,6 @@ + # The lookup keys are composed in: + # 60-evdev.rules + # +-# Note: The format of the "evdev:" prefix match key is a contract between the +-# rules file and the hardware data, it might change in later revisions to +-# support more or better matches, it is not necessarily expected to be a stable +-# ABI. +-# + # Match string formats: + # evdev: + # evdev:name::dmi: +diff --git a/hwdb.d/60-input-id.hwdb b/hwdb.d/60-input-id.hwdb +index 2d5681dea6..802ed9a1e7 100644 +--- a/hwdb.d/60-input-id.hwdb ++++ b/hwdb.d/60-input-id.hwdb +@@ -3,11 +3,6 @@ + # The lookup keys are composed in: + # 60-input-id.rules + # +-# Note: The format of the "input-id:" prefix match key is a contract between +-# the rules file and the hardware data, it might change in later revisions to +-# support more or better matches, it is not necessarily expected to be a stable +-# ABI. +-# + # Match string formats: + # id-input:modalias: + # +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index c196a1fd64..7c830fb9b1 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -13,11 +13,6 @@ + # The lookup keys are composed in: + # 60-evdev.rules + # +-# Note: The format of the "evdev:" prefix match key is a contract between the +-# rules file and the hardware data, it might change in later revisions to +-# support more or better matches, it is not necessarily expected to be a stable +-# ABI. +-# + # Supported hardware matches are: + # - Generic input devices match: + # evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index ea278913bc..b54539bf53 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -3,11 +3,6 @@ + # The lookup keys are composed in: + # 60-sensor.rules + # +-# Note: The format of the "sensor:" prefix match key is a contract between the +-# rules file and the hardware data, it might change in later revisions to +-# support more or better matches, it is not necessarily expected to be a stable +-# ABI. +-# + # Match string formats: + # sensor:modalias::dmi: + # +diff --git a/hwdb.d/70-mouse.hwdb b/hwdb.d/70-mouse.hwdb +index 723d145e34..4084019bde 100644 +--- a/hwdb.d/70-mouse.hwdb ++++ b/hwdb.d/70-mouse.hwdb +@@ -6,11 +6,6 @@ + # The lookup keys are composed in: + # 70-mouse.rules + # +-# Note: The format of the "mouse:" prefix match key is a contract between the +-# rules file and the hardware data, it might change in later revisions to +-# support more or better matches, it is not necessarily expected to be a stable +-# ABI. +-# + # Match key format: + # mouse::vp:name:: + # +diff --git a/hwdb.d/70-pointingstick.hwdb b/hwdb.d/70-pointingstick.hwdb +index 6039119b6a..00f28c6034 100644 +--- a/hwdb.d/70-pointingstick.hwdb ++++ b/hwdb.d/70-pointingstick.hwdb +@@ -7,10 +7,6 @@ + # The lookup keys are composed in: + # 60-evdev.rules + # +-# Note: The format of the "evdev:" prefix match key is a contract between the +-# rules file and the hardware data, it might change in later revisions to +-# support more or better matches, it is not necessarily a stable ABI. +-# + # Supported hardware matches are: + # - Generic input devices match: + # evdev:input:bZZZZvYYYYpXXXXeWWWW-VVVV diff --git a/SOURCES/0298-hwdb-Update-60-keyboard.hwdb-23074.patch b/SOURCES/0298-hwdb-Update-60-keyboard.hwdb-23074.patch new file mode 100644 index 0000000..ee2a858 --- /dev/null +++ b/SOURCES/0298-hwdb-Update-60-keyboard.hwdb-23074.patch @@ -0,0 +1,34 @@ +From 6575ea8356de2fc9b2aeadca2a8fbe60ef8eb0cf Mon Sep 17 00:00:00 2001 +From: davijosw <82056592+davijosw@users.noreply.github.com> +Date: Mon, 18 Apr 2022 08:51:45 -0300 +Subject: [PATCH] hwdb: Update 60-keyboard.hwdb (#23074) + +Fix Fn+F1 (toggle touchpad) that wasn't working. + +Closes #23058 + +(cherry picked from commit 39cd62c30c2e6bb5ec13ebc1ecf0d37ed015b1b8) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 7c830fb9b1..adf5e9ac35 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -1931,6 +1931,13 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnViewSonic:pnVPAD10:* + KEYBOARD_KEY_db=prog1 # Home button + KEYBOARD_KEY_dd=back # Second button labeled Back + ++########################################################### ++# Positivo-Vaio ++########################################################### ++# Vaio FE14 ++evdev:name:AT Translated Set 2 keyboard:dmi:bvn*:bvr*:bd*:svnPositivoBahia-VAIO:pnVJFE41F11*:pvr*:* ++ KEYBOARD_KEY_76=f21 # Fn+F1 toggle touchpad ++ + ########################################################### + # Other + ########################################################### diff --git a/SOURCES/0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch b/SOURCES/0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch new file mode 100644 index 0000000..ad1870f --- /dev/null +++ b/SOURCES/0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch @@ -0,0 +1,35 @@ +From e964195c2b0a68a83f265f19e76a2de285bf5768 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Mon, 18 Apr 2022 20:36:39 +0200 +Subject: [PATCH] hwdb: 60-keyboard: Add Acer Aspire One AO532h keymappings + +Add keymappings for the Acer Aspire One AO532h netbook. + +Unmap the brightnesskeys because they send duplicate key events with +the ACPI video bus key events and add a mapping for the bluetooth +on/off hotkey. + +(cherry picked from commit 5e3b8aeef30f8b46669280ecffc178fa43c8bf00) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index adf5e9ac35..2555b8d35a 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -154,6 +154,12 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*7750G:* + KEYBOARD_KEY_e0=!pageup + ++# Acer Aspire One AO532h ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO532h:* ++ KEYBOARD_KEY_84=bluetooth ++ KEYBOARD_KEY_ce=unknown # Brightness Up, also emitted by acpi-video, ignore ++ KEYBOARD_KEY_ef=unknown # Brightness Down, also emitted by acpi-video, ignore ++ + # Predator PH 315-52 + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnPredator*PH*315-52:* + KEYBOARD_KEY_ef=kbdillumup # Fn+F10 diff --git a/SOURCES/0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch b/SOURCES/0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch new file mode 100644 index 0000000..c844d01 --- /dev/null +++ b/SOURCES/0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch @@ -0,0 +1,24 @@ +From a5b4cee7ab052df914d482aa2d0ea52c5eed8b04 Mon Sep 17 00:00:00 2001 +From: Matthew Blythe +Date: Thu, 21 Apr 2022 00:50:13 -0600 +Subject: [PATCH] hwdb 60-keyboard Add HP/Compaq KBR0133 + +(cherry picked from commit 6ae16e01b59e4e06ecb14db55e9f34396b398014) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 2555b8d35a..e1c124d8b9 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -282,6 +282,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnCompaq*:pn*Evo*N*:* + KEYBOARD_KEY_9f=homepage + + evdev:input:b0003v049Fp0051* ++evdev:input:b0003v049Fp008D* + KEYBOARD_KEY_0c0011=presentation + KEYBOARD_KEY_0c0012=addressbook + KEYBOARD_KEY_0c0013=info diff --git a/SOURCES/0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch b/SOURCES/0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch new file mode 100644 index 0000000..652c2df --- /dev/null +++ b/SOURCES/0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch @@ -0,0 +1,34 @@ +From 3be73821644f6626df5c8261b301caa84f4599a6 Mon Sep 17 00:00:00 2001 +From: davijosw <82056592+davijosw@users.noreply.github.com> +Date: Thu, 21 Apr 2022 22:41:37 -0300 +Subject: [PATCH] hwdb: add resolutions for the Vaio FE14 touchpad (#23136) + +(cherry picked from commit 2338b8f9c56e0b14f25e8633f6e8e636e68638c8) + +Related: #2087778 +--- + hwdb.d/60-evdev.hwdb | 11 +++++++++++ + 1 file changed, 11 insertions(+) + +diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb +index c97cd13557..a7fbf2ad4d 100644 +--- a/hwdb.d/60-evdev.hwdb ++++ b/hwdb.d/60-evdev.hwdb +@@ -624,6 +624,17 @@ evdev:input:b0003v258Ap001E* + EVDEV_ABS_35=::15 + EVDEV_ABS_36=::15 + ++######################################### ++# Positivo-Vaio ++######################################### ++ ++# Vaio FE14 ++evdev:name:SYNA3602:00 0911:5288 Touchpad:dmi:*svnPositivoBahia-VAIO:pnVJFE41F11* ++ EVDEV_ABS_00=::28 ++ EVDEV_ABS_01=::27 ++ EVDEV_ABS_35=::28 ++ EVDEV_ABS_36=::27 ++ + ######################################### + # Razer + ######################################### diff --git a/SOURCES/0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch b/SOURCES/0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch new file mode 100644 index 0000000..44dc98a --- /dev/null +++ b/SOURCES/0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch @@ -0,0 +1,29 @@ +From 79e73005cfb020a90aaf322c1bbc7a67b1ccfd4e Mon Sep 17 00:00:00 2001 +From: Benjamin Berg +Date: Fri, 22 Apr 2022 15:59:34 +0200 +Subject: [PATCH] hwdb: Remap micmute to f20 for ASUS WMI hotkeys + +For micmute userspace handles both micmute and f20, as Xorg cannot +handle the high keycode that the micmute key has. As such, adding the +remapping means that the key will work on Xorg clients and not just when +using wayland. + +(cherry picked from commit 386885c4e6e3908c26582caddb07dead12713aa1) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index e1c124d8b9..f78bc6d9cb 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -233,6 +233,7 @@ evdev:name:Asus WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* + evdev:name:Eee PC WMI hotkeys:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* + evdev:name:Asus Laptop extra buttons:dmi:bvn*:bvr*:bd*:svnASUS*:pn*:* + KEYBOARD_KEY_6b=f21 # Touchpad Toggle ++ KEYBOARD_KEY_7c=f20 # Remap micmute to f20 + + # USB keyboard in Asus FX503VD + evdev:input:b0003v0B05p1869* diff --git a/SOURCES/0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch b/SOURCES/0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch new file mode 100644 index 0000000..afdde98 --- /dev/null +++ b/SOURCES/0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch @@ -0,0 +1,27 @@ +From 8f1b3e4da6e030ac04319a44dcdcc5e0d09d7ecd Mon Sep 17 00:00:00 2001 +From: Lance +Date: Fri, 22 Apr 2022 04:22:34 -0700 +Subject: [PATCH] hwdb: Fix rotation for HP Pro Tablet 408 G1 + +(cherry picked from commit 6dc18ca5ddd996ffbf83b42cb45f23496fe38c9d) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index b54539bf53..d6a584150c 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -453,6 +453,10 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:* + sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:* + ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 + ++# HP Pro Tablet 408 G1 ++sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPProTablet408:*:rn8048:* ++ ACCEL_MOUNT_MATRIX=0, 1, 0; -1, 0, 0; 0, 0, 1 ++ + ######################################### + # I.T.Works + ######################################### diff --git a/SOURCES/0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch b/SOURCES/0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch new file mode 100644 index 0000000..0e7f517 --- /dev/null +++ b/SOURCES/0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch @@ -0,0 +1,39 @@ +From ec796ff877b7e02b7bb261558ff7f9a411548f83 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Wed, 27 Apr 2022 17:32:21 +0900 +Subject: [PATCH] hwdb: add keyboard mapping for HP ProBook 11G2 + +Closes #23108. + +(cherry picked from commit d10329a08eb06ea4348a7411092404a1d935b5a8) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index f78bc6d9cb..9b06bab54d 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -724,6 +724,11 @@ evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*ProBook*455*G5*:* + KEYBOARD_KEY_85=unknown # lid close; also reported via special evdev + KEYBOARD_KEY_f8=wlan # Wireless HW switch button + ++# HP ProBook 11G2 ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPProBook11G2*:pvr* ++ KEYBOARD_KEY_d8=!f23 # Fn+F2: touchpad off ++ KEYBOARD_KEY_d9=!f22 # Fn+F2: touchpad on ++ + # HP mt44 Mobile Thin Client + evdev:atkbd:dmi:bvn*:bvr*:svnHP*:pnHP*mt44*Mobile*Thin*Client*:* + KEYBOARD_KEY_64=calendar # Calendar icon (Fn + F12) +@@ -1692,7 +1697,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn*700T*:* + + # Galaxy Book (2021) NP750XDA-KD4SE + evdev:atkbd:dmi:bvn*:bvr*:bd*:svn[sS][aA][mM][sS][uU][nN][gG]*:pn750XDA:pvr* +- KEYBOARD_KEY_81=!esc ++ KEYBOARD_KEY_81=!esc + KEYBOARD_KEY_ce=!prog1 # Fn+F1 launch settings + KEYBOARD_KEY_ae=!volumedown # Fn+F7 volume down + KEYBOARD_KEY_b0=!volumeup # Fn+F8 volume up diff --git a/SOURCES/0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch b/SOURCES/0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch new file mode 100644 index 0000000..6465235 --- /dev/null +++ b/SOURCES/0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch @@ -0,0 +1,29 @@ +From f644073dc9ab0213afa9b44a9378166c400b398e Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 28 Apr 2022 17:41:48 +0200 +Subject: [PATCH] hwdb: make sure "ninja update-hwdb" works on f35 + +let's restore compatibility with pyparsing from fedora 35, i.e.: + +python3-pyparsing-2.4.7-9.fc35.noarch + +(cherry picked from commit 133a0003691daafaefa378f770ae01d01931787d) + +Related: #2087778 +--- + hwdb.d/ids_parser.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hwdb.d/ids_parser.py b/hwdb.d/ids_parser.py +index 811c12559b..ed2c615508 100755 +--- a/hwdb.d/ids_parser.py ++++ b/hwdb.d/ids_parser.py +@@ -20,7 +20,7 @@ COMMENTLINE = pythonStyleComment + EOL + EMPTYLINE = LineEnd() + text_eol = lambda name: Regex(r'[^\n]+')(name) + EOL + +-ParserElement.set_default_whitespace_chars(' \n') ++ParserElement.setDefaultWhitespaceChars(' \n') + + def klass_grammar(): + klass_line = Literal('C ').suppress() + NUM2('klass') + text_eol('text') diff --git a/SOURCES/0306-hwbd-run-update-hwdb-for-v251-rc2.patch b/SOURCES/0306-hwbd-run-update-hwdb-for-v251-rc2.patch new file mode 100644 index 0000000..f3e5160 --- /dev/null +++ b/SOURCES/0306-hwbd-run-update-hwdb-for-v251-rc2.patch @@ -0,0 +1,8002 @@ +From 40f014e06a4f06ad1dde387cf07dcaabdabab278 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 28 Apr 2022 17:37:34 +0200 +Subject: [PATCH] hwbd: run "update-hwdb" for v251-rc2 + +(cherry picked from commit e21f7a133f079e33e1649cea6a45a2ef0c1399bd) + +Related: #2087778 +--- + hwdb.d/20-OUI.hwdb | 947 ++++++++++++++++- + hwdb.d/20-acpi-vendor.hwdb | 4 +- + hwdb.d/20-acpi-vendor.hwdb.patch | 4 +- + hwdb.d/20-pci-vendor-model.hwdb | 240 ++++- + hwdb.d/20-usb-vendor-model.hwdb | 30 + + hwdb.d/acpi_id_registry.html | 2 +- + hwdb.d/ma-large.txt | 1685 +++++++++++++++++++++++++----- + hwdb.d/ma-medium.txt | 670 ++++++++---- + hwdb.d/ma-small.txt | 653 ++++++++---- + hwdb.d/pci.ids | 123 ++- + hwdb.d/pnp_id_registry.html | 2 +- + hwdb.d/usb.ids | 14 +- + 12 files changed, 3661 insertions(+), 713 deletions(-) + +diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb +index 4b8f83cc99..aaa3326325 100644 +--- a/hwdb.d/20-OUI.hwdb ++++ b/hwdb.d/20-OUI.hwdb +@@ -19875,7 +19875,7 @@ OUI:0019FA* + ID_OUI_FROM_DATABASE=Cable Vision Electronics CO., LTD. + + OUI:0019FB* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:0019FC* + ID_OUI_FROM_DATABASE=PT. Ufoakses Sukses Luarbiasa +@@ -31478,6 +31478,9 @@ OUI:003DE8* + OUI:003EE1* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:003F10* ++ ID_OUI_FROM_DATABASE=Shenzhen GainStrong Technology Co., Ltd. ++ + OUI:004000* + ID_OUI_FROM_DATABASE=PCI COMPONENTES DA AMZONIA LTD + +@@ -32246,6 +32249,9 @@ OUI:0040FE* + OUI:0040FF* + ID_OUI_FROM_DATABASE=TELEBIT CORPORATION + ++OUI:00410E* ++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ + OUI:0041B4* + ID_OUI_FROM_DATABASE=Wuxi Zhongxing Optoelectronics Technology Co.,Ltd. + +@@ -33029,6 +33035,9 @@ OUI:005218* + OUI:0052C2* + ID_OUI_FROM_DATABASE=peiker acustic GmbH + ++OUI:0052C8* ++ ID_OUI_FROM_DATABASE=Made Studio Design Ltd. ++ + OUI:00549F* + ID_OUI_FROM_DATABASE=Avaya Inc + +@@ -36585,7 +36594,7 @@ OUI:00A2FF* + ID_OUI_FROM_DATABASE=abatec group AG + + OUI:00A388* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:00A38E* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc +@@ -39750,7 +39759,7 @@ OUI:0425F0* + ID_OUI_FROM_DATABASE=Nokia + + OUI:042605* +- ID_OUI_FROM_DATABASE=GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH ++ ID_OUI_FROM_DATABASE=Bosch Building Automation GmbH + + OUI:042665* + ID_OUI_FROM_DATABASE=Apple, Inc. +@@ -39761,6 +39770,9 @@ OUI:042728* + OUI:042758* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:04292E* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:042AE2* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -39878,6 +39890,9 @@ OUI:044F17* + OUI:044F4C* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:044F7A* ++ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. ++ + OUI:044F8B* + ID_OUI_FROM_DATABASE=Adapteva, Inc. + +@@ -40107,7 +40122,7 @@ OUI:047F0E* + ID_OUI_FROM_DATABASE=Barrot Technology Limited + + OUI:04819B* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:0481AE* + ID_OUI_FROM_DATABASE=Clack Corporation +@@ -40223,6 +40238,9 @@ OUI:04A316* + OUI:04A3F3* + ID_OUI_FROM_DATABASE=Emicon + ++OUI:04A741* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:04A82A* + ID_OUI_FROM_DATABASE=Nokia Corporation + +@@ -40263,7 +40281,7 @@ OUI:04B6BE* + ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD + + OUI:04B86A* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:04B97D* + ID_OUI_FROM_DATABASE=AiVIS Co., Itd. +@@ -40400,6 +40418,9 @@ OUI:04C991* + OUI:04C9D9* + ID_OUI_FROM_DATABASE=Dish Technologies Corp + ++OUI:04CAED* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:04CB1D* + ID_OUI_FROM_DATABASE=Traka plc + +@@ -40523,6 +40544,9 @@ OUI:04D7A5* + OUI:04D921* + ID_OUI_FROM_DATABASE=Occuspace + ++OUI:04D9C8* ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. ++ + OUI:04D9F5* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + +@@ -40598,6 +40622,9 @@ OUI:04E795* + OUI:04E892* + ID_OUI_FROM_DATABASE=SHENNAN CIRCUITS CO.,LTD + ++OUI:04E8B9* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:04E9E5* + ID_OUI_FROM_DATABASE=PJRC.COM, LLC + +@@ -41747,6 +41774,9 @@ OUI:089BF1* + OUI:089C86* + ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd. + ++OUI:089DF4* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:089E01* + ID_OUI_FROM_DATABASE=Quanta Computer Inc. + +@@ -41825,6 +41855,9 @@ OUI:08B4B1* + OUI:08B4CF* + ID_OUI_FROM_DATABASE=Abicom International + ++OUI:08B61F* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:08B738* + ID_OUI_FROM_DATABASE=Lite-On Technogy Corp. + +@@ -42062,6 +42095,9 @@ OUI:08F1EA* + OUI:08F2F4* + ID_OUI_FROM_DATABASE=Net One Partners Co.,Ltd. + ++OUI:08F3FB* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:08F458* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -42596,6 +42632,51 @@ OUI:0C7D7C* + OUI:0C7FB2* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:0C7FED0* ++ ID_OUI_FROM_DATABASE=Guangdong Tianshu New Energy Technology Co., Ltd ++ ++OUI:0C7FED1* ++ ID_OUI_FROM_DATABASE=Toast, Inc. ++ ++OUI:0C7FED2* ++ ID_OUI_FROM_DATABASE=Tango Networks Inc ++ ++OUI:0C7FED3* ++ ID_OUI_FROM_DATABASE=Soft dB ++ ++OUI:0C7FED4* ++ ID_OUI_FROM_DATABASE=Purple Mountain ,Inc ++ ++OUI:0C7FED5* ++ ID_OUI_FROM_DATABASE=ShenZhen TianGang Micro Technology CO.LTD ++ ++OUI:0C7FED6* ++ ID_OUI_FROM_DATABASE=Netweb Technologies India Pvt Ltd ++ ++OUI:0C7FED7* ++ ID_OUI_FROM_DATABASE=Grandway Technology (Shenzhen) Limited ++ ++OUI:0C7FED8* ++ ID_OUI_FROM_DATABASE=U-tec Group Inc. ++ ++OUI:0C7FED9* ++ ID_OUI_FROM_DATABASE=Shenzhen ORVIBO Technology Co., Ltd. ++ ++OUI:0C7FEDA* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:0C7FEDB* ++ ID_OUI_FROM_DATABASE=TelX Systems ++ ++OUI:0C7FEDC* ++ ID_OUI_FROM_DATABASE=Shenzhen MoreSense Technology Co., Ltd. ++ ++OUI:0C7FEDD* ++ ID_OUI_FROM_DATABASE=ALT Co., Ltd. ++ ++OUI:0C7FEDE* ++ ID_OUI_FROM_DATABASE=environmental systems corporation ++ + OUI:0C8063* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -42743,6 +42824,9 @@ OUI:0C9043* + OUI:0C9160* + ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD + ++OUI:0C9192* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:0C924E* + ID_OUI_FROM_DATABASE=Rice Lake Weighing Systems + +@@ -42884,6 +42968,9 @@ OUI:0CBC9F* + OUI:0CBD51* + ID_OUI_FROM_DATABASE=TCT mobile ltd + ++OUI:0CBEF1* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:0CBF15* + ID_OUI_FROM_DATABASE=Genetec Inc. + +@@ -43155,7 +43242,7 @@ OUI:0CF893* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + + OUI:0CF9C0* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:0CFC83* + ID_OUI_FROM_DATABASE=Airoha Technology Corp., +@@ -43754,6 +43841,9 @@ OUI:1071F9* + OUI:107223* + ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO + ++OUI:1073EB* ++ ID_OUI_FROM_DATABASE=Infiniti Electro-Optics ++ + OUI:10746F* + ID_OUI_FROM_DATABASE=MOTOROLA SOLUTIONS MALAYSIA SDN. BHD. + +@@ -45614,6 +45704,9 @@ OUI:184C08* + OUI:184CAE* + ID_OUI_FROM_DATABASE=CONTINENTAL + ++OUI:184E03* ++ ID_OUI_FROM_DATABASE=HMD Global Oy ++ + OUI:184E16* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -45839,6 +45932,9 @@ OUI:1879A2* + OUI:187A3B* + ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company + ++OUI:187A3E* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:187A93* + ID_OUI_FROM_DATABASE=AMICCOM Electronics Corporation + +@@ -46091,6 +46187,9 @@ OUI:18A9A6* + OUI:18AA0F* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:18AA1E* ++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd ++ + OUI:18AA45* + ID_OUI_FROM_DATABASE=Fon Technology + +@@ -46208,6 +46307,9 @@ OUI:18C293* + OUI:18C2BF* + ID_OUI_FROM_DATABASE=BUFFALO.INC + ++OUI:18C300* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:18C451* + ID_OUI_FROM_DATABASE=Tucson Embedded Systems + +@@ -46379,6 +46481,9 @@ OUI:18E829* + OUI:18E8DD* + ID_OUI_FROM_DATABASE=MODULETEK + ++OUI:18E91D* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:18ECE7* + ID_OUI_FROM_DATABASE=BUFFALO.INC + +@@ -46526,6 +46631,9 @@ OUI:1C0B52* + OUI:1C0D7D* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:1C0ED3* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:1C0FAF* + ID_OUI_FROM_DATABASE=Lucid Vision Labs + +@@ -46793,6 +46901,9 @@ OUI:1C4593* + OUI:1C45C2* + ID_OUI_FROM_DATABASE=Huizhou City Sunsin lntelligent Technology Co.,Ltd + ++OUI:1C46D1* ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED ++ + OUI:1C472F* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -47409,7 +47520,7 @@ OUI:1C9F4E* + ID_OUI_FROM_DATABASE=COOSEA GROUP (HK) COMPANY LIMITED + + OUI:1CA0B8* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:1CA0D30* + ID_OUI_FROM_DATABASE=OOO Tekhnotronika +@@ -47867,6 +47978,9 @@ OUI:1CEEC9* + OUI:1CEEE8* + ID_OUI_FROM_DATABASE=Ilshin Elecom + ++OUI:1CEF03* ++ ID_OUI_FROM_DATABASE=Guangzhou V-SOLUTION Electronic Technology Co., Ltd. ++ + OUI:1CEFCE* + ID_OUI_FROM_DATABASE=bebro electronic GmbH + +@@ -47888,6 +48002,9 @@ OUI:1CF4CA* + OUI:1CF5E7* + ID_OUI_FROM_DATABASE=Turtle Industry Co., Ltd. + ++OUI:1CF8D0* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:1CFA68* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -47957,6 +48074,9 @@ OUI:2002AF* + OUI:20040F* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:2004F3* ++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. ++ + OUI:200505* + ID_OUI_FROM_DATABASE=RADMAX COMMUNICATION PRIVATE LIMITED + +@@ -48225,7 +48345,7 @@ OUI:2047DA* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + + OUI:2047ED* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:204AAA* + ID_OUI_FROM_DATABASE=Hanscan Spain S.A. +@@ -48563,6 +48683,9 @@ OUI:209BCD* + OUI:209BE6* + ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited + ++OUI:209CB4* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:209E79* + ID_OUI_FROM_DATABASE=Universal Electronics, Inc. + +@@ -49136,6 +49259,9 @@ OUI:2426D6* + OUI:2428FD* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + ++OUI:242934* ++ ID_OUI_FROM_DATABASE=Google, Inc. ++ + OUI:2429FE* + ID_OUI_FROM_DATABASE=KYOCERA Corporation + +@@ -49160,6 +49286,9 @@ OUI:243154* + OUI:243184* + ID_OUI_FROM_DATABASE=SHARP Corporation + ++OUI:2432AE* ++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. ++ + OUI:24336C* + ID_OUI_FROM_DATABASE=Private + +@@ -49608,7 +49737,7 @@ OUI:24A799* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + + OUI:24A7DC* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:24A87D* + ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Asia Pacific(Thailand)Co.,Ltd. +@@ -49910,6 +50039,9 @@ OUI:24FD52* + OUI:24FD5B* + ID_OUI_FROM_DATABASE=SmartThings, Inc. + ++OUI:28011C* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:280244* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -50315,6 +50447,9 @@ OUI:2852F9* + OUI:28534E* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:2853E0* ++ ID_OUI_FROM_DATABASE=Sintela Ltd ++ + OUI:285471* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -50423,6 +50558,9 @@ OUI:2876CD* + OUI:287777* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:2877B1* ++ ID_OUI_FROM_DATABASE=Tri plus grupa d.o.o. ++ + OUI:2877F1* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -50663,6 +50801,9 @@ OUI:28BAB5* + OUI:28BB59* + ID_OUI_FROM_DATABASE=RNET Technologies, Inc. + ++OUI:28BC05* ++ ID_OUI_FROM_DATABASE=BLU Products Inc ++ + OUI:28BC18* + ID_OUI_FROM_DATABASE=SourcingOverseas Co. Ltd + +@@ -50691,7 +50832,7 @@ OUI:28C0DA* + ID_OUI_FROM_DATABASE=Juniper Networks + + OUI:28C13C* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:28C21F* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) +@@ -51800,6 +51941,9 @@ OUI:2C91AB* + OUI:2C922C* + ID_OUI_FROM_DATABASE=Kishu Giken Kogyou Company Ltd,. + ++OUI:2C93FB* ++ ID_OUI_FROM_DATABASE=Sercomm France Sarl ++ + OUI:2C9464* + ID_OUI_FROM_DATABASE=Cincoze Co., Ltd. + +@@ -51872,6 +52016,9 @@ OUI:2CA539* + OUI:2CA59C* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + ++OUI:2CA774* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:2CA780* + ID_OUI_FROM_DATABASE=True Technologies Inc. + +@@ -52199,6 +52346,9 @@ OUI:3003C8* + OUI:30045C* + ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd. + ++OUI:300505* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:30053F* + ID_OUI_FROM_DATABASE=JTI Co.,Ltd. + +@@ -52736,6 +52886,9 @@ OUI:306118* + OUI:30636B* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:306371* ++ ID_OUI_FROM_DATABASE=Shenzhenshi Xinzhongxin Technology Co.Ltd ++ + OUI:3065EC* + ID_OUI_FROM_DATABASE=Wistron (ChongQing) + +@@ -53576,6 +53729,9 @@ OUI:3438AF* + OUI:3438B7* + ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. + ++OUI:343A20* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:343D98* + ID_OUI_FROM_DATABASE=JinQianMao Technology Co.,Ltd. + +@@ -53855,6 +54011,9 @@ OUI:3484E4* + OUI:348511* + ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd + ++OUI:348518* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:348584* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + +@@ -54410,6 +54569,9 @@ OUI:34FCEF* + OUI:34FD6A* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:34FE1C* ++ ID_OUI_FROM_DATABASE=CHOUNG HWA TECH CO.,LTD ++ + OUI:34FE77* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -54461,6 +54623,9 @@ OUI:3809A4* + OUI:380A0A* + ID_OUI_FROM_DATABASE=Sky-City Communication and Electronics Limited Company + ++OUI:380A4F* ++ ID_OUI_FROM_DATABASE=PRACHI ENTERPRISES ++ + OUI:380A94* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -54617,6 +54782,9 @@ OUI:3822D6* + OUI:3822E2* + ID_OUI_FROM_DATABASE=HP Inc. + ++OUI:3822F4* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:38256B* + ID_OUI_FROM_DATABASE=Microsoft Mobile Oy + +@@ -54827,6 +54995,9 @@ OUI:385B44* + OUI:385C76* + ID_OUI_FROM_DATABASE=PLANTRONICS, INC. + ++OUI:385CFB* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:385F66* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -54980,6 +55151,9 @@ OUI:388479* + OUI:388602* + ID_OUI_FROM_DATABASE=Flexoptix GmbH + ++OUI:3886F7* ++ ID_OUI_FROM_DATABASE=Google, Inc. ++ + OUI:3887D5* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -55079,6 +55253,9 @@ OUI:38A067* + OUI:38A28C* + ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD. + ++OUI:38A44B* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:38A4ED* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -55092,7 +55269,7 @@ OUI:38A659* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + + OUI:38A6CE* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:38A851* + ID_OUI_FROM_DATABASE=Moog, Ing +@@ -55427,6 +55604,9 @@ OUI:38E595* + OUI:38E60A* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:38E7C0* ++ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD ++ + OUI:38E7D8* + ID_OUI_FROM_DATABASE=HTC Corporation + +@@ -55467,7 +55647,7 @@ OUI:38F098* + ID_OUI_FROM_DATABASE=Vapor Stone Rail Systems + + OUI:38F0C8* +- ID_OUI_FROM_DATABASE=Mevo Inc. ++ ID_OUI_FROM_DATABASE=Logitech + + OUI:38F135* + ID_OUI_FROM_DATABASE=SensorTec-Canada +@@ -55679,6 +55859,9 @@ OUI:3C08F6* + OUI:3C096D* + ID_OUI_FROM_DATABASE=Powerhouse Dynamics + ++OUI:3C0B4F* ++ ID_OUI_FROM_DATABASE=Yandex Services AG ++ + OUI:3C0C48* + ID_OUI_FROM_DATABASE=Servergy, Inc. + +@@ -56001,7 +56184,7 @@ OUI:3C438E* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + + OUI:3C457A* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:3C4645* + ID_OUI_FROM_DATABASE=Shanghai Infinity Wireless Technologies Co.,Ltd. +@@ -56033,6 +56216,9 @@ OUI:3C4DBE* + OUI:3C4E47* + ID_OUI_FROM_DATABASE=Etronic A/S + ++OUI:3C4E56* ++ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++ + OUI:3C510E* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -56274,7 +56460,7 @@ OUI:3C8970* + ID_OUI_FROM_DATABASE=Neosfar + + OUI:3C8994* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:3C89A6* + ID_OUI_FROM_DATABASE=KAPELSE +@@ -56367,7 +56553,7 @@ OUI:3C9D56* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + + OUI:3C9EC7* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:3C9F81* + ID_OUI_FROM_DATABASE=Shenzhen CATIC Bit Communications Technology Co.,Ltd +@@ -56591,6 +56777,9 @@ OUI:3CDFBD* + OUI:3CE038* + ID_OUI_FROM_DATABASE=Omnifi Inc. + ++OUI:3CE064* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:3CE072* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -56618,6 +56807,9 @@ OUI:3CE624* + OUI:3CE824* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:3CE90E* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:3CE9F7* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -56732,6 +56924,9 @@ OUI:3CFB96* + OUI:3CFDFE* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:3CFEAC* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:3CFFD8* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -56774,6 +56969,9 @@ OUI:400E67* + OUI:400E85* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + ++OUI:400EF3* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:4011750* + ID_OUI_FROM_DATABASE=Lexi Devices, Inc. + +@@ -56876,6 +57074,9 @@ OUI:401D59* + OUI:402230* + ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd. + ++OUI:4022D8* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:4022ED* + ID_OUI_FROM_DATABASE=Digital Projection Ltd + +@@ -57152,6 +57353,9 @@ OUI:405D82* + OUI:405EE1* + ID_OUI_FROM_DATABASE=Shenzhen H&T Intelligent Control Co.,Ltd. + ++OUI:405EF6* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:405F7D* + ID_OUI_FROM_DATABASE=TCT mobile ltd + +@@ -57542,6 +57746,9 @@ OUI:40BF17* + OUI:40C245* + ID_OUI_FROM_DATABASE=Shenzhen Hexicom Technology Co., Ltd. + ++OUI:40C3BC* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:40C3C6* + ID_OUI_FROM_DATABASE=SnapRoute + +@@ -57638,6 +57845,9 @@ OUI:40DEAD* + OUI:40DF02* + ID_OUI_FROM_DATABASE=LINE BIZ Plus + ++OUI:40E171* ++ ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd. ++ + OUI:40E1E4* + ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG + +@@ -57815,6 +58025,9 @@ OUI:40F52E* + OUI:40F6BC* + ID_OUI_FROM_DATABASE=Amazon Technologies Inc. + ++OUI:40F8DF* ++ ID_OUI_FROM_DATABASE=CANON INC. ++ + OUI:40F946* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -58883,6 +59096,9 @@ OUI:48022A* + OUI:480286* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + ++OUI:4802AF* ++ ID_OUI_FROM_DATABASE=Telit Communication s.p.a ++ + OUI:480362* + ID_OUI_FROM_DATABASE=DESAY ELECTRONICS(HUIZHOU)CO.,LTD + +@@ -59024,6 +59240,9 @@ OUI:482759* + OUI:4827C5* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:4827E2* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:4827EA* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -59321,6 +59540,9 @@ OUI:486FD2* + OUI:48701E* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:48706F* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:487119* + ID_OUI_FROM_DATABASE=SGB GROUP LTD. + +@@ -59534,6 +59756,9 @@ OUI:48AA5D* + OUI:48AD08* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:48AD9A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:48B02D* + ID_OUI_FROM_DATABASE=NVIDIA Corporation + +@@ -59981,6 +60206,9 @@ OUI:4C2FD7* + OUI:4C3089* + ID_OUI_FROM_DATABASE=Thales Transportation Systems GmbH + ++OUI:4C312D* ++ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd. ++ + OUI:4C322D* + ID_OUI_FROM_DATABASE=TELEDATA NETWORKS + +@@ -60176,6 +60404,9 @@ OUI:4C617E* + OUI:4C6255* + ID_OUI_FROM_DATABASE=SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V. + ++OUI:4C627B* ++ ID_OUI_FROM_DATABASE=SmartCow AI Technologies Taiwan Ltd. ++ + OUI:4C6371* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -60261,7 +60492,7 @@ OUI:4C7167* + ID_OUI_FROM_DATABASE=PoLabs d.o.o. + + OUI:4C7274* +- ID_OUI_FROM_DATABASE=shenzhenshi xinzhongxin Technology Co.Ltd ++ ID_OUI_FROM_DATABASE=Shenzhenshi Xinzhongxin Technology Co.Ltd + + OUI:4C72B9* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION +@@ -61470,7 +61701,7 @@ OUI:506F9A* + ID_OUI_FROM_DATABASE=Wi-Fi Alliance + + OUI:507043* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:507097* + ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. +@@ -62054,6 +62285,9 @@ OUI:50F0D3* + OUI:50F14A* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:50F261* ++ ID_OUI_FROM_DATABASE=Photon Sail Technologies ++ + OUI:50F43C* + ID_OUI_FROM_DATABASE=Leeo Inc + +@@ -62324,6 +62558,9 @@ OUI:542F8A* + OUI:543131* + ID_OUI_FROM_DATABASE=Raster Vision Ltd + ++OUI:5431D4* ++ ID_OUI_FROM_DATABASE=TGW Mechanics GmbH ++ + OUI:5433CB* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -62357,6 +62594,9 @@ OUI:543B30* + OUI:543D37* + ID_OUI_FROM_DATABASE=Ruckus Wireless + ++OUI:543D92* ++ ID_OUI_FROM_DATABASE=WIRELESS-TEK TECHNOLOGY LIMITED ++ + OUI:543E64* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + +@@ -62375,6 +62615,9 @@ OUI:544408* + OUI:5444A3* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:544538* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:544617* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -63134,6 +63377,9 @@ OUI:5819F8* + OUI:581CBD* + ID_OUI_FROM_DATABASE=Affinegy + ++OUI:581CF8* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:581D91* + ID_OUI_FROM_DATABASE=Advanced Mobile Telecom co.,ltd. + +@@ -63218,6 +63464,9 @@ OUI:58278C* + OUI:582AF7* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:582B0A* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:582BDB* + ID_OUI_FROM_DATABASE=Pax AB + +@@ -63695,6 +63944,9 @@ OUI:58AEF1* + OUI:58B035* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:58B03E* ++ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd ++ + OUI:58B0D4* + ID_OUI_FROM_DATABASE=ZuniData Systems Inc. + +@@ -63704,6 +63956,9 @@ OUI:58B0FE* + OUI:58B10F* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:58B38F* ++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd ++ + OUI:58B3FC* + ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD. + +@@ -63761,6 +64016,9 @@ OUI:58C356* + OUI:58C38B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:58C57E* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:58C583* + ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED + +@@ -64322,6 +64580,9 @@ OUI:5C5EAB* + OUI:5C5F67* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:5C60BA* ++ ID_OUI_FROM_DATABASE=HP Inc. ++ + OUI:5C6199* + ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + +@@ -65789,6 +66050,9 @@ OUI:60CE86* + OUI:60CE92* + ID_OUI_FROM_DATABASE=The Refined Industry Company Limited + ++OUI:60CF69* ++ ID_OUI_FROM_DATABASE=meerecompany ++ + OUI:60D02C* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -66092,6 +66356,9 @@ OUI:640DE6* + OUI:640E36* + ID_OUI_FROM_DATABASE=TAZTAG + ++OUI:640E6A* ++ ID_OUI_FROM_DATABASE=SECO-LARM USA Inc ++ + OUI:640E94* + ID_OUI_FROM_DATABASE=Pluribus Networks, Inc. + +@@ -67355,6 +67622,9 @@ OUI:68536C* + OUI:685388* + ID_OUI_FROM_DATABASE=P&S Technology + ++OUI:68539D* ++ ID_OUI_FROM_DATABASE=EM Microelectronic ++ + OUI:68545A* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -67409,6 +67679,9 @@ OUI:686359* + OUI:68644B* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:6865B7* ++ ID_OUI_FROM_DATABASE=Zhishang Chuanglian Technology Co., Ltd ++ + OUI:686725* + ID_OUI_FROM_DATABASE=Espressif Inc. + +@@ -67508,6 +67781,9 @@ OUI:687924* + OUI:6879ED* + ID_OUI_FROM_DATABASE=SHARP Corporation + ++OUI:687A64* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:687CC8* + ID_OUI_FROM_DATABASE=Measurement Systems S. de R.L. + +@@ -67523,6 +67799,9 @@ OUI:687DB4* + OUI:687F74* + ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC + ++OUI:687FF0* ++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited ++ + OUI:6881E0* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -67778,6 +68057,9 @@ OUI:68B8D9* + OUI:68B983* + ID_OUI_FROM_DATABASE=b-plus GmbH + ++OUI:68B9C2* ++ ID_OUI_FROM_DATABASE=Earda Technologies co Ltd ++ + OUI:68B9D3* + ID_OUI_FROM_DATABASE=Shenzhen Trolink Technology CO, LTD + +@@ -67847,6 +68129,9 @@ OUI:68D79A* + OUI:68D925* + ID_OUI_FROM_DATABASE=ProSys Development Services + ++OUI:68D927* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:68D93C* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -67877,6 +68162,9 @@ OUI:68DDD9* + OUI:68DFDD* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:68E154* ++ ID_OUI_FROM_DATABASE=SiMa.ai ++ + OUI:68E166* + ID_OUI_FROM_DATABASE=Private + +@@ -67908,7 +68196,7 @@ OUI:68EC62* + ID_OUI_FROM_DATABASE=YODO Technology Corp. Ltd. + + OUI:68EC8A* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=IKEA of Sweden AB + + OUI:68ECC5* + ID_OUI_FROM_DATABASE=Intel Corporate +@@ -67919,6 +68207,9 @@ OUI:68ED43* + OUI:68EDA4* + ID_OUI_FROM_DATABASE=Shenzhen Seavo Technology Co.,Ltd + ++OUI:68EE88* ++ ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp. ++ + OUI:68EE96* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -68207,6 +68498,9 @@ OUI:6C2F2C* + OUI:6C2F8A* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:6C302A* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:6C310E* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -68420,6 +68714,9 @@ OUI:6C5E7A* + OUI:6C5F1C* + ID_OUI_FROM_DATABASE=Lenovo Mobile Communication Technology Ltd. + ++OUI:6C60D0* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:6C60EB* + ID_OUI_FROM_DATABASE=ZHI YUAN ELECTRONICS CO., LIMITED + +@@ -68480,6 +68777,9 @@ OUI:6C71D9* + OUI:6C7220* + ID_OUI_FROM_DATABASE=D-Link International + ++OUI:6C724A* ++ ID_OUI_FROM_DATABASE=Onkyo Technology K.K. ++ + OUI:6C72E7* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -68640,7 +68940,7 @@ OUI:6C9E7C* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + + OUI:6CA0B4* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:6CA100* + ID_OUI_FROM_DATABASE=Intel Corporate +@@ -68789,6 +69089,9 @@ OUI:6CC1D2* + OUI:6CC217* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:6CC242* ++ ID_OUI_FROM_DATABASE=Shenzhen Skyworth Digital Technology CO., Ltd ++ + OUI:6CC26B* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -69150,7 +69453,7 @@ OUI:701F53* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + + OUI:702084* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:702393* + ID_OUI_FROM_DATABASE=fos4X GmbH +@@ -69342,7 +69645,7 @@ OUI:704FB8* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + + OUI:7050AF* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:7050E70* + ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd. +@@ -75372,7 +75675,7 @@ OUI:70B3D572E* + ID_OUI_FROM_DATABASE=Maharsystem + + OUI:70B3D572F* +- ID_OUI_FROM_DATABASE=AVA Technologies Inc. ++ ID_OUI_FROM_DATABASE=Ava Technologies + + OUI:70B3D5730* + ID_OUI_FROM_DATABASE=Videogenix +@@ -82460,6 +82763,9 @@ OUI:7412B3* + OUI:7412BB* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + ++OUI:7413EA* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:741489* + ID_OUI_FROM_DATABASE=SRT Wireless + +@@ -82643,6 +82949,9 @@ OUI:7433A6* + OUI:743400* + ID_OUI_FROM_DATABASE=MTG Co., Ltd. + ++OUI:74342B* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:7434AE* + ID_OUI_FROM_DATABASE=this is engineering Inc. + +@@ -82655,6 +82964,9 @@ OUI:74372F* + OUI:74373B* + ID_OUI_FROM_DATABASE=UNINET Co.,Ltd. + ++OUI:74375F* ++ ID_OUI_FROM_DATABASE=SERCOMM PHILIPPINES INC ++ + OUI:743889* + ID_OUI_FROM_DATABASE=ANNAX Anzeigesysteme GmbH + +@@ -82670,6 +82982,9 @@ OUI:743A65* + OUI:743AEF* + ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD. + ++OUI:743AF4* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:743C18* + ID_OUI_FROM_DATABASE=Taicang T&W Electronics + +@@ -82709,6 +83024,9 @@ OUI:744687* + OUI:7446A0* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:7446B3* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:744AA4* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -83411,6 +83729,9 @@ OUI:74E6B8* + OUI:74E6E2* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:74E798* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:74E7C6* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + +@@ -83826,7 +84147,7 @@ OUI:783D5B* + ID_OUI_FROM_DATABASE=TELNET Redes Inteligentes S.A. + + OUI:783E53* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:783F15* + ID_OUI_FROM_DATABASE=EasySYNC Ltd. +@@ -84419,6 +84740,9 @@ OUI:78BEBD* + OUI:78C1A7* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:78C213* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:78C2C00* + ID_OUI_FROM_DATABASE=Shenzhen ELI Technology co.,ltd + +@@ -84920,6 +85244,9 @@ OUI:7C0A50* + OUI:7C0BC6* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:7C0C92* ++ ID_OUI_FROM_DATABASE=Suzhou Mobydata Smart System Co.,Ltd. ++ + OUI:7C0CF6* + ID_OUI_FROM_DATABASE=Guangdong Huiwei High-tech Co., Ltd. + +@@ -85188,7 +85515,7 @@ OUI:7C4C58* + ID_OUI_FROM_DATABASE=Scale Computing, Inc. + + OUI:7C4CA5* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:7C4E09* + ID_OUI_FROM_DATABASE=Shenzhen Skyworth Wireless Technology Co.,Ltd +@@ -85250,6 +85577,9 @@ OUI:7C6166* + OUI:7C6193* + ID_OUI_FROM_DATABASE=HTC Corporation + ++OUI:7C6305* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:7C6456* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -85262,6 +85592,9 @@ OUI:7C66EF* + OUI:7C67A2* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:7C67AB* ++ ID_OUI_FROM_DATABASE=Roku, Inc ++ + OUI:7C696B* + ID_OUI_FROM_DATABASE=Atmosic Technologies + +@@ -85937,6 +86270,9 @@ OUI:7CDD90* + OUI:7CDDE9* + ID_OUI_FROM_DATABASE=ATOM tech Inc. + ++OUI:7CDE78* ++ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd ++ + OUI:7CDFA1* + ID_OUI_FROM_DATABASE=Espressif Inc. + +@@ -86096,21 +86432,45 @@ OUI:8002F40* + OUI:8002F41* + ID_OUI_FROM_DATABASE=Sichuan lookout environment protection technology co.,Ltd + ++OUI:8002F42* ++ ID_OUI_FROM_DATABASE=Beijing Cybercore ++ + OUI:8002F43* + ID_OUI_FROM_DATABASE=Shenzhen Suanzi Technology Co., Ltd + ++OUI:8002F44* ++ ID_OUI_FROM_DATABASE=Infors AG ++ + OUI:8002F45* + ID_OUI_FROM_DATABASE=Sichuan Fanyi Technology Co. Ltd. + ++OUI:8002F46* ++ ID_OUI_FROM_DATABASE=Mech-Mind Robotics Technologies Ltd. ++ ++OUI:8002F47* ++ ID_OUI_FROM_DATABASE=Lazer Safe Pty Ltd ++ ++OUI:8002F48* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ + OUI:8002F49* + ID_OUI_FROM_DATABASE=XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. + + OUI:8002F4A* + ID_OUI_FROM_DATABASE=PassiveLogic + ++OUI:8002F4B* ++ ID_OUI_FROM_DATABASE=Baicells Technologies Co., Ltd ++ + OUI:8002F4C* + ID_OUI_FROM_DATABASE=Wuhan Glory Road Intelligent Technology Co., Ltd. + ++OUI:8002F4D* ++ ID_OUI_FROM_DATABASE=Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd ++ ++OUI:8002F4E* ++ ID_OUI_FROM_DATABASE=Alfred Systems Inc ++ + OUI:800384* + ID_OUI_FROM_DATABASE=Ruckus Wireless + +@@ -86210,6 +86570,9 @@ OUI:801934* + OUI:801967* + ID_OUI_FROM_DATABASE=Shanghai Reallytek Information Technology Co.,Ltd + ++OUI:801970* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:8019FE* + ID_OUI_FROM_DATABASE=JianLing Technology CO., LTD + +@@ -86405,6 +86768,9 @@ OUI:8050F6* + OUI:80546A* + ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT + ++OUI:80549C* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:8054D9* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -86523,7 +86889,7 @@ OUI:80717A* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + + OUI:807215* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:807264* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. +@@ -86538,7 +86904,7 @@ OUI:807484* + ID_OUI_FROM_DATABASE=ALL Winner (Hong Kong) Limited + + OUI:80751F* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:807693* + ID_OUI_FROM_DATABASE=Newag SA +@@ -86604,7 +86970,7 @@ OUI:807B85B* + ID_OUI_FROM_DATABASE=Oliotalo Oy + + OUI:807B85C* +- ID_OUI_FROM_DATABASE=Ningbo Plus and Popscreens electronic Technology Co.,LTD ++ ID_OUI_FROM_DATABASE=SCALA Digital Technology(Ningbo) CO, LTD + + OUI:807B85D* + ID_OUI_FROM_DATABASE=Kaynes Technology India Pvt Ltd +@@ -86930,6 +87296,9 @@ OUI:80DA13* + OUI:80DABC* + ID_OUI_FROM_DATABASE=Megafone Limited + ++OUI:80DAC2* ++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. ++ + OUI:80DB31* + ID_OUI_FROM_DATABASE=Power Quotient International Co., Ltd. + +@@ -87098,6 +87467,9 @@ OUI:840B2D* + OUI:840B7C* + ID_OUI_FROM_DATABASE=Hitron Technologies. Inc + ++OUI:840BBB* ++ ID_OUI_FROM_DATABASE=MitraStar Technology Corp. ++ + OUI:840D8E* + ID_OUI_FROM_DATABASE=Espressif Inc. + +@@ -88181,6 +88553,9 @@ OUI:880907* + OUI:8809AF* + ID_OUI_FROM_DATABASE=Masimo Corporation + ++OUI:880AA3* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:880F10* + ID_OUI_FROM_DATABASE=Huami Information Technology Co.,Ltd. + +@@ -88202,6 +88577,9 @@ OUI:88123D* + OUI:88124E* + ID_OUI_FROM_DATABASE=Qualcomm Inc. + ++OUI:8812AC* ++ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED ++ + OUI:88142B* + ID_OUI_FROM_DATABASE=Protonic Holland + +@@ -88238,6 +88616,9 @@ OUI:882012* + OUI:8821E3* + ID_OUI_FROM_DATABASE=Nebusens, S.L. + ++OUI:8822B2* ++ ID_OUI_FROM_DATABASE=Chipsea Technologies (Shenzhen) Corp. ++ + OUI:88231F* + ID_OUI_FROM_DATABASE=Fibocom Wireless Inc. + +@@ -88907,6 +89288,9 @@ OUI:88B66B* + OUI:88B6EE* + ID_OUI_FROM_DATABASE=Dish Technologies Corp + ++OUI:88B863* ++ ID_OUI_FROM_DATABASE=HISENSE VISUAL TECHNOLOGY CO.,LTD ++ + OUI:88B8D0* + ID_OUI_FROM_DATABASE=Dongguan Koppo Electronic Co.,Ltd + +@@ -89465,6 +89849,9 @@ OUI:8C1F64077* + OUI:8C1F6407E* + ID_OUI_FROM_DATABASE=FLOYD inc. + ++OUI:8C1F64080* ++ ID_OUI_FROM_DATABASE=Twinleaf LLC ++ + OUI:8C1F64085* + ID_OUI_FROM_DATABASE=SORB ENGINEERING LLC + +@@ -89492,6 +89879,9 @@ OUI:8C1F640A8* + OUI:8C1F640AB* + ID_OUI_FROM_DATABASE=Norbit ODM AS + ++OUI:8C1F640AC* ++ ID_OUI_FROM_DATABASE=Patch Technologies, Inc. ++ + OUI:8C1F640AF* + ID_OUI_FROM_DATABASE=FORSEE POWER + +@@ -89501,6 +89891,9 @@ OUI:8C1F640B0* + OUI:8C1F640B8* + ID_OUI_FROM_DATABASE=Signatrol Ltd + ++OUI:8C1F640BE* ++ ID_OUI_FROM_DATABASE=BNB ++ + OUI:8C1F640C0* + ID_OUI_FROM_DATABASE=Active Research Limited + +@@ -89579,6 +89972,9 @@ OUI:8C1F64193* + OUI:8C1F64194* + ID_OUI_FROM_DATABASE=TIFLEX + ++OUI:8C1F64197* ++ ID_OUI_FROM_DATABASE=TEKVOX, Inc ++ + OUI:8C1F6419B* + ID_OUI_FROM_DATABASE=FeedFlo + +@@ -89687,6 +90083,9 @@ OUI:8C1F642C2* + OUI:8C1F642C3* + ID_OUI_FROM_DATABASE=TeraDiode / Panasonic + ++OUI:8C1F642C5* ++ ID_OUI_FROM_DATABASE=SYSN ++ + OUI:8C1F642C8* + ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos + +@@ -89702,6 +90101,9 @@ OUI:8C1F642F5* + OUI:8C1F642FD* + ID_OUI_FROM_DATABASE=Enestone Corporation + ++OUI:8C1F64301* ++ ID_OUI_FROM_DATABASE=Agar Corporation Inc. ++ + OUI:8C1F64304* + ID_OUI_FROM_DATABASE=Jemac Sweden AB + +@@ -89762,6 +90164,9 @@ OUI:8C1F64398* + OUI:8C1F643A4* + ID_OUI_FROM_DATABASE=QLM Technology Ltd + ++OUI:8C1F643AC* ++ ID_OUI_FROM_DATABASE=Benison Tech ++ + OUI:8C1F643AD* + ID_OUI_FROM_DATABASE=TowerIQ + +@@ -89774,15 +90179,24 @@ OUI:8C1F643B5* + OUI:8C1F643C4* + ID_OUI_FROM_DATABASE=NavSys Technology Inc. + ++OUI:8C1F643C5* ++ ID_OUI_FROM_DATABASE=Stratis IOT ++ + OUI:8C1F643C6* + ID_OUI_FROM_DATABASE=Wavestream Corp + + OUI:8C1F643D1* + ID_OUI_FROM_DATABASE=EMIT GmbH + ++OUI:8C1F643D4* ++ ID_OUI_FROM_DATABASE=e.p.g. Elettronica s.r.l. ++ + OUI:8C1F643E0* + ID_OUI_FROM_DATABASE=YPP Corporation + ++OUI:8C1F643E3* ++ ID_OUI_FROM_DATABASE=FMTec GmbH - Future Management Technologies ++ + OUI:8C1F643E8* + ID_OUI_FROM_DATABASE=Ruichuangte + +@@ -89810,6 +90224,9 @@ OUI:8C1F64417* + OUI:8C1F6441D* + ID_OUI_FROM_DATABASE=Aspen Spectra Sdn Bhd + ++OUI:8C1F64426* ++ ID_OUI_FROM_DATABASE=eumig industrie-TV GmbH. ++ + OUI:8C1F64429* + ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS + +@@ -89825,6 +90242,9 @@ OUI:8C1F64445* + OUI:8C1F64454* + ID_OUI_FROM_DATABASE=KJ Klimateknik A/S + ++OUI:8C1F6445D* ++ ID_OUI_FROM_DATABASE=Fuzhou Tucsen Photonics Co.,Ltd ++ + OUI:8C1F6445F* + ID_OUI_FROM_DATABASE=Toshniwal Security Solutions Pvt Ltd + +@@ -89981,6 +90401,9 @@ OUI:8C1F64581* + OUI:8C1F6459F* + ID_OUI_FROM_DATABASE=Delta Computers LLC. + ++OUI:8C1F645AC* ++ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd ++ + OUI:8C1F645AE* + ID_OUI_FROM_DATABASE=Suzhou Motorcomm Electronic Technology Co., Ltd + +@@ -89993,12 +90416,18 @@ OUI:8C1F645BC* + OUI:8C1F645D3* + ID_OUI_FROM_DATABASE=Eloy Water + ++OUI:8C1F645E5* ++ ID_OUI_FROM_DATABASE=Telemetrics Inc. ++ + OUI:8C1F645F5* + ID_OUI_FROM_DATABASE=HongSeok Ltd. + + OUI:8C1F64600* + ID_OUI_FROM_DATABASE=Anhui Chaokun Testing Equipment Co., Ltd + ++OUI:8C1F64601* ++ ID_OUI_FROM_DATABASE=Camius ++ + OUI:8C1F64603* + ID_OUI_FROM_DATABASE=Fuku Energy Technology Co., Ltd. + +@@ -90020,6 +90449,9 @@ OUI:8C1F6461F* + OUI:8C1F64622* + ID_OUI_FROM_DATABASE=Logical Product + ++OUI:8C1F64625* ++ ID_OUI_FROM_DATABASE=Stresstech OY ++ + OUI:8C1F64634* + ID_OUI_FROM_DATABASE=AML + +@@ -90065,6 +90497,12 @@ OUI:8C1F64675* + OUI:8C1F6467A* + ID_OUI_FROM_DATABASE=MG s.r.l. + ++OUI:8C1F6467F* ++ ID_OUI_FROM_DATABASE=Hamamatsu Photonics K.K. ++ ++OUI:8C1F64683* ++ ID_OUI_FROM_DATABASE=SLAT ++ + OUI:8C1F64697* + ID_OUI_FROM_DATABASE=Sontay Ltd. + +@@ -90086,6 +90524,9 @@ OUI:8C1F646B3* + OUI:8C1F646B5* + ID_OUI_FROM_DATABASE=O-Net Communications(Shenzhen)Limited + ++OUI:8C1F646B9* ++ ID_OUI_FROM_DATABASE=GS Industrie-Elektronik GmbH ++ + OUI:8C1F646C6* + ID_OUI_FROM_DATABASE=FIT + +@@ -90140,6 +90581,9 @@ OUI:8C1F6472A* + OUI:8C1F6472C* + ID_OUI_FROM_DATABASE=Antai technology Co.,Ltd + ++OUI:8C1F64737* ++ ID_OUI_FROM_DATABASE=Vytahy-Vymyslicky s.r.o. ++ + OUI:8C1F6473C* + ID_OUI_FROM_DATABASE=REO AG + +@@ -90149,6 +90593,9 @@ OUI:8C1F6473D* + OUI:8C1F6473F* + ID_OUI_FROM_DATABASE=UBISCALE + ++OUI:8C1F64746* ++ ID_OUI_FROM_DATABASE=Sensus Healthcare ++ + OUI:8C1F64747* + ID_OUI_FROM_DATABASE=VisionTIR Multispectral Technology + +@@ -90200,6 +90647,9 @@ OUI:8C1F647A7* + OUI:8C1F647AA* + ID_OUI_FROM_DATABASE=XSENSOR Technology Corp. + ++OUI:8C1F647AF* ++ ID_OUI_FROM_DATABASE=E VISION INDIA PVT LTD ++ + OUI:8C1F647B7* + ID_OUI_FROM_DATABASE=Weidmann Tecnologia Electrica de Mexico + +@@ -90212,6 +90662,9 @@ OUI:8C1F647B9* + OUI:8C1F647C8* + ID_OUI_FROM_DATABASE=Jacquet Dechaume + ++OUI:8C1F647CF* ++ ID_OUI_FROM_DATABASE=Transdigital Pty Ltd ++ + OUI:8C1F647D2* + ID_OUI_FROM_DATABASE=Enlaps + +@@ -90239,6 +90692,9 @@ OUI:8C1F64801* + OUI:8C1F64807* + ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA + ++OUI:8C1F64817* ++ ID_OUI_FROM_DATABASE=nke marine electronics ++ + OUI:8C1F6481A* + ID_OUI_FROM_DATABASE=Gemini Electronics B.V. + +@@ -90314,6 +90770,9 @@ OUI:8C1F648C2* + OUI:8C1F648C4* + ID_OUI_FROM_DATABASE=Hermes Network Inc + ++OUI:8C1F648C5* ++ ID_OUI_FROM_DATABASE=NextT Microwave Inc ++ + OUI:8C1F648CF* + ID_OUI_FROM_DATABASE=Diffraction Limited + +@@ -90335,6 +90794,9 @@ OUI:8C1F648E9* + OUI:8C1F648EE* + ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS + ++OUI:8C1F648F8* ++ ID_OUI_FROM_DATABASE=HIGHVOLT Prüftechnik ++ + OUI:8C1F64903* + ID_OUI_FROM_DATABASE=Portrait Displays, Inc. + +@@ -90371,6 +90833,12 @@ OUI:8C1F64943* + OUI:8C1F64947* + ID_OUI_FROM_DATABASE=LLC TC Vympel + ++OUI:8C1F64949* ++ ID_OUI_FROM_DATABASE=tickIoT Inc. ++ ++OUI:8C1F6494C* ++ ID_OUI_FROM_DATABASE=BCMTECH ++ + OUI:8C1F6494E* + ID_OUI_FROM_DATABASE=Monnit Corporation + +@@ -90392,6 +90860,9 @@ OUI:8C1F64971* + OUI:8C1F64973* + ID_OUI_FROM_DATABASE=Dorsett Technologies Inc + ++OUI:8C1F6497C* ++ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme ++ + OUI:8C1F64984* + ID_OUI_FROM_DATABASE=Abacus Peripherals Pvt Ltd + +@@ -90458,6 +90929,9 @@ OUI:8C1F64A29* + OUI:8C1F64A2B* + ID_OUI_FROM_DATABASE=WENet Vietnam Joint Stock company + ++OUI:8C1F64A2D* ++ ID_OUI_FROM_DATABASE=ACSL Ltd. ++ + OUI:8C1F64A32* + ID_OUI_FROM_DATABASE=Nautel LTD + +@@ -90581,6 +91055,9 @@ OUI:8C1F64B56* + OUI:8C1F64B64* + ID_OUI_FROM_DATABASE=GSP Sprachtechnologie GmbH + ++OUI:8C1F64B73* ++ ID_OUI_FROM_DATABASE=Comm-ence, Inc. ++ + OUI:8C1F64B77* + ID_OUI_FROM_DATABASE=Carestream Dental LLC + +@@ -90611,6 +91088,9 @@ OUI:8C1F64B9A* + OUI:8C1F64BA3* + ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH + ++OUI:8C1F64BBF* ++ ID_OUI_FROM_DATABASE=Retency ++ + OUI:8C1F64BC0* + ID_OUI_FROM_DATABASE=GS Elektromedizinsiche Geräte G. Stemple GmbH + +@@ -90668,6 +91148,9 @@ OUI:8C1F64C2F* + OUI:8C1F64C38* + ID_OUI_FROM_DATABASE=ECO-ADAPT + ++OUI:8C1F64C3A* ++ ID_OUI_FROM_DATABASE=YUSUR Technology Co., Ltd. ++ + OUI:8C1F64C40* + ID_OUI_FROM_DATABASE=Sciospec Scientific Instruments GmbH + +@@ -90683,6 +91166,9 @@ OUI:8C1F64C50* + OUI:8C1F64C54* + ID_OUI_FROM_DATABASE=First Mode + ++OUI:8C1F64C57* ++ ID_OUI_FROM_DATABASE=Strategic Robotic Systems ++ + OUI:8C1F64C68* + ID_OUI_FROM_DATABASE=FIBERME COMMUNICATIONS LLC + +@@ -90713,9 +91199,15 @@ OUI:8C1F64CAD* + OUI:8C1F64CBE* + ID_OUI_FROM_DATABASE=Circa Enterprises Inc + ++OUI:8C1F64CC6* ++ ID_OUI_FROM_DATABASE=Genius vision digital private limted ++ + OUI:8C1F64CCB* + ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD + ++OUI:8C1F64CD3* ++ ID_OUI_FROM_DATABASE=Pionierkraft GmbH ++ + OUI:8C1F64CD6* + ID_OUI_FROM_DATABASE=USM Pty Ltd + +@@ -90725,6 +91217,9 @@ OUI:8C1F64CD8* + OUI:8C1F64CD9* + ID_OUI_FROM_DATABASE=Fingoti Limited + ++OUI:8C1F64CDB* ++ ID_OUI_FROM_DATABASE=EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT ++ + OUI:8C1F64CDF* + ID_OUI_FROM_DATABASE=Canway Technology GmbH + +@@ -90791,6 +91286,9 @@ OUI:8C1F64D7C* + OUI:8C1F64D7E* + ID_OUI_FROM_DATABASE=Thales Belgium + ++OUI:8C1F64D88* ++ ID_OUI_FROM_DATABASE=University of Geneva - Department of Particle Physics ++ + OUI:8C1F64D92* + ID_OUI_FROM_DATABASE=Mitsubishi Electric India Pvt. Ltd. + +@@ -90830,6 +91328,9 @@ OUI:8C1F64DE1* + OUI:8C1F64DF8* + ID_OUI_FROM_DATABASE=Wittra Networks AB + ++OUI:8C1F64DFE* ++ ID_OUI_FROM_DATABASE=Nuvation Energy ++ + OUI:8C1F64E02* + ID_OUI_FROM_DATABASE=ITS Teknik A/S + +@@ -90884,6 +91385,9 @@ OUI:8C1F64E7B* + OUI:8C1F64E7C* + ID_OUI_FROM_DATABASE=Ashinne Technology Co., Ltd + ++OUI:8C1F64E90* ++ ID_OUI_FROM_DATABASE=MHE Electronics ++ + OUI:8C1F64E98* + ID_OUI_FROM_DATABASE=Luxshare Electronic Technology (Kunshan) LTD + +@@ -90920,6 +91424,9 @@ OUI:8C1F64ED4* + OUI:8C1F64ED9* + ID_OUI_FROM_DATABASE=NETGEN HITECH SOLUTIONS LLP + ++OUI:8C1F64EE0* ++ ID_OUI_FROM_DATABASE=Private ++ + OUI:8C1F64EE8* + ID_OUI_FROM_DATABASE=Global Organ Group B.V. + +@@ -90980,6 +91487,9 @@ OUI:8C1F64F5A* + OUI:8C1F64F5C* + ID_OUI_FROM_DATABASE=Flextronics International Kft + ++OUI:8C1F64F65* ++ ID_OUI_FROM_DATABASE=Talleres de Escoriaza SA ++ + OUI:8C1F64F72* + ID_OUI_FROM_DATABASE=Contrader + +@@ -91007,6 +91517,12 @@ OUI:8C1F64F9E* + OUI:8C1F64FA2* + ID_OUI_FROM_DATABASE=AZD Praha s.r.o., ZOZ Olomouc + ++OUI:8C1F64FA8* ++ ID_OUI_FROM_DATABASE=Unitron Systems b.v. ++ ++OUI:8C1F64FAA* ++ ID_OUI_FROM_DATABASE=Massar Networks ++ + OUI:8C1F64FB0* + ID_OUI_FROM_DATABASE=MARIAN GmbH + +@@ -91058,6 +91574,9 @@ OUI:8C210A* + OUI:8C2505* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:8C255E* ++ ID_OUI_FROM_DATABASE=VoltServer ++ + OUI:8C271D* + ID_OUI_FROM_DATABASE=QuantHouse + +@@ -91232,6 +91751,51 @@ OUI:8C4DEA* + OUI:8C5105* + ID_OUI_FROM_DATABASE=Shenzhen ireadygo Information Technology CO.,LTD. + ++OUI:8C51090* ++ ID_OUI_FROM_DATABASE=TianJin JointOptic Technology Co., LTD. ++ ++OUI:8C51091* ++ ID_OUI_FROM_DATABASE=Amzetta Technologies, LLC ++ ++OUI:8C51092* ++ ID_OUI_FROM_DATABASE=PROCET Technology Co., Ltd(HK) ++ ++OUI:8C51093* ++ ID_OUI_FROM_DATABASE=SHENZHEN LDROBOT CO., LTD. ++ ++OUI:8C51094* ++ ID_OUI_FROM_DATABASE=Shenzhen WOWOTO Technology Co., Ltd. ++ ++OUI:8C51095* ++ ID_OUI_FROM_DATABASE=Heliox Automotive B.V. ++ ++OUI:8C51096* ++ ID_OUI_FROM_DATABASE=Avxav Electronic Trading LLC ++ ++OUI:8C51097* ++ ID_OUI_FROM_DATABASE=ENPLUG Co., Ltd. ++ ++OUI:8C51098* ++ ID_OUI_FROM_DATABASE=nerospec ++ ++OUI:8C51099* ++ ID_OUI_FROM_DATABASE=Frontmatec ++ ++OUI:8C5109A* ++ ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ ++OUI:8C5109B* ++ ID_OUI_FROM_DATABASE=Beijing Superhexa Century Technology Co., Ltd. ++ ++OUI:8C5109C* ++ ID_OUI_FROM_DATABASE=SpotterRF LLC ++ ++OUI:8C5109D* ++ ID_OUI_FROM_DATABASE=Surpedia Technologies Co., Ltd. ++ ++OUI:8C5109E* ++ ID_OUI_FROM_DATABASE=IROOTELLUCKY Corp. ++ + OUI:8C53C3* + ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd + +@@ -91998,7 +92562,7 @@ OUI:90013B* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + + OUI:900218* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:90027A* + ID_OUI_FROM_DATABASE=Shenzhen Sworix Techonlogy Co., Ltd +@@ -92130,7 +92694,7 @@ OUI:9020C2* + ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company + + OUI:902106* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:902155* + ID_OUI_FROM_DATABASE=HTC Corporation +@@ -92402,6 +92966,9 @@ OUI:9061AE* + OUI:90633B* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:906560* ++ ID_OUI_FROM_DATABASE=EM Microelectronic ++ + OUI:906717* + ID_OUI_FROM_DATABASE=Alphion India Private Limited + +@@ -92423,6 +92990,9 @@ OUI:906976* + OUI:906A94* + ID_OUI_FROM_DATABASE=hangzhou huacheng network technology co., ltd + ++OUI:906AEB* ++ ID_OUI_FROM_DATABASE=Microsoft Corporation ++ + OUI:906CAC* + ID_OUI_FROM_DATABASE=Fortinet, Inc. + +@@ -93023,6 +93593,9 @@ OUI:90F7B2* + OUI:90F891* + ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD. + ++OUI:90F970* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:90F9B7* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -93059,6 +93632,9 @@ OUI:9400B0* + OUI:940149* + ID_OUI_FROM_DATABASE=AutoHotBox + ++OUI:9401AC* ++ ID_OUI_FROM_DATABASE=Wuhan Qianyang Iotian Technology Co., Ltd ++ + OUI:9401C2* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -93218,6 +93794,9 @@ OUI:942790* + OUI:94282E* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + ++OUI:94286F* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:94290C* + ID_OUI_FROM_DATABASE=Shenyang wisdom Foundation Technology Development Co., Ltd. + +@@ -93329,6 +93908,9 @@ OUI:944A09* + OUI:944A0C* + ID_OUI_FROM_DATABASE=Sercomm Corporation. + ++OUI:944E5B* ++ ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited ++ + OUI:944F4C* + ID_OUI_FROM_DATABASE=Sound United LLC + +@@ -93347,6 +93929,9 @@ OUI:94513D* + OUI:9451BF* + ID_OUI_FROM_DATABASE=Hyundai ESG + ++OUI:945244* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:945330* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + +@@ -94319,6 +94904,9 @@ OUI:98234E* + OUI:98262A* + ID_OUI_FROM_DATABASE=Applied Research Associates, Inc + ++OUI:9826AD* ++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd. ++ + OUI:9827820* + ID_OUI_FROM_DATABASE=SHENZHEN HEROFUN BIO-TECH CO., LTD + +@@ -94916,6 +95504,9 @@ OUI:989D5D* + OUI:989E63* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:98A2C0* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:98A404* + ID_OUI_FROM_DATABASE=Ericsson AB + +@@ -95114,6 +95705,9 @@ OUI:98D6BB* + OUI:98D6F7* + ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications) + ++OUI:98D742* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:98D863* + ID_OUI_FROM_DATABASE=Shanghai High-Flying Electronics Technology Co., Ltd + +@@ -95501,6 +96095,9 @@ OUI:9C2BA6* + OUI:9C2DCF* + ID_OUI_FROM_DATABASE=Shishi Tongyun Technology(Chengdu)Co.,Ltd. + ++OUI:9C2E7A* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:9C2EA1* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -95526,7 +96123,7 @@ OUI:9C31B6* + ID_OUI_FROM_DATABASE=Kulite Semiconductor Products Inc + + OUI:9C31C3* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:9C32A9* + ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD +@@ -95975,6 +96572,9 @@ OUI:9C9561* + OUI:9C9567* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:9C956E* ++ ID_OUI_FROM_DATABASE=Microchip Technology Inc. ++ + OUI:9C95F8* + ID_OUI_FROM_DATABASE=SmartDoor Systems, LLC + +@@ -96707,6 +97307,9 @@ OUI:A03679* + OUI:A0369F* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:A036BC* ++ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. ++ + OUI:A036F0* + ID_OUI_FROM_DATABASE=Comprehensive Power + +@@ -97058,6 +97661,9 @@ OUI:A086EC* + OUI:A08869* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:A0889D* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:A088B4* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -97308,7 +97914,7 @@ OUI:A0BD1D* + ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd. + + OUI:A0BDCD* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:A0BF50* + ID_OUI_FROM_DATABASE=S.C. ADD-PRODUCTION S.R.L. +@@ -97394,6 +98000,9 @@ OUI:A0CBFD* + OUI:A0CC2B* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. + ++OUI:A0CDF3* ++ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. ++ + OUI:A0CEC8* + ID_OUI_FROM_DATABASE=CE LINK LIMITED + +@@ -97562,6 +98171,9 @@ OUI:A0F9B7* + OUI:A0F9E0* + ID_OUI_FROM_DATABASE=VIVATEL COMPANY LIMITED + ++OUI:A0FB83* ++ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. ++ + OUI:A0FBC5* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -98198,6 +98810,9 @@ OUI:A470D6* + OUI:A47174* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:A475B9* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:A47733* + ID_OUI_FROM_DATABASE=Google, Inc. + +@@ -98406,10 +99021,10 @@ OUI:A4ADB8* + ID_OUI_FROM_DATABASE=Vitec Group, Camera Dynamics Ltd + + OUI:A4AE11* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:A4AE12* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:A4AE9A* + ID_OUI_FROM_DATABASE=Maestro Wireless Solutions ltd. +@@ -99038,6 +99653,9 @@ OUI:A84122* + OUI:A842A7* + ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd. + ++OUI:A842E3* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:A84397* + ID_OUI_FROM_DATABASE=Innogrit Corporation + +@@ -99602,9 +100220,15 @@ OUI:A8DA0C* + OUI:A8DB03* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + ++OUI:A8DE68* ++ ID_OUI_FROM_DATABASE=Beijing Wide Technology Co.,Ltd ++ + OUI:A8E018* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:A8E207* ++ ID_OUI_FROM_DATABASE=GOIP Global Services Pvt. Ltd. ++ + OUI:A8E2C1* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -99773,6 +100397,9 @@ OUI:AC14D2* + OUI:AC1585* + ID_OUI_FROM_DATABASE=silergy corp + ++OUI:AC15A2* ++ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited ++ + OUI:AC15F4* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -99788,6 +100415,9 @@ OUI:AC17C8* + OUI:AC1826* + ID_OUI_FROM_DATABASE=Seiko Epson Corporation + ++OUI:AC198E* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:AC199F* + ID_OUI_FROM_DATABASE=SUNGROW POWER SUPPLY CO.,LTD. + +@@ -100019,6 +100649,9 @@ OUI:AC4D16* + OUI:AC4E2E* + ID_OUI_FROM_DATABASE=Shenzhen JingHanDa Electronics Co.Ltd + ++OUI:AC4E65* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:AC4E91* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -100073,6 +100706,9 @@ OUI:AC5A14* + OUI:AC5AEE* + ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd. + ++OUI:AC5AF0* ++ ID_OUI_FROM_DATABASE=LG Electronics ++ + OUI:AC5AFC* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -100094,6 +100730,9 @@ OUI:AC5F3E* + OUI:AC5FEA* + ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd + ++OUI:AC606F* ++ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd. ++ + OUI:AC6089* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -100361,6 +101000,9 @@ OUI:AC9232* + OUI:AC932F* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:AC936A* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:AC93C4* + ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd. + +@@ -100610,6 +101252,9 @@ OUI:ACDCE5* + OUI:ACDE48* + ID_OUI_FROM_DATABASE=Private + ++OUI:ACDF9F* ++ ID_OUI_FROM_DATABASE=Arcadyan Corporation ++ + OUI:ACE010* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + +@@ -100950,7 +101595,7 @@ OUI:B03DC2* + ID_OUI_FROM_DATABASE=Wasp artificial intelligence(Shenzhen) Co.,ltd + + OUI:B03E51* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:B03EB0* + ID_OUI_FROM_DATABASE=MICRODIA Ltd. +@@ -100983,7 +101628,7 @@ OUI:B04519* + ID_OUI_FROM_DATABASE=TCT mobile ltd + + OUI:B04530* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:B04545* + ID_OUI_FROM_DATABASE=YACOUB Automation GmbH +@@ -101591,6 +102236,9 @@ OUI:B0DA00* + OUI:B0DAF9* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:B0DCEF* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:B0DD74* + ID_OUI_FROM_DATABASE=Heimgard Technologies AS + +@@ -102050,6 +102698,9 @@ OUI:B44326* + OUI:B44506* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:B4466B* ++ ID_OUI_FROM_DATABASE=REALTIMEID AS ++ + OUI:B4475E* + ID_OUI_FROM_DATABASE=Avaya Inc + +@@ -102290,6 +102941,9 @@ OUI:B48901* + OUI:B48910* + ID_OUI_FROM_DATABASE=Coster T.E. S.P.A. + ++OUI:B48A0A* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:B48A5F* + ID_OUI_FROM_DATABASE=Juniper Networks + +@@ -102518,6 +103172,9 @@ OUI:B4BA02* + OUI:B4BA12* + ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co.,Ltd. + ++OUI:B4BA9D* ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED ++ + OUI:B4BC7C* + ID_OUI_FROM_DATABASE=Texas Instruments + +@@ -103025,6 +103682,9 @@ OUI:B85810* + OUI:B8599F* + ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. + ++OUI:B859C8* ++ ID_OUI_FROM_DATABASE=70mai Co.,Ltd. ++ + OUI:B859CE* + ID_OUI_FROM_DATABASE=Earda Technologies co Ltd + +@@ -103220,6 +103880,9 @@ OUI:B88EDF* + OUI:B88F14* + ID_OUI_FROM_DATABASE=Analytica GmbH + ++OUI:B88F27* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:B88FB4* + ID_OUI_FROM_DATABASE=JABIL CIRCUIT ITALIA S.R.L + +@@ -103673,6 +104336,9 @@ OUI:B8F8BE* + OUI:B8F934* + ID_OUI_FROM_DATABASE=Sony Corporation + ++OUI:B8FBAF* ++ ID_OUI_FROM_DATABASE=Xiamen IPRT Technology CO.,LTD ++ + OUI:B8FC9A* + ID_OUI_FROM_DATABASE=Le Shi Zhi Xin Electronic Technology (Tianjin) Limited + +@@ -103697,6 +104363,9 @@ OUI:BC0200* + OUI:BC024A* + ID_OUI_FROM_DATABASE=HMD Global Oy + ++OUI:BC0358* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:BC03A7* + ID_OUI_FROM_DATABASE=MFP MICHELIN + +@@ -103994,6 +104663,9 @@ OUI:BC4A56* + OUI:BC4B79* + ID_OUI_FROM_DATABASE=SensingTek + ++OUI:BC4CA0* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:BC4CC4* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -104042,6 +104714,9 @@ OUI:BC5BD5* + OUI:BC5C4C* + ID_OUI_FROM_DATABASE=ELECOM CO.,LTD. + ++OUI:BC5DA3* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:BC5EA1* + ID_OUI_FROM_DATABASE=PsiKick, Inc. + +@@ -104139,7 +104814,7 @@ OUI:BC6784* + ID_OUI_FROM_DATABASE=Environics Oy + + OUI:BC69CB* +- ID_OUI_FROM_DATABASE=Panasonic Life Solutions Networks Co., Ltd. ++ ID_OUI_FROM_DATABASE=Panasonic Electric Works Networks Co., Ltd. + + OUI:BC6A16* + ID_OUI_FROM_DATABASE=tdvine +@@ -104219,6 +104894,9 @@ OUI:BC79AD* + OUI:BC7ABF* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:BC7B72* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:BC7DD1* + ID_OUI_FROM_DATABASE=Radio Data Comms + +@@ -104654,6 +105332,9 @@ OUI:BCF685* + OUI:BCF811* + ID_OUI_FROM_DATABASE=Xiamen DNAKE Technology Co.,Ltd + ++OUI:BCF88B* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:BCF9F2* + ID_OUI_FROM_DATABASE=TEKO + +@@ -104877,7 +105558,7 @@ OUI:C03DD9* + ID_OUI_FROM_DATABASE=MitraStar Technology Corp. + + OUI:C03E0F* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:C03E50* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD +@@ -104945,6 +105626,9 @@ OUI:C04B13* + OUI:C04DF7* + ID_OUI_FROM_DATABASE=SERELEC + ++OUI:C04E30* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:C0517E* + ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. + +@@ -105038,6 +105722,9 @@ OUI:C06599* + OUI:C067AF* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:C06911* ++ ID_OUI_FROM_DATABASE=Arista Networks ++ + OUI:C06B55* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + +@@ -105318,7 +106005,7 @@ OUI:C0A364* + ID_OUI_FROM_DATABASE=3D Systems Massachusetts + + OUI:C0A36E* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:C0A39E* + ID_OUI_FROM_DATABASE=EarthCam, Inc. +@@ -105800,6 +106487,9 @@ OUI:C411E0* + OUI:C41234* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:C412EC* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:C412F5* + ID_OUI_FROM_DATABASE=D-Link International + +@@ -105962,9 +106652,15 @@ OUI:C43ABE* + OUI:C43C3C* + ID_OUI_FROM_DATABASE=CYBELEC SA + ++OUI:C43CB0* ++ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD ++ + OUI:C43CEA* + ID_OUI_FROM_DATABASE=BUFFALO.INC + ++OUI:C43D1A* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:C43DC7* + ID_OUI_FROM_DATABASE=NETGEAR + +@@ -106682,6 +107378,9 @@ OUI:C4E984* + OUI:C4EA1D* + ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV + ++OUI:C4EB39* ++ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS ++ + OUI:C4EBE3* + ID_OUI_FROM_DATABASE=RRCN SAS + +@@ -106940,6 +107639,9 @@ OUI:C8292A* + OUI:C82A14* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:C82AF1* ++ ID_OUI_FROM_DATABASE=TCT mobile ltd ++ + OUI:C82B96* + ID_OUI_FROM_DATABASE=Espressif Inc. + +@@ -107018,6 +107720,9 @@ OUI:C83870* + OUI:C839AC* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + ++OUI:C83A1B* ++ ID_OUI_FROM_DATABASE=Toshiba TEC Corporation Inc ++ + OUI:C83A35* + ID_OUI_FROM_DATABASE=Tenda Technology Co., Ltd. + +@@ -107081,6 +107786,9 @@ OUI:C8478C* + OUI:C848F5* + ID_OUI_FROM_DATABASE=MEDISON Xray Co., Ltd + ++OUI:C84BD6* ++ ID_OUI_FROM_DATABASE=Dell Inc. ++ + OUI:C84C75* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -107150,6 +107858,9 @@ OUI:C85CCC* + OUI:C85D38* + ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. + ++OUI:C85EA9* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:C86000* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + +@@ -107549,6 +108260,9 @@ OUI:C8BE19* + OUI:C8BE35* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + ++OUI:C8BF4C* ++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd ++ + OUI:C8BFFE* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -107849,6 +108563,9 @@ OUI:C8FF77* + OUI:CC0080* + ID_OUI_FROM_DATABASE=BETTINI SRL + ++OUI:CC037B* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:CC03D9* + ID_OUI_FROM_DATABASE=Cisco Meraki + +@@ -108041,6 +108758,9 @@ OUI:CC25EF* + OUI:CC262D* + ID_OUI_FROM_DATABASE=Verifi, LLC + ++OUI:CC29BD* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:CC29F5* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -109347,7 +110067,7 @@ OUI:D058C0* + ID_OUI_FROM_DATABASE=Qingdao Haier Multimedia Limited. + + OUI:D058FC* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:D05919* + ID_OUI_FROM_DATABASE=zte corporation +@@ -110381,6 +111101,9 @@ OUI:D44C9C* + OUI:D44CA7* + ID_OUI_FROM_DATABASE=Informtekhnika & Communication, LLC + ++OUI:D44D77* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:D44DA4* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. + +@@ -110409,7 +111132,7 @@ OUI:D45297* + ID_OUI_FROM_DATABASE=nSTREAMS Technologies, Inc. + + OUI:D452EE* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:D45383* + ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd. +@@ -110777,6 +111500,9 @@ OUI:D49AA0* + OUI:D49B5C* + ID_OUI_FROM_DATABASE=Chongqing Miedu Technology Co., Ltd. + ++OUI:D49B74* ++ ID_OUI_FROM_DATABASE=Kinetic Technologies ++ + OUI:D49C28* + ID_OUI_FROM_DATABASE=JayBird LLC + +@@ -110997,7 +111723,7 @@ OUI:D4D919* + ID_OUI_FROM_DATABASE=GoPro + + OUI:D4DACD* +- ID_OUI_FROM_DATABASE=BSkyB Ltd ++ ID_OUI_FROM_DATABASE=SKY UK LIMITED + + OUI:D4DC09* + ID_OUI_FROM_DATABASE=Mist Systems, Inc. +@@ -111494,6 +112220,9 @@ OUI:D867D9* + OUI:D86852* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:D868A0* ++ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd ++ + OUI:D868C3* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -111554,6 +112283,9 @@ OUI:D87CDD* + OUI:D87D7F* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:D87E6F* ++ ID_OUI_FROM_DATABASE=CASCINATION AG ++ + OUI:D87E76* + ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED + +@@ -112004,6 +112736,9 @@ OUI:D8E72B* + OUI:D8E743* + ID_OUI_FROM_DATABASE=Wush, Inc + ++OUI:D8E844* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:D8E952* + ID_OUI_FROM_DATABASE=KEOPSYS + +@@ -112082,6 +112817,9 @@ OUI:D8FE8F* + OUI:D8FEE3* + ID_OUI_FROM_DATABASE=D-Link International + ++OUI:D8FFC3* ++ ID_OUI_FROM_DATABASE=Shenzhen 3SNIC information technology company Limited ++ + OUI:DC0077* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + +@@ -112100,6 +112838,9 @@ OUI:DC0398* + OUI:DC052F* + ID_OUI_FROM_DATABASE=National Products Inc. + ++OUI:DC0539* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:DC0575* + ID_OUI_FROM_DATABASE=SIEMENS ENERGY AUTOMATION + +@@ -112121,6 +112862,9 @@ OUI:DC0914* + OUI:DC094C* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:DC0B09* ++ ID_OUI_FROM_DATABASE=Cisco Systems, Inc ++ + OUI:DC0B1A* + ID_OUI_FROM_DATABASE=ADB Broadband Italia + +@@ -112415,6 +113159,9 @@ OUI:DC44B6* + OUI:DC4517* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:DC4628* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:DC48B2* + ID_OUI_FROM_DATABASE=Baraja Pty. Ltd. + +@@ -112652,6 +113399,9 @@ OUI:DC8C37* + OUI:DC8D8A* + ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG + ++OUI:DC8DB7* ++ ID_OUI_FROM_DATABASE=ATW TECHNOLOGY, INC. ++ + OUI:DC8E95* + ID_OUI_FROM_DATABASE=Silicon Laboratories + +@@ -113054,6 +113804,9 @@ OUI:DCF090* + OUI:DCF110* + ID_OUI_FROM_DATABASE=Nokia Corporation + ++OUI:DCF31C* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:DCF401* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -113123,6 +113876,9 @@ OUI:E0071B* + OUI:E007C2* + ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD + ++OUI:E00871* ++ ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd. ++ + OUI:E009BF* + ID_OUI_FROM_DATABASE=SHENZHEN TONG BO WEI TECHNOLOGY Co.,LTD + +@@ -113162,6 +113918,9 @@ OUI:E013B5* + OUI:E0143E* + ID_OUI_FROM_DATABASE=Modoosis Inc. + ++OUI:E016B1* ++ ID_OUI_FROM_DATABASE=Advanced Design Technology co.,ltd. ++ + OUI:E01877* + ID_OUI_FROM_DATABASE=FUJITSU LIMITED + +@@ -113273,6 +114032,9 @@ OUI:E02CB2* + OUI:E02CF3* + ID_OUI_FROM_DATABASE=MRS Electronic GmbH + ++OUI:E02E0B* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:E02E3F* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -113390,6 +114152,9 @@ OUI:E05124* + OUI:E05163* + ID_OUI_FROM_DATABASE=Arcadyan Corporation + ++OUI:E051D8* ++ ID_OUI_FROM_DATABASE=China Dragon Technology Limited ++ + OUI:E0553D* + ID_OUI_FROM_DATABASE=Cisco Meraki + +@@ -113597,6 +114362,9 @@ OUI:E084F3* + OUI:E0859A* + ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD. + ++OUI:E08614* ++ ID_OUI_FROM_DATABASE=Novatel Wireless Solutions, Inc. ++ + OUI:E087B1* + ID_OUI_FROM_DATABASE=Nata-Info Ltd. + +@@ -113630,6 +114398,9 @@ OUI:E091F5* + OUI:E0925C* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:E0928F* ++ ID_OUI_FROM_DATABASE=Texas Instruments ++ + OUI:E092A7* + ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd + +@@ -114065,6 +114836,9 @@ OUI:E0F678* + OUI:E0F6B5* + ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd + ++OUI:E0F728* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:E0F847* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -114482,6 +115256,9 @@ OUI:E46251* + OUI:E46449* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:E46564* ++ ID_OUI_FROM_DATABASE=SHENZHEN KTC TECHNOLOGY CO.,LTD ++ + OUI:E4671E* + ID_OUI_FROM_DATABASE=SHEN ZHEN NUO XIN CHENG TECHNOLOGY co., Ltd. + +@@ -114494,6 +115271,9 @@ OUI:E468A3* + OUI:E4695A* + ID_OUI_FROM_DATABASE=Dictum Health, Inc. + ++OUI:E46A35* ++ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ + OUI:E46C21* + ID_OUI_FROM_DATABASE=messMa GmbH + +@@ -114776,6 +115556,9 @@ OUI:E4B318* + OUI:E4B503* + ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd. + ++OUI:E4B555* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:E4B633* + ID_OUI_FROM_DATABASE=Wuxi Stars Microsystem Technology Co., Ltd + +@@ -115694,6 +116477,9 @@ OUI:E8ABF3* + OUI:E8ABFA* + ID_OUI_FROM_DATABASE=Shenzhen Reecam Tech.Ltd. + ++OUI:E8AC23* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:E8ACAD* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -115838,6 +116624,9 @@ OUI:E8CC18* + OUI:E8CC32* + ID_OUI_FROM_DATABASE=Micronet LTD + ++OUI:E8CC8C* ++ ID_OUI_FROM_DATABASE=Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd. ++ + OUI:E8CD2D* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -115994,6 +116783,9 @@ OUI:E8EDF3* + OUI:E8EECC* + ID_OUI_FROM_DATABASE=Fantasia Trading LLC + ++OUI:E8EF05* ++ ID_OUI_FROM_DATABASE=MIND TECH INTERNATIONAL LIMITED ++ + OUI:E8EF89* + ID_OUI_FROM_DATABASE=OPMEX Tech. + +@@ -116420,6 +117212,9 @@ OUI:EC71DB* + OUI:EC74BA* + ID_OUI_FROM_DATABASE=Hirschmann Automation and Control GmbH + ++OUI:EC74D7* ++ ID_OUI_FROM_DATABASE=Grandstream Networks Inc ++ + OUI:EC753E* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -116633,6 +117428,9 @@ OUI:ECA29B* + OUI:ECA5DE* + ID_OUI_FROM_DATABASE=ONYX WIFI Inc + ++OUI:ECA62F* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:ECA81F* + ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. + +@@ -116807,6 +117605,9 @@ OUI:ECE512* + OUI:ECE555* + ID_OUI_FROM_DATABASE=Hirschmann Automation + ++OUI:ECE6A2* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:ECE744* + ID_OUI_FROM_DATABASE=Omntec mfg. inc + +@@ -117467,6 +118268,9 @@ OUI:F085C1* + OUI:F08620* + ID_OUI_FROM_DATABASE=Arcadyan Corporation + ++OUI:F08756* ++ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation ++ + OUI:F0877F* + ID_OUI_FROM_DATABASE=Magnetar Technology Shenzhen Co., LTD. + +@@ -117719,6 +118523,9 @@ OUI:F0BE25* + OUI:F0BF97* + ID_OUI_FROM_DATABASE=Sony Corporation + ++OUI:F0C1CE* ++ ID_OUI_FROM_DATABASE=GoodWe Technologies CO., Ltd ++ + OUI:F0C1F1* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -118154,6 +118961,9 @@ OUI:F42012* + OUI:F421AE* + ID_OUI_FROM_DATABASE=Shanghai Xiaodu Technology Limited + ++OUI:F4227A* ++ ID_OUI_FROM_DATABASE=Guangdong Seneasy Intelligent Technology Co., Ltd. ++ + OUI:F4239C* + ID_OUI_FROM_DATABASE=SERNET (SUZHOU) TECHNOLOGIES CORPORATION + +@@ -118217,6 +119027,9 @@ OUI:F438C1* + OUI:F43909* + ID_OUI_FROM_DATABASE=Hewlett Packard + ++OUI:F43BD8* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:F43D80* + ID_OUI_FROM_DATABASE=FAG Industrial Services GmbH + +@@ -118430,8 +119243,11 @@ OUI:F46ABC* + OUI:F46AD7* + ID_OUI_FROM_DATABASE=Microsoft Corporation + ++OUI:F46ADD* ++ ID_OUI_FROM_DATABASE=Liteon Technology Corporation ++ + OUI:F46B8C* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:F46BEF* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS +@@ -118445,6 +119261,9 @@ OUI:F46D04* + OUI:F46D2F* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:F46D3F* ++ ID_OUI_FROM_DATABASE=Intel Corporate ++ + OUI:F46DE2* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -118647,7 +119466,7 @@ OUI:F492BF* + ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc. + + OUI:F4939F* +- ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd. ++ ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + + OUI:F49461* + ID_OUI_FROM_DATABASE=NexGen Storage +@@ -119333,6 +120152,9 @@ OUI:F828C9* + OUI:F829C0* + ID_OUI_FROM_DATABASE=Availink, Inc. + ++OUI:F82B7F* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:F82BC8* + ID_OUI_FROM_DATABASE=Jiangsu Switter Co., Ltd + +@@ -120608,6 +121430,42 @@ OUI:FC6018* + OUI:FC609B* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + ++OUI:FC61790* ++ ID_OUI_FROM_DATABASE=Zhuhai Anjubao Electronics Technology Co., Ltd. ++ ++OUI:FC61791* ++ ID_OUI_FROM_DATABASE=Signalinks Communication Technology Co.,Ltd ++ ++OUI:FC61792* ++ ID_OUI_FROM_DATABASE=Shenzhen Shenshui Electronic Commerce Co.,Ltd ++ ++OUI:FC61793* ++ ID_OUI_FROM_DATABASE=EchoStar Mobile ++ ++OUI:FC61794* ++ ID_OUI_FROM_DATABASE=CHOEUNENG ++ ++OUI:FC61795* ++ ID_OUI_FROM_DATABASE=Qisda Corporation ++ ++OUI:FC61796* ++ ID_OUI_FROM_DATABASE=Hangzhou LiDe Communication Co.,Ltd ++ ++OUI:FC61797* ++ ID_OUI_FROM_DATABASE=Kvaliteta Systems and Solutions Private Limited ++ ++OUI:FC61798* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ ++OUI:FC61799* ++ ID_OUI_FROM_DATABASE=MACH SYSTEMS s.r.o. ++ ++OUI:FC6179A* ++ ID_OUI_FROM_DATABASE=Shenzhen Dptek Technology Co., Ltd. ++ ++OUI:FC6179D* ++ ID_OUI_FROM_DATABASE=Int'Act Pty Ltd ++ + OUI:FC6198* + ID_OUI_FROM_DATABASE=NEC Personal Products, Ltd + +@@ -120983,6 +121841,9 @@ OUI:FCC2DE* + OUI:FCC734* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:FCC737* ++ ID_OUI_FROM_DATABASE=Shaanxi Gangsion Electronic Technology Co., Ltd ++ + OUI:FCC897* + ID_OUI_FROM_DATABASE=zte corporation + +diff --git a/hwdb.d/20-acpi-vendor.hwdb b/hwdb.d/20-acpi-vendor.hwdb +index 7fdb463e10..e23dbbbc95 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb ++++ b/hwdb.d/20-acpi-vendor.hwdb +@@ -223,7 +223,7 @@ acpi:MXIM*: + ID_VENDOR_FROM_DATABASE=Maxim Integrated + + acpi:NOLO*: +- ID_VENDOR_FROM_DATABASE=NOLO VR ++ ID_VENDOR_FROM_DATABASE=NOLO Co., Ltd. + + acpi:NVDA*: + ID_VENDOR_FROM_DATABASE=Nvidia +@@ -4285,7 +4285,7 @@ acpi:MAS*: + ID_VENDOR_FROM_DATABASE=Mass Inc. + + acpi:MAT*: +- ID_VENDOR_FROM_DATABASE=Matsushita Electric Ind. Company Ltd ++ ID_VENDOR_FROM_DATABASE=Panasonic Connect Co.,Ltd. + + acpi:MAX*: + ID_VENDOR_FROM_DATABASE=Rogen Tech Distribution Inc +diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch +index d1781e419f..f88a96ed30 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb.patch ++++ b/hwdb.d/20-acpi-vendor.hwdb.patch +@@ -1,5 +1,5 @@ +---- 20-acpi-vendor.hwdb.base 2022-03-29 12:18:39.832815359 +0200 +-+++ 20-acpi-vendor.hwdb 2022-03-29 12:18:39.838815428 +0200 ++--- 20-acpi-vendor.hwdb.base 2022-04-28 17:39:22.374730080 +0200 +++++ 20-acpi-vendor.hwdb 2022-04-28 17:39:22.381730080 +0200 + @@ -3,6 +3,8 @@ + # Data imported from: + # https://uefi.org/uefi-pnp-export +diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb +index dba7d96d3e..b55bd82327 100644 +--- a/hwdb.d/20-pci-vendor-model.hwdb ++++ b/hwdb.d/20-pci-vendor-model.hwdb +@@ -212,6 +212,27 @@ pci:v00000731d00007200sv00000731sd00007214* + pci:v00000731d00007200sv00000731sd00007215* + ID_MODEL_FROM_DATABASE=JM7200 Series GPU (JM7200) + ++pci:v00000731d00009100* ++ ID_MODEL_FROM_DATABASE=JM9100 ++ ++pci:v00000731d00009100sv00000731sd00009101* ++ ID_MODEL_FROM_DATABASE=JM9100 ++ ++pci:v00000731d00009100sv00000731sd00009102* ++ ID_MODEL_FROM_DATABASE=JM9100 (-I) ++ ++pci:v00000731d0000910A* ++ ID_MODEL_FROM_DATABASE=JH910 ++ ++pci:v00000731d0000910Asv00000731sd0000910A* ++ ID_MODEL_FROM_DATABASE=JH910 ++ ++pci:v00000731d0000910Asv00000731sd0000910B* ++ ID_MODEL_FROM_DATABASE=JH910 (-I) ++ ++pci:v00000731d0000910Asv00000731sd0000910C* ++ ID_MODEL_FROM_DATABASE=JH910 (-M) ++ + pci:v00000731d00009200* + ID_MODEL_FROM_DATABASE=JM9200 + +@@ -1901,6 +1922,9 @@ pci:v00001000d00000087sv00001000sd00003060* + pci:v00001000d00000087sv00001014sd00000472* + ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (N2125 External Host Bus Adapter) + ++pci:v00001000d00000087sv00001014sd0000047A* ++ ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (N2115 Internal Host Bus Adapter) ++ + pci:v00001000d00000087sv00001590sd00000041* + ID_MODEL_FROM_DATABASE=SAS2308 PCI-Express Fusion-MPT SAS-2 (H220i) + +@@ -2070,34 +2094,34 @@ pci:v00001000d000000A5sv00001000sd000046D0* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (eHBA 9600-8i8e Tri-Mode Storage Adapter) + + pci:v00001000d000000A5sv00001028sd00002114* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965 Adapter) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i Adapter) + + pci:v00001000d000000A5sv00001028sd00002115* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965 Front) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i Front) + + pci:v00001000d000000A5sv00001028sd00002117* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965 MX) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965i MX) + + pci:v00001000d000000A5sv00001028sd0000213A* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H965e Adapter) + + pci:v00001000d000000A5sv00001028sd0000213B* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765 Adapter) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765i Adapter) + + pci:v00001000d000000A5sv00001028sd0000213C* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765 Front) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765i Front) + + pci:v00001000d000000A5sv00001028sd0000213D* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765N Front) + + pci:v00001000d000000A5sv00001028sd0000213E* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765 MX) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H765i MX) + + pci:v00001000d000000A5sv00001028sd0000213F* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365 Adapter) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Adapter) + + pci:v00001000d000000A5sv00001028sd00002140* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365 Front) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Front) + + pci:v00001000d000000A5sv00001028sd00002141* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX) +@@ -3030,7 +3054,10 @@ pci:v00001002d00001638* + ID_MODEL_FROM_DATABASE=Cezanne + + pci:v00001002d0000163F* +- ID_MODEL_FROM_DATABASE=VanGogh ++ ID_MODEL_FROM_DATABASE=VanGogh [AMD Custom GPU 0405] ++ ++pci:v00001002d00001640* ++ ID_MODEL_FROM_DATABASE=Rembrandt Radeon High Definition Audio Controller + + pci:v00001002d0000164C* + ID_MODEL_FROM_DATABASE=Lucienne +@@ -36758,6 +36785,12 @@ pci:v000010DEd000020B6* + pci:v000010DEd000020B7* + ID_MODEL_FROM_DATABASE=GA100GL [A30 PCIe] + ++pci:v000010DEd000020B8* ++ ID_MODEL_FROM_DATABASE=GA100 [A100X] ++ ++pci:v000010DEd000020B9* ++ ID_MODEL_FROM_DATABASE=GA100 [A30X] ++ + pci:v000010DEd000020BB* + ID_MODEL_FROM_DATABASE=GA100 [DRIVE A100 PROD] + +@@ -36821,6 +36854,9 @@ pci:v000010DEd000021D1* + pci:v000010DEd00002200* + ID_MODEL_FROM_DATABASE=GA102 + ++pci:v000010DEd00002203* ++ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090 Ti] ++ + pci:v000010DEd00002204* + ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090] + +@@ -36965,6 +37001,9 @@ pci:v000010DEd000024AF* + pci:v000010DEd000024B0* + ID_MODEL_FROM_DATABASE=GA104GL [RTX A4000] + ++pci:v000010DEd000024B1* ++ ID_MODEL_FROM_DATABASE=GA104GL [RTX A4000H] ++ + pci:v000010DEd000024B6* + ID_MODEL_FROM_DATABASE=GA104GLM [RTX A5000 Mobile] + +@@ -37043,6 +37082,9 @@ pci:v000010DEd000025A0* + pci:v000010DEd000025A2* + ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 3050 Mobile] + ++pci:v000010DEd000025A3* ++ ID_MODEL_FROM_DATABASE=GA107 ++ + pci:v000010DEd000025A4* + ID_MODEL_FROM_DATABASE=GA107 + +@@ -37058,6 +37100,9 @@ pci:v000010DEd000025A7* + pci:v000010DEd000025A9* + ID_MODEL_FROM_DATABASE=GA107M [GeForce RTX 2050] + ++pci:v000010DEd000025AA* ++ ID_MODEL_FROM_DATABASE=GA107M [GeForce MX570 A] ++ + pci:v000010DEd000025AF* + ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 Engineering Sample] + +@@ -37211,6 +37256,9 @@ pci:v000010DFd0000E300sv00001014sd00000614* + pci:v000010DFd0000E300sv00001014sd00000615* + ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (PCIe3 2-Port 32Gb Fibre Channel Adapter for POWER (FC EN1A/EN1B; CCIN 578F)) + ++pci:v000010DFd0000E300sv00001014sd000006A0* ++ ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (PCIe3 2-Port 16Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC)) ++ + pci:v000010DFd0000E300sv000010DFsd0000E300* + ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (LPe32002-M2 2-Port 32Gb Fibre Channel Adapter) + +@@ -37370,6 +37418,12 @@ pci:v000010DFd0000F400sv000010DFsd0000F418* + pci:v000010DFd0000F400sv000010DFsd0000F419* + ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (LPe35002-M2-L 2-Port 32Gb PCIe Fibre Channel Adapter) + ++pci:v000010DFd0000F400sv000010DFsd0000F421* ++ ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (LPe36002-M2-L 2-Port 64Gb PCIe Fibre Channel Adapter) ++ ++pci:v000010DFd0000F400sv000010DFsd0000F422* ++ ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (LPe36002-M64-D 2-Port 64Gb Fibre Channel Adapter) ++ + pci:v000010DFd0000F400sv00001590sd000002D5* + ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (StoreFabric SN1610E 1-Port 32Gb Fibre Channel Adapter) + +@@ -37379,6 +37433,12 @@ pci:v000010DFd0000F400sv00001590sd000002D6* + pci:v000010DFd0000F500* + ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter + ++pci:v000010DFd0000F500sv00001014sd000006C1* ++ ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter (PCIe4 4-Port 32Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC)) ++ ++pci:v000010DFd0000F500sv00001014sd000006C2* ++ ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter (PCIe4 2-Port 64Gb Fibre Channel Adapter for POWER (FC EN1N/EN1P; CCIN 2CFD)) ++ + pci:v000010DFd0000F700* + ID_MODEL_FROM_DATABASE=LP7000 Fibre Channel Host Adapter + +@@ -47000,6 +47060,9 @@ pci:v000011F8d00008535* + pci:v000011F8d00008536* + ID_MODEL_FROM_DATABASE=PM8536 PFX 96xG3 PCIe Fanout Switch + ++pci:v000011F8d00008536sv00001BD4sd00000081* ++ ID_MODEL_FROM_DATABASE=PM8536 PFX 96xG3 PCIe Fanout Switch ++ + pci:v000011F8d00008546* + ID_MODEL_FROM_DATABASE=PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch + +@@ -50861,6 +50924,12 @@ pci:v00001344d00005191* + pci:v00001344d00005192* + ID_MODEL_FROM_DATABASE=9200 MAX NVMe SSD + ++pci:v00001344d000051A2* ++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD ++ ++pci:v00001344d000051A3* ++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD ++ + pci:v00001345* + ID_VENDOR_FROM_DATABASE=Arescom Inc + +@@ -58235,6 +58304,9 @@ pci:v000014E4d000016D6sv0000152Dsd00008B20* + pci:v000014E4d000016D6sv0000152Dsd00008B22* + ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (BCM57412 NetXtreme-E 25Gb RDMA Ethernet Controller) + ++pci:v000014E4d000016D6sv0000193Dsd00001024* ++ ID_MODEL_FROM_DATABASE=BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller (NIC-ETH531F-LP-2P) ++ + pci:v000014E4d000016D7* + ID_MODEL_FROM_DATABASE=BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller + +@@ -59285,6 +59357,9 @@ pci:v000014E4d0000A8D8* + pci:v000014E4d0000AA52* + ID_MODEL_FROM_DATABASE=BCM43602 802.11ac Wireless LAN SoC + ++pci:v000014E4d0000B080* ++ ID_MODEL_FROM_DATABASE=BCM56080 Firelight2 Switch ASIC ++ + pci:v000014E4d0000B302* + ID_MODEL_FROM_DATABASE=BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller + +@@ -65163,10 +65238,10 @@ pci:v000017CBd00001000* + ID_MODEL_FROM_DATABASE=QCS405 PCIe Root Complex + + pci:v000017CBd00001101* +- ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter [AX500-DBS (2x2)] ++ ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter + + pci:v000017CBd00001103* +- ID_MODEL_FROM_DATABASE=Atheros QCNFA765 ++ ID_MODEL_FROM_DATABASE=QCNFA765 Wireless Network Adapter + + pci:v000017CBd00001104* + ID_MODEL_FROM_DATABASE=QCN6024/9024/9074 Wireless Network Adapter +@@ -69683,6 +69758,54 @@ pci:v00001BB1d00000100sv00001BB1sd00000157* + pci:v00001BB1d00000100sv00001BB1sd00000158* + ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5050M TCG 7mm) + ++pci:v00001BB1d00000100sv00001BB1sd00000159* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000160* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000161* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M 7mm) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000162* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M TCG 7mm) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000163* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000164* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000165* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.S 1T) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000166* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.S 1T TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000167* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.L 1T) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000168* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060H E3.L 1T TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000169* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.S 1T) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000170* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.S 1T TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000171* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.L 1T) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000172* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E3.L 1T TCG) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000173* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E1.S) ++ ++pci:v00001BB1d00000100sv00001BB1sd00000174* ++ ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro 5060M E1.S TCG) ++ + pci:v00001BB1d00000100sv00001BB1sd000001A1* + ID_MODEL_FROM_DATABASE=Nytro Flash Storage (Nytro XP7102) + +@@ -70814,6 +70937,12 @@ pci:v00001D6Ad000000B1* + pci:v00001D6Ad000007B1* + ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + ++pci:v00001D6Ad000007B1sv00001BAAsd000007B1* ++ ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] (QM2-2P10G1TA [QXG 10GbE Network Adapter]) ++ ++pci:v00001D6Ad000007B1sv00001BAAsd000007B2* ++ ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] (QM2-2P10G1TA [QM2 Expansion Adapter]) ++ + pci:v00001D6Ad000008B1* + ID_MODEL_FROM_DATABASE=AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + +@@ -70826,6 +70955,12 @@ pci:v00001D6Ad000012B1* + pci:v00001D6Ad000087B1* + ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + ++pci:v00001D6Ad000094C0* ++ ID_MODEL_FROM_DATABASE=AQC113CS NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] ++ ++pci:v00001D6Ad000094C0sv00001043sd000087F5* ++ ID_MODEL_FROM_DATABASE=AQC113CS NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] (ProArt X570-CREATOR WIFI) ++ + pci:v00001D6Ad0000D107* + ID_MODEL_FROM_DATABASE=AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + +@@ -72345,8 +72480,29 @@ pci:v00001ED5d00000100* + ID_MODEL_FROM_DATABASE=MTT S10 + + pci:v00001ED5d00000101* ++ ID_MODEL_FROM_DATABASE=MTT S10 ++ ++pci:v00001ED5d00000102* + ID_MODEL_FROM_DATABASE=MTT S30 + ++pci:v00001ED5d00000105* ++ ID_MODEL_FROM_DATABASE=MTT S50 ++ ++pci:v00001ED5d00000106* ++ ID_MODEL_FROM_DATABASE=MTT S60 ++ ++pci:v00001ED5d00000111* ++ ID_MODEL_FROM_DATABASE=MTT S100 ++ ++pci:v00001ED5d00000121* ++ ID_MODEL_FROM_DATABASE=MTT S1000M ++ ++pci:v00001ED5d00000122* ++ ID_MODEL_FROM_DATABASE=MTT S1000 ++ ++pci:v00001ED5d00000123* ++ ID_MODEL_FROM_DATABASE=MTT S2000 ++ + pci:v00001ED8* + ID_VENDOR_FROM_DATABASE=Digiteq Automotive + +@@ -72368,6 +72524,15 @@ pci:v00001EECd00000102* + pci:v00001EECd00001EEC* + ID_MODEL_FROM_DATABASE=VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe + ++pci:v00001EED* ++ ID_VENDOR_FROM_DATABASE=Xiangdixian Computing Technology (Chongqing) Ltd. ++ ++pci:v00001EEDd00000100* ++ ID_MODEL_FROM_DATABASE=XDX P100 VGA controller ++ ++pci:v00001EEDd00000101* ++ ID_MODEL_FROM_DATABASE=XDX P101 High Definition Audio Controller ++ + pci:v00001EFB* + ID_VENDOR_FROM_DATABASE=Flexxon Pte Ltd + +@@ -73943,6 +74108,12 @@ pci:v00004DDCd00002F00* + pci:v00004DDCd00003000* + ID_MODEL_FROM_DATABASE=SB-3644 Motion Feedback Device + ++pci:v00004E58* ++ ID_VENDOR_FROM_DATABASE=Nutanix, Inc. ++ ++pci:v00004E58d00000001* ++ ID_MODEL_FROM_DATABASE=Virtual NVMe Controller ++ + pci:v00005045* + ID_VENDOR_FROM_DATABASE=University of Toronto + +@@ -77060,11 +77231,14 @@ pci:v00008086d00000DD2sv00008086sd0000401A* + pci:v00008086d00000DD2sv00008086sd0000401B* + ID_MODEL_FROM_DATABASE=Ethernet Network Adapter I710 (-T4L for OCP 3.0) + ++pci:v00008086d00000DD5* ++ ID_MODEL_FROM_DATABASE=Ethernet Adaptive Virtual Function ++ + pci:v00008086d00000DDA* + ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ + + pci:v00008086d00000DDAsv00001BD4sd00000076* +- ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ ++ ID_MODEL_FROM_DATABASE=Ethernet Connection X722 for 10GbE SFP+ (Ethernet Connection F102IX722 for 10GbE SFP) + + pci:v00008086d00000E00* + ID_MODEL_FROM_DATABASE=Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 +@@ -81083,15 +81257,27 @@ pci:v00008086d00001592sv00008086sd0000000D* + pci:v00008086d00001592sv00008086sd0000000E* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-2C-Q2) + ++pci:v00008086d00001592sv00008086sd0000000F* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q2T) ++ + pci:v00008086d00001592sv00008086sd00000010* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-stg Adapter) + ++pci:v00008086d00001592sv00008086sd00000011* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1 for OCP3.0) ++ + pci:v00008086d00001593* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP + + pci:v00008086d00001593sv00001137sd000002C3* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC) + ++pci:v00008086d00001593sv00001137sd000002E9* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC) ++ ++pci:v00008086d00001593sv00001137sd000002EA* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (E810XXVDA4T 4x25/10 GbE SFP28 PCIe NIC) ++ + pci:v00008086d00001593sv00008086sd00000002* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-L-2) + +@@ -81128,6 +81314,12 @@ pci:v00008086d00001593sv00008086sd0000000F* + pci:v00008086d00001593sv00008086sd00000010* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet 25G 4P E810-XXV-st Adapter) + ++pci:v00008086d00001593sv00008086sd00004010* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4) ++ ++pci:v00008086d00001593sv00008086sd00004013* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP (Ethernet Network Adapter E810-XXV-4 for OCP 3.0) ++ + pci:v00008086d00001599* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for backplane + +@@ -81176,6 +81368,9 @@ pci:v00008086d0000159Bsv00008086sd00004002* + pci:v00008086d0000159Bsv00008086sd00004003* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2) + ++pci:v00008086d0000159Bsv00008086sd00004015* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-XXV for SFP (Ethernet Network Adapter E810-XXV-2 for OCP 3.0) ++ + pci:v00008086d000015A0* + ID_MODEL_FROM_DATABASE=Ethernet Connection (2) I218-LM + +@@ -92258,6 +92453,9 @@ pci:v00008086d000034BA* + pci:v00008086d000034BC* + ID_MODEL_FROM_DATABASE=Ice Lake-LP PCI Express Root Port #5 + ++pci:v00008086d000034C4* ++ ID_MODEL_FROM_DATABASE=Ice Lake-LP SD Host Controller ++ + pci:v00008086d000034C5* + ID_MODEL_FROM_DATABASE=Ice Lake-LP Serial IO I2c Controller #4 + +@@ -96383,6 +96581,9 @@ pci:v00008086d00008A51* + pci:v00008086d00008A52* + ID_MODEL_FROM_DATABASE=Iris Plus Graphics G7 + ++pci:v00008086d00008A53* ++ ID_MODEL_FROM_DATABASE=Iris Plus Graphics G7 ++ + pci:v00008086d00008A56* + ID_MODEL_FROM_DATABASE=Iris Plus Graphics G1 (Ice Lake) + +@@ -99485,6 +99686,9 @@ pci:v00008820* + pci:v00008820d00002724* + ID_MODEL_FROM_DATABASE=Mako Front Side Motor Controller [cPCI] + ++pci:v00008848* ++ ID_VENDOR_FROM_DATABASE=Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd ++ + pci:v00008866* + ID_VENDOR_FROM_DATABASE=T-Square Design Inc. + +@@ -100589,6 +100793,18 @@ pci:v00009005d0000028Fsv00001BD4sd00000071* + pci:v00009005d0000028Fsv00001BD4sd00000072* + ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E16i) + ++pci:v00009005d0000028Fsv00001BD4sd00000077* ++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E16iM) ++ ++pci:v00009005d0000028Fsv00001BD4sd00000078* ++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5E24iM) ++ ++pci:v00009005d0000028Fsv00001BD4sd00000079* ++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0800M5H24iM) ++ ++pci:v00009005d0000028Fsv00001BD4sd00000080* ++ ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (RS0804M5R16iM) ++ + pci:v00009005d0000028Fsv00001CC4sd00000101* + ID_MODEL_FROM_DATABASE=Smart Storage PQI SAS (Ramaxel FBGF-RAD PM8204) + +diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb +index 4bcb238815..c0e6f59917 100644 +--- a/hwdb.d/20-usb-vendor-model.hwdb ++++ b/hwdb.d/20-usb-vendor-model.hwdb +@@ -10178,6 +10178,24 @@ usb:v0482p06B4* + usb:v0483* + ID_VENDOR_FROM_DATABASE=STMicroelectronics + ++usb:v0483p0102* ++ ID_MODEL_FROM_DATABASE=Remote NDIS Network device with Android debug (ADB) ++ ++usb:v0483p0103* ++ ID_MODEL_FROM_DATABASE=Remote NDIS Network device ++ ++usb:v0483p0104* ++ ID_MODEL_FROM_DATABASE=MTP device with Android debug (ADB) ++ ++usb:v0483p0105* ++ ID_MODEL_FROM_DATABASE=MTP device ++ ++usb:v0483p0106* ++ ID_MODEL_FROM_DATABASE=PTP device with Android debug (ADB) ++ ++usb:v0483p0107* ++ ID_MODEL_FROM_DATABASE=PTP device ++ + usb:v0483p0137* + ID_MODEL_FROM_DATABASE=BeWAN ADSL USB ST (blue or green) + +@@ -44831,6 +44849,18 @@ usb:v0E25* + usb:v0E26* + ID_VENDOR_FROM_DATABASE=J-Phone East Co., Ltd + ++usb:v0E2E* ++ ID_VENDOR_FROM_DATABASE=Brady Worldwide, Inc. ++ ++usb:v0E2Ep000B* ++ ID_MODEL_FROM_DATABASE=BMP 51 ++ ++usb:v0E2Ep000C* ++ ID_MODEL_FROM_DATABASE=BMP 61 ++ ++usb:v0E2Ep000D* ++ ID_MODEL_FROM_DATABASE=BMP 41 ++ + usb:v0E30* + ID_VENDOR_FROM_DATABASE=HeartMath LLC + +diff --git a/hwdb.d/acpi_id_registry.html b/hwdb.d/acpi_id_registry.html +index b2a6844521..cd4ac8c553 100644 +--- a/hwdb.d/acpi_id_registry.html ++++ b/hwdb.d/acpi_id_registry.html +@@ -112,7 +112,7 @@ + Wacom TechnologyWACF09/21/2021 + Shanghai Aiwei Electronic Technology Co., Ltd.AWDZ12/31/2021 + Silicom Ltd. Connectivity SolutionsSILC03/28/2022 +- NOLO VRNOLO03/28/2022 ++ NOLO Co., Ltd.NOLO03/28/2022 + + + +diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt +index eb99ea7fb0..67fd6c1836 100644 +--- a/hwdb.d/ma-large.txt ++++ b/hwdb.d/ma-large.txt +@@ -437,12 +437,6 @@ AC5D5C (base 16) FN-LINK TECHNOLOGY LIMITED + SHENZHEN GUANGDONG 518100 + CN + +-A4-AE-11 (hex) Hon Hai Precision Ind. Co., Ltd. +-A4AE11 (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + 54-DE-D0 (hex) Sevio Srl + 54DED0 (base 16) Sevio Srl + Via Dei Caniana 6/A +@@ -1523,12 +1517,6 @@ CCE194 (base 16) Juniper Networks + Sunnyvale CA 94089 + US + +-90-02-18 (hex) BSkyB Ltd +-900218 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 14-4E-2A (hex) Ciena Corporation + 144E2A (base 16) Ciena Corporation + 7035 Ridge Road +@@ -2963,12 +2951,6 @@ A8D498 (base 16) Avira Operations GmbH & Co. KG + Sunnyvale CA 94089 + US + +-D0-58-FC (hex) BSkyB Ltd +-D058FC (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 14-57-9F (hex) HUAWEI TECHNOLOGIES CO.,LTD + 14579F (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -8222,12 +8204,6 @@ D0B0CD (base 16) Moen + North Olmstead OH 44070-8022 + US + +-70-50-AF (hex) BSkyB Ltd +-7050AF (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + F4-EF-9E (hex) SGSG SCIENCE & TECHNOLOGY CO. LTD + F4EF9E (base 16) SGSG SCIENCE & TECHNOLOGY CO. LTD + 3RD Fl, Bldg A3, No.1 software Park Rd +@@ -10064,12 +10040,6 @@ B499BA (base 16) Hewlett Packard + Beijing 100101 + CN + +-0C-F9-C0 (hex) BSkyB Ltd +-0CF9C0 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 4C-FF-12 (hex) Fuze Entertainment Co., ltd + 4CFF12 (base 16) Fuze Entertainment Co., ltd + 3rd Floor Harbour Centre +@@ -10616,12 +10586,6 @@ D07AB5 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Chongqing Chongqing 401332 + CN + +-7C-4C-A5 (hex) BSkyB Ltd +-7C4CA5 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 00-14-A4 (hex) Hon Hai Precision Ind. Co.,Ltd. + 0014A4 (base 16) Hon Hai Precision Ind. Co.,Ltd. + Building D21,No.1, East Zone 1st Road +@@ -10682,12 +10646,6 @@ C87B5B (base 16) zte corporation + Seoul 13456 + KR + +-C0-3E-0F (hex) BSkyB Ltd +-C03E0F (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 90-4E-2B (hex) HUAWEI TECHNOLOGIES CO.,LTD + 904E2B (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -32636,12 +32594,6 @@ B0E4D5 (base 16) Google, Inc. + Mountain View CA 94043 + US + +-D4-DA-CD (hex) BSkyB Ltd +-D4DACD (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 68-69-CA (hex) Hitachi, Ltd. + 6869CA (base 16) Hitachi, Ltd. + 27-18, Minami Oi 6-chome, Shinagawa-ku +@@ -34187,18 +34139,6 @@ BC0F9A (base 16) D-Link International + Singapore Singapore 609917 + SG + +-B0-45-30 (hex) BSkyB Ltd +-B04530 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- +-6C-A0-B4 (hex) BSkyB Ltd +-6CA0B4 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 94-7B-BE (hex) Ubicquia LLC + 947BBE (base 16) Ubicquia LLC + BoA Building–Suite 1750, 401 E. Las Olas Boulevard +@@ -36797,12 +36737,6 @@ F8C3CC (base 16) Apple, Inc. + Hangzhou Zhejiang 310052 + CN + +-3C-9E-C7 (hex) BSkyB Ltd +-3C9EC7 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 18-5B-00 (hex) Nokia + 185B00 (base 16) Nokia + 600 March Road +@@ -38165,12 +38099,306 @@ C09F51 (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION + Piscataway NJ 08554 + US + ++A0-CD-F3 (hex) Murata Manufacturing Co., Ltd. ++A0CDF3 (base 16) Murata Manufacturing Co., Ltd. ++ 1-10-1, Higashikotari ++ Nagaokakyo-shi Kyoto 617-8555 ++ JP ++ ++B4-8A-0A (hex) Espressif Inc. ++B48A0A (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++C8-3A-1B (hex) Toshiba TEC Corporation Inc ++C83A1B (base 16) Toshiba TEC Corporation Inc ++ Oval Court Ohsaki Mark East ++ Shinagawa-ku Tokyo 141-8664 ++ JP ++ ++EC-A6-2F (hex) HUAWEI TECHNOLOGIES CO.,LTD ++ECA62F (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++AC-5A-F0 (hex) LG Electronics ++AC5AF0 (base 16) LG Electronics ++ 222 LG-ro, JINWI-MYEON ++ Pyeongtaek-si Gyeonggi-do 451-713 ++ KR ++ + 5C-53-C3 (hex) Ubee Interactive Co., Limited + 5C53C3 (base 16) Ubee Interactive Co., Limited + Flat/RM 1202, 12/F, AT Tower, 180 Electric Road + North Point 00000 + HK + ++24-32-AE (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. ++2432AE (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. ++ No.555 Qianmo Road ++ Hangzhou Zhejiang 310052 ++ CN ++ ++38-22-F4 (hex) Huawei Device Co., Ltd. ++3822F4 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++0C-BE-F1 (hex) Huawei Device Co., Ltd. ++0CBEF1 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++AC-93-6A (hex) Huawei Device Co., Ltd. ++AC936A (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++38-A4-4B (hex) Huawei Device Co., Ltd. ++38A44B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++1C-0E-D3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++1C0ED3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++7C-4C-A5 (hex) SKY UK LIMITED ++7C4CA5 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++C0-3E-0F (hex) SKY UK LIMITED ++C03E0F (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++0C-F9-C0 (hex) SKY UK LIMITED ++0CF9C0 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++70-50-AF (hex) SKY UK LIMITED ++7050AF (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++24-29-34 (hex) Google, Inc. ++242934 (base 16) Google, Inc. ++ 1600 Amphitheatre Parkway ++ Mountain View CA 94043 ++ US ++ ++38-0A-4F (hex) PRACHI ENTERPRISES ++380A4F (base 16) PRACHI ENTERPRISES ++ B-141, 2nd FLOOR SECTOR-6 NOIDA ++ NOIDA UTTARPRADESH 201301 ++ IN ++ ++80-19-70 (hex) Samsung Electronics Co.,Ltd ++801970 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++E0-F7-28 (hex) Amazon Technologies Inc. ++E0F728 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++B8-FB-AF (hex) Xiamen IPRT Technology CO.,LTD ++B8FBAF (base 16) Xiamen IPRT Technology CO.,LTD ++ 3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China. ++ xiamen fujian 361000 ++ CN ++ ++34-85-18 (hex) Espressif Inc. ++348518 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++D4-DA-CD (hex) SKY UK LIMITED ++D4DACD (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++B0-45-30 (hex) SKY UK LIMITED ++B04530 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++6C-A0-B4 (hex) SKY UK LIMITED ++6CA0B4 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++3C-9E-C7 (hex) SKY UK LIMITED ++3C9EC7 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++EC-E6-A2 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++ECE6A2 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++04-E8-B9 (hex) Intel Corporate ++04E8B9 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++E0-2E-0B (hex) Intel Corporate ++E02E0B (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++A4-AE-11 (hex) Hon Hai Precision Industry Co., Ltd. ++A4AE11 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++D0-58-FC (hex) SKY UK LIMITED ++D058FC (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++90-02-18 (hex) SKY UK LIMITED ++900218 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++38-5C-FB (hex) Silicon Laboratories ++385CFB (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ ++C4-3D-1A (hex) Intel Corporate ++C43D1A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++BC-F8-8B (hex) zte corporation ++BCF88B (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++68-53-9D (hex) EM Microelectronic ++68539D (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ ++E4-65-64 (hex) SHENZHEN KTC TECHNOLOGY CO.,LTD ++E46564 (base 16) SHENZHEN KTC TECHNOLOGY CO.,LTD ++ Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China ++ SHEN ZHEN GUANG DONG 518100 ++ CN ++ ++C8-BF-4C (hex) Beijing Xiaomi Mobile Software Co., Ltd ++C8BF4C (base 16) Beijing Xiaomi Mobile Software Co., Ltd ++ The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District ++ Beijing Beijing 100085 ++ CN ++ ++E8-CC-8C (hex) Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd. ++E8CC8C (base 16) Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd. ++ 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province ++ Chengdu Sichuan 610000 ++ CN ++ ++58-1C-F8 (hex) Intel Corporate ++581CF8 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++AC-19-8E (hex) Intel Corporate ++AC198E (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++C8-5E-A9 (hex) Intel Corporate ++C85EA9 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++3C-E0-64 (hex) Texas Instruments ++3CE064 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++E0-92-8F (hex) Texas Instruments ++E0928F (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++CC-03-7B (hex) Texas Instruments ++CC037B (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++E0-51-D8 (hex) China Dragon Technology Limited ++E051D8 (base 16) China Dragon Technology Limited ++ B4 Bldg.Haoshan 1st Industry Park, ++ Shenzhen Guangdong 518104 ++ CN ++ ++CC-29-BD (hex) zte corporation ++CC29BD (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++7C-DE-78 (hex) New H3C Technologies Co., Ltd ++7CDE78 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++5C-60-BA (hex) HP Inc. ++5C60BA (base 16) HP Inc. ++ 10300 Energy Dr ++ Spring TX 77389 ++ US ++ ++20-9C-B4 (hex) Aruba, a Hewlett Packard Enterprise Company ++209CB4 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ + 9C-FF-C2 (hex) AVI Systems GmbH + 9CFFC2 (base 16) AVI Systems GmbH + Dr. Franz Wilhelmstraße 2A +@@ -38459,12 +38687,6 @@ ACFE05 (base 16) ITEL MOBILE LIMITED + NO.68, Qinghe Middle Street Haidian District, Beijing 100085 + CN + +-B0-3E-51 (hex) BSkyB Ltd +-B03E51 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 5C-E8-83 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 5CE883 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -38513,12 +38735,6 @@ F887F1 (base 16) Apple, Inc. + Brandýs nad Labem 250 01 + CZ + +-80-72-15 (hex) BSkyB Ltd +-807215 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 74-D6-37 (hex) Amazon Technologies Inc. + 74D637 (base 16) Amazon Technologies Inc. + P.O Box 8102 +@@ -42458,12 +42674,6 @@ F0EFD2 (base 16) TF PAYMENT SERVICE CO., LTD + Shanghai Shanghai 201203 + CN + +-F4-93-9F (hex) Hon Hai Precision Ind. Co., Ltd. +-F4939F (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + 00-07-26 (hex) SHENZHEN GONGJIN ELECTRONICS CO.,LT + 000726 (base 16) SHENZHEN GONGJIN ELECTRONICS CO.,LT + A211-A213 & B201-B210, 2F, Baiying Building, 1019#, Nanhai RD, Shekou Party, Nanshan District, +@@ -68972,12 +69182,6 @@ D89E61 (base 16) Huawei Device Co., Ltd. + Rotkreuz CH-6343 + CH + +-80-75-1F (hex) BSkyB Ltd +-80751F (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + E8-5A-8B (hex) Xiaomi Communications Co Ltd + E85A8B (base 16) Xiaomi Communications Co Ltd + The Rainbow City of China Resources +@@ -70364,12 +70568,6 @@ B47947 (base 16) Nutanix + Hsinchu 30077 + TW + +-38-F0-C8 (hex) Mevo Inc. +-38F0C8 (base 16) Mevo Inc. +- 19 Morris Avenue +- Brooklyn NY 11205 +- US +- + 5C-FE-9E (hex) Wiwynn Corporation Tainan Branch + 5CFE9E (base 16) Wiwynn Corporation Tainan Branch + 4F, NO. 8, Beiyuan 3rd Rd., Anding Dist., +@@ -70796,12 +70994,6 @@ A0CFF5 (base 16) zte corporation + Dongguan Guangdong 523808 + CN + +-C0-A3-6E (hex) BSkyB Ltd +-C0A36E (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 60-32-B1 (hex) TP-LINK TECHNOLOGIES CO.,LTD. + 6032B1 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan +@@ -71078,12 +71270,6 @@ CC483A (base 16) Dell Inc. + Round Rock TX 78682 + US + +-A4-AE-12 (hex) Hon Hai Precision Ind. Co., Ltd. +-A4AE12 (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + DC-A3-A2 (hex) Feng mi(Beijing)technology co., LTD + DCA3A2 (base 16) Feng mi(Beijing)technology co., LTD + RenHe Town barracks south street 10 yuan 33 level 301 +@@ -73742,12 +73928,6 @@ E0C58F (base 16) China Mobile IOT Company Limited + Shanghai Shanghai 201203 + CN + +-00-A3-88 (hex) BSkyB Ltd +-00A388 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 50-3D-EB (hex) Zhejiang Tmall Technology Co., Ltd. + 503DEB (base 16) Zhejiang Tmall Technology Co., Ltd. + Ali Center,No.3331 Keyuan South RD (Shenzhen bay), Nanshan District, Shenzhen Guangdong province +@@ -75884,12 +76064,6 @@ E0806B (base 16) Xiaomi Communications Co Ltd + Oslo NO-0216 + NO + +-38-FD-F5 (hex) Renesas Electronics (Penang) Sdn. Bhd. +-38FDF5 (base 16) Renesas Electronics (Penang) Sdn. Bhd. +- Phase 3, Bayan Lepas FIZ +- Bayan Lepas Penang 11900 +- MY +- + 38-12-7B (hex) Crenet Labs Co., Ltd. + 38127B (base 16) Crenet Labs Co., Ltd. + Rm. 1, 10F., No. 181, Sec. 1, Datong Rd. +@@ -75902,12 +76076,306 @@ B0E45C (base 16) Samsung Electronics Co.,Ltd + Suwon Gyeonggi-Do 16677 + KR + ++BC-4C-A0 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++BC4CA0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++74-34-2B (hex) HUAWEI TECHNOLOGIES CO.,LTD ++74342B (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++C4-12-EC (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C412EC (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++6C-C2-42 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++6CC242 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ ++68-7F-F0 (hex) TP-Link Corporation Limited ++687FF0 (base 16) TP-Link Corporation Limited ++ Room 901,9/F.New East Ocean Centre, 9 Science Museum Road ++ Tsim Sha Tsui Kowloon 999077 ++ HK ++ + DC-36-0C (hex) Hitron Technologies. Inc + DC360C (base 16) Hitron Technologies. Inc + No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C + Hsin-chu Taiwan 300 + TW + ++38-FD-F5 (hex) Renesas Electronics (Penang) Sdn. Bhd. ++38FDF5 (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY ++ ++4C-62-7B (hex) SmartCow AI Technologies Taiwan Ltd. ++4C627B (base 16) SmartCow AI Technologies Taiwan Ltd. ++ 16F., No. 102, Songlong Rd., Xinyi Dist., ++ Taipei City 110059 ++ TW ++ ++BC-7B-72 (hex) Huawei Device Co., Ltd. ++BC7B72 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++F8-2B-7F (hex) Huawei Device Co., Ltd. ++F82B7F (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++D8-68-A0 (hex) Samsung Electronics Co.,Ltd ++D868A0 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++04-29-2E (hex) Samsung Electronics Co.,Ltd ++04292E (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++40-C3-BC (hex) Huawei Device Co., Ltd. ++40C3BC (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++28-53-E0 (hex) Sintela Ltd ++2853E0 (base 16) Sintela Ltd ++ The Distillery, The Old Brewery, 9-11 Lodway, ++ Pill Bristol BS20 0DH ++ GB ++ ++60-CF-69 (hex) meerecompany ++60CF69 (base 16) meerecompany ++ 69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of Korea ++ Hwaseong-si 18630 ++ KR ++ ++34-FE-1C (hex) CHOUNG HWA TECH CO.,LTD ++34FE1C (base 16) CHOUNG HWA TECH CO.,LTD ++ #31 Jangja-ro, Namdong-gu ++ Incheon-si 21532 ++ KR ++ ++F4-93-9F (hex) Hon Hai Precision Industry Co., Ltd. ++F4939F (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++A4-AE-12 (hex) Hon Hai Precision Industry Co., Ltd. ++A4AE12 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++38-F0-C8 (hex) Logitech ++38F0C8 (base 16) Logitech ++ 7700 Gateway Blvd ++ Newark CA 94560 ++ US ++ ++BC-5D-A3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++BC5DA3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++80-75-1F (hex) SKY UK LIMITED ++80751F (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++C0-A3-6E (hex) SKY UK LIMITED ++C0A36E (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++00-A3-88 (hex) SKY UK LIMITED ++00A388 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++AC-4E-65 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++AC4E65 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++80-72-15 (hex) SKY UK LIMITED ++807215 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++B0-3E-51 (hex) SKY UK LIMITED ++B03E51 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++1C-EF-03 (hex) Guangzhou V-SOLUTION Electronic Technology Co., Ltd. ++1CEF03 (base 16) Guangzhou V-SOLUTION Electronic Technology Co., Ltd. ++ Room 601,Originality Building B2, NO.162 Science Avenue,Science Town ++ Guangzhou Guangdong 510663 ++ CN ++ ++58-B0-3E (hex) Nintendo Co.,Ltd ++58B03E (base 16) Nintendo Co.,Ltd ++ 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU ++ KYOTO KYOTO 601-8501 ++ JP ++ ++54-45-38 (hex) Texas Instruments ++544538 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++74-13-EA (hex) Intel Corporate ++7413EA (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++18-7A-3E (hex) Silicon Laboratories ++187A3E (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ ++30-05-05 (hex) Intel Corporate ++300505 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++B0-DC-EF (hex) Intel Corporate ++B0DCEF (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++2C-A7-74 (hex) Texas Instruments ++2CA774 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++DC-F3-1C (hex) Texas Instruments ++DCF31C (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++28-BC-05 (hex) BLU Products Inc ++28BC05 (base 16) BLU Products Inc ++ 10814 NW 33rd Street ++ Miami FL 33172 ++ US ++ ++18-4E-03 (hex) HMD Global Oy ++184E03 (base 16) HMD Global Oy ++ Bertel Jungin aukio 9 ++ Espoo 02600 ++ FI ++ ++40-22-D8 (hex) Espressif Inc. ++4022D8 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++E0-08-71 (hex) Dongguan Liesheng Electronic Co., Ltd. ++E00871 (base 16) Dongguan Liesheng Electronic Co., Ltd. ++ F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci ++ dongguan guangdong 523000 ++ CN ++ ++90-65-60 (hex) EM Microelectronic ++906560 (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ ++A0-FB-83 (hex) Honor Device Co., Ltd. ++A0FB83 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++DC-0B-09 (hex) Cisco Systems, Inc ++DC0B09 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++08-F3-FB (hex) Cisco Systems, Inc ++08F3FB (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++88-0A-A3 (hex) Juniper Networks ++880AA3 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++04-D9-C8 (hex) Hon Hai Precision Industry Co., Ltd. ++04D9C8 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++78-C2-13 (hex) Sagemcom Broadband SAS ++78C213 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++A0-36-BC (hex) ASUSTek COMPUTER INC. ++A036BC (base 16) ASUSTek COMPUTER INC. ++ 15,Li-Te Rd., Peitou, Taipei 112, Taiwan ++ Taipei Taiwan 112 ++ TW ++ ++10-73-EB (hex) Infiniti Electro-Optics ++1073EB (base 16) Infiniti Electro-Optics ++ 15 - 9th Ave S ++ Cranbrook British Columbia V1C 2L9 ++ CA ++ ++9C-95-6E (hex) Microchip Technology Inc. ++9C956E (base 16) Microchip Technology Inc. ++ 2355 W. Chandler Blvd. ++ Chandler AZ 85224 ++ US ++ ++84-0B-BB (hex) MitraStar Technology Corp. ++840BBB (base 16) MitraStar Technology Corp. ++ No. 6, Innovation Road II, ++ Hsinchu 300 ++ TW ++ + 84-80-94 (hex) Meter, Inc. + 848094 (base 16) Meter, Inc. + 148 Townsend St +@@ -80036,12 +80504,6 @@ E084F3 (base 16) High Grade Controls Corporation + Sudbury Ontario P3Y1K6 + CA + +-38-A6-CE (hex) BSkyB Ltd +-38A6CE (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 70-70-8B (hex) Cisco Systems, Inc + 70708B (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -81566,12 +82028,6 @@ C8AA55 (base 16) Hunan Comtom Electronic Incorporated Co.,Ltd + Sunnyvale CA 94089 + US + +-24-A7-DC (hex) BSkyB Ltd +-24A7DC (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 64-DB-A0 (hex) Select Comfort + 64DBA0 (base 16) Select Comfort + 9800 59th Ave N +@@ -86192,18 +86648,6 @@ D0154A (base 16) zte corporation + YOKOHAMA 226 12345 + JP + +-78-3E-53 (hex) BSkyB Ltd +-783E53 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- +-00-19-FB (hex) BSkyB Ltd +-0019FB (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 14-B9-68 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 14B968 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -109697,12 +110141,6 @@ ACFAA5 (base 16) digitron + Chongqing China 401120 + CN + +-BC-69-CB (hex) Panasonic Life Solutions Networks Co., Ltd. +-BC69CB (base 16) Panasonic Life Solutions Networks Co., Ltd. +- 2-12-7, Higashi-Shinbashi +- Minato-Ku Tokyo 105-0021 +- JP +- + 08-93-56 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 089356 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -111353,9 +111791,6 @@ CC3ADF (base 16) Neptune Technology Group Inc. + Tallassee AL 36078 + US + +-68-EC-8A (hex) Private +-68EC8A (base 16) Private +- + 3C-62-F0 (hex) Sercomm Corporation. + 3C62F0 (base 16) Sercomm Corporation. + 3F,No.81,Yu-Yih Rd.,Chu-Nan Chen +@@ -113816,6 +114251,24 @@ AC83F0 (base 16) Cobalt Digital Inc. + Champaign IL 61821 + US + ++AC-15-A2 (hex) TP-Link Corporation Limited ++AC15A2 (base 16) TP-Link Corporation Limited ++ Room 901,9/F.New East Ocean Centre, 9 Science Museum Road ++ Tsim Sha Tsui Kowloon 999077 ++ HK ++ ++B8-59-C8 (hex) 70mai Co.,Ltd. ++B859C8 (base 16) 70mai Co.,Ltd. ++ Room 2220, building 2, No. 588, Zixing road ++ Shanghai MinHang District 201100 ++ CN ++ ++A8-E2-07 (hex) GOIP Global Services Pvt. Ltd. ++A8E207 (base 16) GOIP Global Services Pvt. Ltd. ++ H68, Sector 63, Noida 201301 ++ Noida Uttar Pradesh 201301 ++ IN ++ + 40-22-30 (hex) Shenzhen SuperElectron Technology Co.,Ltd. + 402230 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. + 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city +@@ -113828,18 +114281,342 @@ B8B409 (base 16) Samsung Electronics Co.,Ltd + Suwon Gyeonggi-Do 16677 + KR + ++AC-DF-9F (hex) Arcadyan Corporation ++ACDF9F (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW ++ ++D4-E2-2F (hex) Roku, Inc ++D4E22F (base 16) Roku, Inc ++ 1155 Coleman Ave ++ San Jose CA 95110 ++ US ++ + 00-13-95 (hex) congatec GmbH + 001395 (base 16) congatec GmbH + Auwiesenstrasse 5 + Deggendorf 94469 + DE + +-D4-E2-2F (hex) Roku, Inc +-D4E22F (base 16) Roku, Inc +- 1155 Coleman Ave +- San Jose CA 95110 ++28-77-B1 (hex) Tri plus grupa d.o.o. ++2877B1 (base 16) Tri plus grupa d.o.o. ++ Banjavciceva 11 ++ Zagreb Zagreb 10000 ++ HR ++ ++C4-3C-B0 (hex) SHENZHEN BILIAN ELECTRONIC CO.,LTD ++C43CB0 (base 16) SHENZHEN BILIAN ELECTRONIC CO.,LTD ++ NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district ++ shenzhen guangdong 518000 ++ CN ++ ++3C-0B-4F (hex) Yandex Services AG ++3C0B4F (base 16) Yandex Services AG ++ Werftestrasse 4, ++ Luzern 6005 ++ CH ++ ++4C-31-2D (hex) Sichuan AI-Link Technology Co., Ltd. ++4C312D (base 16) Sichuan AI-Link Technology Co., Ltd. ++ Anzhou, Industrial Park ++ Mianyang Sichuan 622650 ++ CN ++ ++D8-7E-6F (hex) CASCINATION AG ++D87E6F (base 16) CASCINATION AG ++ Steigerhubelstrasse 3 ++ Bern Bern 3008 ++ CH ++ ++04-4F-7A (hex) China Mobile Group Device Co.,Ltd. ++044F7A (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ ++40-5E-F6 (hex) Samsung Electronics Co.,Ltd ++405EF6 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++94-52-44 (hex) Samsung Electronics Co.,Ltd ++945244 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++9C-2E-7A (hex) Samsung Electronics Co.,Ltd ++9C2E7A (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++7C-63-05 (hex) Amazon Technologies Inc. ++7C6305 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++C0-4E-30 (hex) Espressif Inc. ++C04E30 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++74-E7-98 (hex) Juniper Networks ++74E798 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++E0-16-B1 (hex) Advanced Design Technology co.,ltd. ++E016B1 (base 16) Advanced Design Technology co.,ltd. ++ 1-1-3 Kotobukicho#10F Mitsukikotobukichobiru ++ Fucyu-city Tokyo 1830056 ++ JP ++ ++54-31-D4 (hex) TGW Mechanics GmbH ++5431D4 (base 16) TGW Mechanics GmbH ++ Collmannstraße 2 ++ Wels 4600 ++ AT ++ ++94-01-AC (hex) Wuhan Qianyang Iotian Technology Co., Ltd ++9401AC (base 16) Wuhan Qianyang Iotian Technology Co., Ltd ++ Unit 1301, Building B4, Wuhan future science and Technology City, Gaoxin Avenue, Wuhan East Lake New-Technology Development Zone ++ Wuhan Hubei 430206 ++ CN ++ ++C0-69-11 (hex) Arista Networks ++C06911 (base 16) Arista Networks ++ 5453 Great America Parkway ++ Santa Clara CA 95054 + US + ++E4-B5-55 (hex) Huawei Device Co., Ltd. ++E4B555 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++24-A7-DC (hex) SKY UK LIMITED ++24A7DC (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++38-A6-CE (hex) SKY UK LIMITED ++38A6CE (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++AC-60-6F (hex) Nokia Shanghai Bell Co., Ltd. ++AC606F (base 16) Nokia Shanghai Bell Co., Ltd. ++ No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai ++ Shanghai 201206 ++ CN ++ ++00-19-FB (hex) SKY UK LIMITED ++0019FB (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++78-3E-53 (hex) SKY UK LIMITED ++783E53 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++68-EC-8A (hex) IKEA of Sweden AB ++68EC8A (base 16) IKEA of Sweden AB ++ ++ ++ ++ ++48-02-AF (hex) Telit Communication s.p.a ++4802AF (base 16) Telit Communication s.p.a ++ Via stazione di prosecco 5B ++ SGONICO Trieste 34010 ++ IT ++ ++FC-C7-37 (hex) Shaanxi Gangsion Electronic Technology Co., Ltd ++FCC737 (base 16) Shaanxi Gangsion Electronic Technology Co., Ltd ++ Room 12302, building 1, Greenland territorial sea, No. 6, Jinye Road, high tech Zone, Xi'an, Shaanxi ++ xi'an Shaanxi 710076 ++ CN ++ ++94-28-6F (hex) zte corporation ++94286F (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++40-0E-F3 (hex) zte corporation ++400EF3 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++1C-46-D1 (hex) SKY UK LIMITED ++1C46D1 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++00-3F-10 (hex) Shenzhen GainStrong Technology Co., Ltd. ++003F10 (base 16) Shenzhen GainStrong Technology Co., Ltd. ++ 4/F, Building B, Hengmingzhu Industrial Park, Qian Jin Road 2, Baoan District ++ Shenzhen Guangdong 518126 ++ CN ++ ++88-22-B2 (hex) Chipsea Technologies (Shenzhen) Corp. ++8822B2 (base 16) Chipsea Technologies (Shenzhen) Corp. ++ 3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen ++ Shenzhen Guangdong 518000 ++ CN ++ ++68-7A-64 (hex) Intel Corporate ++687A64 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++BC-03-58 (hex) Intel Corporate ++BC0358 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++88-B8-63 (hex) HISENSE VISUAL TECHNOLOGY CO.,LTD ++88B863 (base 16) HISENSE VISUAL TECHNOLOGY CO.,LTD ++ Qianwangang Road 218 ++ Qingdao Shandong 266510 ++ CN ++ ++BC-69-CB (hex) Panasonic Electric Works Networks Co., Ltd. ++BC69CB (base 16) Panasonic Electric Works Networks Co., Ltd. ++ 2-12-7, Higashi-Shinbashi ++ Minato-Ku Tokyo 105-0021 ++ JP ++ ++58-C5-7E (hex) Fiberhome Telecommunication Technologies Co.,LTD ++58C57E (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++74-3A-F4 (hex) Intel Corporate ++743AF4 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++2C-93-FB (hex) Sercomm France Sarl ++2C93FB (base 16) Sercomm France Sarl ++ 2/4 Rue Maurice Hartmann 92370 Issy Les Moulineaux France ++ Moulineaux 92370 ++ FR ++ ++B4-46-6B (hex) REALTIMEID AS ++B4466B (base 16) REALTIMEID AS ++ Busk Bruns veg 1 , 7760 Snåsa (Norway) ++ Snåsa 7760 ++ NO ++ ++90-6A-EB (hex) Microsoft Corporation ++906AEB (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ ++C4-EB-39 (hex) Sagemcom Broadband SAS ++C4EB39 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++00-52-C8 (hex) Made Studio Design Ltd. ++0052C8 (base 16) Made Studio Design Ltd. ++ 10F., No. 169, Sec. 4, Zhongxiao E. Rd., Da-an Dist. ++ Taipei City 10690 ++ TW ++ ++08-9D-F4 (hex) Intel Corporate ++089DF4 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++DC-46-28 (hex) Intel Corporate ++DC4628 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++0C-91-92 (hex) Intel Corporate ++0C9192 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++48-AD-9A (hex) Intel Corporate ++48AD9A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++68-65-B7 (hex) Zhishang Chuanglian Technology Co., Ltd ++6865B7 (base 16) Zhishang Chuanglian Technology Co., Ltd ++ 2 / F, building F, hongfengtai Science Park, Jinyuan Road, Henggang street, Longgang District, ++ Shenzhen 518000 ++ CN ++ ++F0-C1-CE (hex) GoodWe Technologies CO., Ltd ++F0C1CE (base 16) GoodWe Technologies CO., Ltd ++ No.90 Zijin Rd.,New District,Suzhou,215011,China ++ Suzhou JiangSu 215011 ++ CN ++ ++58-2B-0A (hex) Texas Instruments ++582B0A (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++38-E7-C0 (hex) Hui Zhou Gaoshengda Technology Co.,LTD ++38E7C0 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD ++ No.2,Jin-da Road,Huinan Industrial Park ++ Hui Zhou Guangdong 516025 ++ CN ++ ++D8-E8-44 (hex) zte corporation ++D8E844 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++E4-6A-35 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++E46A35 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ ++20-04-F3 (hex) Honor Device Co., Ltd. ++2004F3 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ ++68-B9-C2 (hex) Earda Technologies co Ltd ++68B9C2 (base 16) Earda Technologies co Ltd ++ Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District ++ Guangzhou Guangdong 511455 ++ CN ++ + F8-D0-27 (hex) Seiko Epson Corporation + F8D027 (base 16) Seiko Epson Corporation + 2070 Kotobuki Koaka +@@ -114089,12 +114866,6 @@ D015A6 (base 16) Aruba, a Hewlett Packard Enterprise Company + Cambridge CB24 9ZR + GB + +-04-81-9B (hex) BSkyB Ltd +-04819B (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + E0-00-84 (hex) HUAWEI TECHNOLOGIES CO.,LTD + E00084 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -115940,12 +116711,6 @@ A85AF3 (base 16) Shanghai Siflower Communication Technology Co., Ltd + Chongqing Chongqing 401332 + CN + +-3C-89-94 (hex) BSkyB Ltd +-3C8994 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + E0-0E-E1 (hex) We Corporation Inc. + E00EE1 (base 16) We Corporation Inc. + 201, 33, Deokcheon-ro, Manan-gu +@@ -117170,12 +117935,6 @@ CC2DB7 (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-A0-BD-CD (hex) BSkyB Ltd +-A0BDCD (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + BC-91-B5 (hex) Infinix mobility limited + BC91B5 (base 16) Infinix mobility limited + RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +@@ -119492,12 +120251,6 @@ F0D5BF (base 16) Intel Corporate + shenzhen guangdong 518057 + CN + +-20-47-ED (hex) BSkyB Ltd +-2047ED (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 74-8A-69 (hex) Korea Image Technology Co., Ltd + 748A69 (base 16) Korea Image Technology Co., Ltd + 125, beolmal road, dongan gu, +@@ -129593,12 +130346,6 @@ E03E7D (base 16) data-complex GmbH + Seoul Geumcheon-gu 153-802 + KR + +-04-26-05 (hex) GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH +-042605 (base 16) GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH +- Kapellenweg 42 +- Verl 33415 +- DE +- + 24-F0-FF (hex) GHT Co., Ltd. + 24F0FF (base 16) GHT Co., Ltd. + #16 Nanyunyi Lu, Guangzhou Science City +@@ -146654,12 +147401,6 @@ A0D83D (base 16) Fiberhome Telecommunication Technologies Co.,LTD + San Jose CA 94568 + US + +-50-70-43 (hex) BSkyB Ltd +-507043 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + D0-14-11 (hex) IEEE Registration Authority + D01411 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -148280,12 +149021,6 @@ E00CE5 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Kulim Kedah 09000 + MY + +-F4-6B-8C (hex) Hon Hai Precision Ind. Co., Ltd. +-F46B8C (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + FC-34-97 (hex) ASUSTek COMPUTER INC. + FC3497 (base 16) ASUSTek COMPUTER INC. + 15,Li-Te Rd., Peitou, Taipei 112, Taiwan +@@ -149627,12 +150362,6 @@ F4CE48 (base 16) Extreme Networks, Inc. + Kowloon Bay Hong Kong 0000 + HK + +-04-B8-6A (hex) BSkyB Ltd +-04B86A (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 1C-88-0C (hex) Shenzhen Skyworth Digital Technology CO., Ltd + 1C880C (base 16) Shenzhen Skyworth Digital Technology CO., Ltd + 4F,Block A, Skyworth?Building, +@@ -150401,12 +151130,6 @@ D0A0D6 (base 16) ChengDu TD Tech + Mianyang Sichuan 621000 + CN + +-3C-45-7A (hex) BSkyB Ltd +-3C457A (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 90-27-59 (hex) Nanjing Jiahao Technology Co., Ltd. + 902759 (base 16) Nanjing Jiahao Technology Co., Ltd. + Moling Industrial Park, Development Zone, Jiangning, Nanjing +@@ -150803,12 +151526,6 @@ ECA907 (base 16) Apple, Inc. + Vejle 7120 + DK + +-4C-72-74 (hex) shenzhenshi xinzhongxin Technology Co.Ltd +-4C7274 (base 16) shenzhenshi xinzhongxin Technology Co.Ltd +- Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China +- ShenZHEN GuangDong 518104 +- CN +- + F4-B8-98 (hex) Texas Instruments + F4B898 (base 16) Texas Instruments + 12500 TI Blvd +@@ -151949,12 +152666,288 @@ E09C8D (base 16) Seakeeper, Inc. + Taipei City 114 + TW + ++34-3A-20 (hex) Aruba, a Hewlett Packard Enterprise Company ++343A20 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ + 30-3F-5D (hex) PT HAN SUNG ELECTORONICS INDONESIA + 303F5D (base 16) PT HAN SUNG ELECTORONICS INDONESIA + JL.PALEM 1 BLOK DS-6 + KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN BEKASI JAWA BARAT 17550 + ID + ++18-E9-1D (hex) HUAWEI TECHNOLOGIES CO.,LTD ++18E91D (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++48-70-6F (hex) HUAWEI TECHNOLOGIES CO.,LTD ++48706F (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++F4-6A-DD (hex) Liteon Technology Corporation ++F46ADD (base 16) Liteon Technology Corporation ++ 4F, 90, Chien 1 Road ++ New Taipei City Taiwan 23585 ++ TW ++ ++C8-2A-F1 (hex) TCT mobile ltd ++C82AF1 (base 16) TCT mobile ltd ++ No.86 hechang 7th road, zhongkai, Hi-Tech District ++ Hui Zhou Guang Dong 516006 ++ CN ++ ++3C-E9-0E (hex) Espressif Inc. ++3CE90E (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++A8-42-E3 (hex) Espressif Inc. ++A842E3 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++7C-0C-92 (hex) Suzhou Mobydata Smart System Co.,Ltd. ++7C0C92 (base 16) Suzhou Mobydata Smart System Co.,Ltd. ++ 3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China ++ Suzhou Jingsu 215000 ++ CN ++ ++04-26-05 (hex) Bosch Building Automation GmbH ++042605 (base 16) Bosch Building Automation GmbH ++ Kapellenweg 42 ++ Verl 33415 ++ DE ++ ++3C-FE-AC (hex) Cisco Systems, Inc ++3CFEAC (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++04-A7-41 (hex) Cisco Systems, Inc ++04A741 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++A0-88-9D (hex) Huawei Device Co., Ltd. ++A0889D (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++98-D7-42 (hex) Samsung Electronics Co.,Ltd ++98D742 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++D4-9B-74 (hex) Kinetic Technologies ++D49B74 (base 16) Kinetic Technologies ++ 6399 San Ignacio Ave #250 ++ San Jose CA 95119 ++ US ++ ++40-F8-DF (hex) CANON INC. ++40F8DF (base 16) CANON INC. ++ 30-2 Shimomaruko 3-chome, ++ Ohta-ku Tokyo 146-8501 ++ JP ++ ++20-47-ED (hex) SKY UK LIMITED ++2047ED (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++A0-BD-CD (hex) SKY UK LIMITED ++A0BDCD (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++3C-89-94 (hex) SKY UK LIMITED ++3C8994 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++04-81-9B (hex) SKY UK LIMITED ++04819B (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++50-70-43 (hex) SKY UK LIMITED ++507043 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++04-B8-6A (hex) SKY UK LIMITED ++04B86A (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++3C-45-7A (hex) SKY UK LIMITED ++3C457A (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++F4-6B-8C (hex) Hon Hai Precision Industry Co., Ltd. ++F46B8C (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++74-37-5F (hex) SERCOMM PHILIPPINES INC ++74375F (base 16) SERCOMM PHILIPPINES INC ++ Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City ++ Calamba Lot 1 ++ PH ++ ++7C-67-AB (hex) Roku, Inc ++7C67AB (base 16) Roku, Inc ++ 1155 Coleman Ave ++ San Jose CA 95110 ++ US ++ ++0C-7F-ED (hex) IEEE Registration Authority ++0C7FED (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++F4-3B-D8 (hex) Intel Corporate ++F43BD8 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++C8-4B-D6 (hex) Dell Inc. ++C84BD6 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US ++ ++E0-86-14 (hex) Novatel Wireless Solutions, Inc. ++E08614 (base 16) Novatel Wireless Solutions, Inc. ++ 9710 Scranton Rd., Suite 200 ++ San Diego CA 92121 ++ US ++ ++A8-DE-68 (hex) Beijing Wide Technology Co.,Ltd ++A8DE68 (base 16) Beijing Wide Technology Co.,Ltd ++ Floor7,Block B,Yicheng wealth center,No. 22,Ronghua Middle Road,Beijing Economic and Technological Development Zone ++ Beijing Beijing 100000 ++ CN ++ ++6C-30-2A (hex) Texas Instruments ++6C302A (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++74-46-B3 (hex) Texas Instruments ++7446B3 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++94-4E-5B (hex) Ubee Interactive Co., Limited ++944E5B (base 16) Ubee Interactive Co., Limited ++ Flat/RM 1202, 12/F, AT Tower, 180 Electric Road ++ North Point 00000 ++ HK ++ ++B4-BA-9D (hex) SKY UK LIMITED ++B4BA9D (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++50-F2-61 (hex) Photon Sail Technologies ++50F261 (base 16) Photon Sail Technologies ++ 8 Robinson Road, ASO Building ++ Singapore 048544 ++ SG ++ ++80-DA-C2 (hex) Technicolor CH USA Inc. ++80DAC2 (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ ++00-41-0E (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++00410E (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++FC-61-79 (hex) IEEE Registration Authority ++FC6179 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++3C-4E-56 (hex) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++3C4E56 (base 16) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++ Unit East Block22-24/F,Skyworth semiconductor design Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China ++ SHENZHEN GUANGDONG 518057 ++ CN ++ ++08-B6-1F (hex) Espressif Inc. ++08B61F (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++98-A2-C0 (hex) Cisco Systems, Inc ++98A2C0 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++EC-74-D7 (hex) Grandstream Networks Inc ++EC74D7 (base 16) Grandstream Networks Inc ++ 126 brookline avenue ++ boston MA 02215 ++ US ++ ++4C-72-74 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd ++4C7274 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd ++ Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China ++ ShenZHEN GuangDong 518104 ++ CN ++ ++30-63-71 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd ++306371 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd ++ Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China ++ ShenZHEN GuangDong 518104 ++ CN ++ ++88-12-AC (hex) HUNAN FN-LINK TECHNOLOGY LIMITED ++8812AC (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED ++ No.8, Litong Road, Liuyan Economic & Tec ++ Changsha HUNAN 410329 ++ CN ++ ++28-01-1C (hex) zte corporation ++28011C (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ + 7C-8A-E1 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD. + 7C8AE1 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD. + NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE +@@ -155294,12 +156287,6 @@ F0766F (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-1C-A0-B8 (hex) Hon Hai Precision Ind. Co., Ltd. +-1CA0B8 (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + D8-84-66 (hex) Extreme Networks, Inc. + D88466 (base 16) Extreme Networks, Inc. + 145 Rio Robles +@@ -155696,12 +156683,6 @@ ECFABC (base 16) Espressif Inc. + San Jose CA 95121 + US + +-28-C1-3C (hex) Hon Hai Precision Ind. Co., Ltd. +-28C13C (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + B0-EC-E1 (hex) Private + B0ECE1 (base 16) Private + +@@ -157199,12 +158180,6 @@ EC01EE (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + Morristown NJ 07960 + US + +-70-20-84 (hex) Hon Hai Precision Ind. Co., Ltd. +-702084 (base 16) Hon Hai Precision Ind. Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + 9C-66-50 (hex) Glodio Technolies Co.,Ltd Tianjin Branch + 9C6650 (base 16) Glodio Technolies Co.,Ltd Tianjin Branch + Room 904, No.1-2 LanYuan Road, HuaYuan Industrial Area +@@ -162488,12 +163463,6 @@ C40528 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Yasu-gun Shiga 520-2393 + JP + +-90-21-06 (hex) BSkyB Ltd +-902106 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + D0-27-88 (hex) Hon Hai Precision Ind. Co.,Ltd. + D02788 (base 16) Hon Hai Precision Ind. Co.,Ltd. + Building D21,No.1, East Zone 1st Road +@@ -183329,12 +184298,6 @@ A0946A (base 16) Shenzhen XGTEC Technology Co,.Ltd. + San Jose CA 94568 + US + +-9C-31-C3 (hex) BSkyB Ltd +-9C31C3 (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 6C-24-A6 (hex) vivo Mobile Communication Co., Ltd. + 6C24A6 (base 16) vivo Mobile Communication Co., Ltd. + #283,BBK Road +@@ -184205,12 +185168,6 @@ C01692 (base 16) China Mobile Group Device Co.,Ltd. + Dongguan 523808 + CN + +-D4-52-EE (hex) BSkyB Ltd +-D452EE (base 16) BSkyB Ltd +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + E0-23-FF (hex) Fortinet, Inc. + E023FF (base 16) Fortinet, Inc. + 899 Kifer Road +@@ -189836,6 +190793,48 @@ F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Malmö 21136 + SE + ++E8-AC-23 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++E8AC23 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++68-D9-27 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++68D927 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++90-F9-70 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++90F970 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++04-CA-ED (hex) HUAWEI TECHNOLOGIES CO.,LTD ++04CAED (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++68-EE-88 (hex) Shenzhen TINNO Mobile Technology Corp. ++68EE88 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++54-3D-92 (hex) WIRELESS-TEK TECHNOLOGY LIMITED ++543D92 (base 16) WIRELESS-TEK TECHNOLOGY LIMITED ++ Room 402 4F, BiaoFan Technology Building, Bao'An Avenue, FuYong Town, Bao'An district, ShenZhen,China ++ SHENZHEN 518000 ++ CN ++ ++98-26-AD (hex) Quectel Wireless Solutions Co.,Ltd. ++9826AD (base 16) Quectel Wireless Solutions Co.,Ltd. ++ 7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District ++ Shanghai 200233 ++ CN ++ + 60-1E-98 (hex) Axevast Technology + 601E98 (base 16) Axevast Technology + 5F., No. 20, Guanqian Road, Zhongzheng District +@@ -189853,3 +190852,183 @@ A8F7D9 (base 16) Mist Systems, Inc. + 8F., No. 94, Baozhong Rd. + New Taipei City Taiwan 231 + TW ++ ++38-86-F7 (hex) Google, Inc. ++3886F7 (base 16) Google, Inc. ++ 1600 Amphitheatre Parkway ++ Mountain View CA 94043 ++ US ++ ++F4-22-7A (hex) Guangdong Seneasy Intelligent Technology Co., Ltd. ++F4227A (base 16) Guangdong Seneasy Intelligent Technology Co., Ltd. ++ No. 63, Huitai Industrial Park, ++ Huizhou City, Guangdong Province 516000 ++ CN ++ ++8C-51-09 (hex) IEEE Registration Authority ++8C5109 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++A4-75-B9 (hex) Samsung Electronics Co.,Ltd ++A475B9 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++80-54-9C (hex) Samsung Electronics Co.,Ltd ++80549C (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++6C-60-D0 (hex) Huawei Device Co., Ltd. ++6C60D0 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++1C-F8-D0 (hex) Samsung Electronics Co.,Ltd ++1CF8D0 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++64-0E-6A (hex) SECO-LARM USA Inc ++640E6A (base 16) SECO-LARM USA Inc ++ 16842 Millikan ++ Irvine CA 92606 ++ US ++ ++68-E1-54 (hex) SiMa.ai ++68E154 (base 16) SiMa.ai ++ 226 Airport Parkway, Suite 550 ++ San Jose CA 95110 ++ US ++ ++DC-8D-B7 (hex) ATW TECHNOLOGY, INC. ++DC8DB7 (base 16) ATW TECHNOLOGY, INC. ++ 1F, No.236 Ba’ai Street, Shulin District ++ New Taipei City 23845 ++ TW ++ ++70-20-84 (hex) Hon Hai Precision Industry Co., Ltd. ++702084 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++28-C1-3C (hex) Hon Hai Precision Industry Co., Ltd. ++28C13C (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++1C-A0-B8 (hex) Hon Hai Precision Industry Co., Ltd. ++1CA0B8 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++18-AA-1E (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++18AA1E (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ ++9C-31-C3 (hex) SKY UK LIMITED ++9C31C3 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++D4-52-EE (hex) SKY UK LIMITED ++D452EE (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++90-21-06 (hex) SKY UK LIMITED ++902106 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++D8-FF-C3 (hex) Shenzhen 3SNIC information technology company Limited ++D8FFC3 (base 16) Shenzhen 3SNIC information technology company Limited ++ Room 3101, Building 3, Nanshan Zhiyuan Chongwen Park, No.3370, Liuxian Avenue, Fuguang Community, Taoyuan Street, Nanshan District, ++ Shenzhen Guangdong 518000 ++ CN ++ ++F0-87-56 (hex) Zyxel Communications Corporation ++F08756 (base 16) Zyxel Communications Corporation ++ No. 6 Innovation Road II, Science Park ++ Hsichu Taiwan 300 ++ TW ++ ++E8-EF-05 (hex) MIND TECH INTERNATIONAL LIMITED ++E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED ++ FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK ++ Hong Kong 999077 ++ HK ++ ++48-27-E2 (hex) Espressif Inc. ++4827E2 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++58-B3-8F (hex) New H3C Technologies Co., Ltd ++58B38F (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++40-E1-71 (hex) Jiangsu Huitong Group Co.,Ltd. ++40E171 (base 16) Jiangsu Huitong Group Co.,Ltd. ++ No. 24, Block 2, Taohuawu New District ++ Zhenjiang Jiangsu 212003 ++ CN ++ ++F4-6D-3F (hex) Intel Corporate ++F46D3F (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++6C-72-4A (hex) Onkyo Technology K.K. ++6C724A (base 16) Onkyo Technology K.K. ++ Lux Building (5th floor),1-1-41 Kawamata ++ Higashiosaka City Osaka 577-0063 ++ JP ++ ++18-C3-00 (hex) Nokia ++18C300 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++D4-4D-77 (hex) Nokia ++D44D77 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++DC-05-39 (hex) Cisco Systems, Inc ++DC0539 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++8C-25-5E (hex) VoltServer ++8C255E (base 16) VoltServer ++ 42 Ladd St STE 227 ++ East Greenwich RI 02818 ++ US ++ ++B8-8F-27 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++B88F27 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN +diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt +index 0410acdf80..08cdcba936 100644 +--- a/hwdb.d/ma-medium.txt ++++ b/hwdb.d/ma-medium.txt +@@ -2714,12 +2714,6 @@ B00000-BFFFFF (base 16) Oliotalo Oy + Taipei City 10656 + TW + +-80-7B-85 (hex) Ningbo Plus and Popscreens electronic Technology Co.,LTD +-C00000-CFFFFF (base 16) Ningbo Plus and Popscreens electronic Technology Co.,LTD +- 7 Hong Da Road, Hong Tang Industrial Park Zone A +- Ningbo Zhejiang 315040 +- CN +- + 64-FB-81 (hex) Bronkhorst High-Tech BV + A00000-AFFFFF (base 16) Bronkhorst High-Tech BV + Nijverheidsstraat 1a +@@ -4862,6 +4856,12 @@ C00000-CFFFFF (base 16) Shenzhen Micro&Nano Perception Computing Technology + Tokyo Minato 108-0023 + JP + ++0C-86-29 (hex) HONGKONG SAINT TECH INDUSTRIAL LIMITED ++900000-9FFFFF (base 16) HONGKONG SAINT TECH INDUSTRIAL LIMITED ++ RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK ++ HONGKONG 999077 ++ CN ++ + 0C-86-29 (hex) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD + D00000-DFFFFF (base 16) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD + 27 Shucun West Road, Haidian District, +@@ -4874,12 +4874,6 @@ D00000-DFFFFF (base 16) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD + ShenZhen GuangDong 518055 + CN + +-0C-86-29 (hex) HONGKONG SAINT TECH INDUSTRIAL LIMITED +-900000-9FFFFF (base 16) HONGKONG SAINT TECH INDUSTRIAL LIMITED +- RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK +- HONGKONG 999077 +- CN +- + 0C-86-29 (hex) Akribis Systems + B00000-BFFFFF (base 16) Akribis Systems + Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5 +@@ -4898,6 +4892,12 @@ B00000-BFFFFF (base 16) Akribis Systems + Rydalmere NSW 2116 + AU + ++6C-93-08 (hex) WATERFORD CONSULTANTS LLC ++100000-1FFFFF (base 16) WATERFORD CONSULTANTS LLC ++ 7430 NEW TECHNOLOGY WAY, Suite 150 ++ FREDERICK 21703 ++ US ++ + 50-FF-99 (hex) COYOTE SYSTEM + 100000-1FFFFF (base 16) COYOTE SYSTEM + 24 quai Gallieni +@@ -4916,10 +4916,10 @@ B00000-BFFFFF (base 16) Akribis Systems + Kunshan Jiangsu 215324 + CN + +-6C-93-08 (hex) WATERFORD CONSULTANTS LLC +-100000-1FFFFF (base 16) WATERFORD CONSULTANTS LLC +- 7430 NEW TECHNOLOGY WAY, Suite 150 +- FREDERICK 21703 ++38-1F-26 (hex) Avon Protection ++800000-8FFFFF (base 16) Avon Protection ++ 503 8th Street ++ Cadillac MI 49601 + US + + 30-43-D7 (hex) DIGICITI Technology Co.,Ltd +@@ -4934,18 +4934,6 @@ B00000-BFFFFF (base 16) Akribis Systems + Suzhou 215021 + CN + +-38-1F-26 (hex) Avon Protection +-800000-8FFFFF (base 16) Avon Protection +- 503 8th Street +- Cadillac MI 49601 +- US +- +-18-A5-9C (hex) Thermia AB +-500000-5FFFFF (base 16) Thermia AB +- Snickaregatan 1 +- Arvika 67134 +- SE +- + 38-1F-26 (hex) SMS Evoko Group AB + 900000-9FFFFF (base 16) SMS Evoko Group AB + Hastholmsvagen 32 +@@ -4958,6 +4946,12 @@ B00000-BFFFFF (base 16) CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFO + MANAUS AMAZONAS 69041-025 + BR + ++18-A5-9C (hex) Thermia AB ++500000-5FFFFF (base 16) Thermia AB ++ Snickaregatan 1 ++ Arvika 67134 ++ SE ++ + 18-A5-9C (hex) BlueEyes Technology + C00000-CFFFFF (base 16) BlueEyes Technology + 7F-3, No.200, Sec. 4, Wenxin Rd., +@@ -4976,18 +4970,6 @@ E00000-EFFFFF (base 16) Globe Tracker ApS + kobenhavn State / Province* 1401 + DK + +-C4-A1-0E (hex) Connectlab SRL +-D00000-DFFFFF (base 16) Connectlab SRL +- via donatello 30 +- Milano Milano 20131 - Milano +- IT +- +-C4-A1-0E (hex) BARTEC PIXAVI AS +-100000-1FFFFF (base 16) BARTEC PIXAVI AS +- Vestre Svanholmen 24 +- SANDNES Rogaland 4313 +- NO +- + C4-A1-0E (hex) HYOSUNG HEAVY INDUSTRIES + 000000-0FFFFF (base 16) HYOSUNG HEAVY INDUSTRIES + 119, Mapo-daero (Gongdeok-dong), Mapo-gu +@@ -5000,6 +4982,18 @@ C4-A1-0E (hex) Consolinno Energy GmbH + Regensburg Bayern 93053 + DE + ++C4-A1-0E (hex) Connectlab SRL ++D00000-DFFFFF (base 16) Connectlab SRL ++ via donatello 30 ++ Milano Milano 20131 - Milano ++ IT ++ ++C4-A1-0E (hex) BARTEC PIXAVI AS ++100000-1FFFFF (base 16) BARTEC PIXAVI AS ++ Vestre Svanholmen 24 ++ SANDNES Rogaland 4313 ++ NO ++ + C4-A1-0E (hex) Ayla Networks (Shenzhen) Co., Ltd. + 800000-8FFFFF (base 16) Ayla Networks (Shenzhen) Co., Ltd. + Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, +@@ -5018,12 +5012,54 @@ E00000-EFFFFF (base 16) KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD) + Ningbo ZheJiang Province, P.R.C. 315400 + CN + ++80-7B-85 (hex) SCALA Digital Technology(Ningbo) CO, LTD ++C00000-CFFFFF (base 16) SCALA Digital Technology(Ningbo) CO, LTD ++ 7 Hong Da Road, Hong Tang Industrial Park Zone A ++ Ningbo Zhejiang 315040 ++ CN ++ ++80-02-F4 (hex) Baicells Technologies Co., Ltd ++B00000-BFFFFF (base 16) Baicells Technologies Co., Ltd ++ 10-11F,AL, No.1 Zhongguancun, Haidian ++ Beijing Beijing 100094 ++ CN ++ + 80-02-F4 (hex) BK Networks Co,. Ltd. + 000000-0FFFFF (base 16) BK Networks Co,. Ltd. + 330 Suin-ro, Gwonseon-gu + Suwon-si Gyeonggi-do 16371 + KR + ++8C-51-09 (hex) Heliox Automotive B.V. ++500000-5FFFFF (base 16) Heliox Automotive B.V. ++ De Waal 24 ++ Best 5684 PH ++ NL ++ ++8C-51-09 (hex) Amzetta Technologies, LLC ++100000-1FFFFF (base 16) Amzetta Technologies, LLC ++ 5555 Oakbrook Pkwy, Suite 280 ++ Norcross GA 30093 ++ US ++ ++FC-61-79 (hex) Qisda Corporation ++500000-5FFFFF (base 16) Qisda Corporation ++ No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan ++ Taoyuan 33341 ++ TW ++ ++0C-7F-ED (hex) Guangdong Tianshu New Energy Technology Co., Ltd ++000000-0FFFFF (base 16) Guangdong Tianshu New Energy Technology Co., Ltd ++ No.8 Huishang Road, Infore Enviro Industrial Park, Jiangcun Village, Leliu Street, Shunde District, ++ Foshan 528000 ++ CN ++ ++0C-7F-ED (hex) Annapurna labs ++A00000-AFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ + 4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD + 400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD + Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district +@@ -7991,12 +8027,6 @@ BC-66-41 (hex) Shenzhen Yaguang communication CO.,LTD + Shenzhen Guangdong 518029 + CN + +-E4-95-6E (hex) Tband srl +-100000-1FFFFF (base 16) Tband srl +- via A. Meucci, 4 +- Preganziol Treviso 31022 +- IT +- + BC-66-41 (hex) EBlink + A00000-AFFFFF (base 16) EBlink + 3-5 Rue Marcel Pagnol +@@ -9602,17 +9632,23 @@ D00000-DFFFFF (base 16) Shenzhen Vitalitim Technology Co., Ltd + Guangzhou 511400 + CN + ++10-54-D2 (hex) Bamboo Dynamics Corporation., Ltd. ++900000-9FFFFF (base 16) Bamboo Dynamics Corporation., Ltd. ++ No.146, Sec. 1,Donxing Rd. ++ Zhubei City, Hsinchu County Taiwan 302058 ++ TW ++ + 10-54-D2 (hex) Raylogic Control Systems Private Limited + 400000-4FFFFF (base 16) Raylogic Control Systems Private Limited + Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West + Mumbai Maharashtra 400054 + IN + +-10-54-D2 (hex) Bamboo Dynamics Corporation., Ltd. +-900000-9FFFFF (base 16) Bamboo Dynamics Corporation., Ltd. +- No.146, Sec. 1,Donxing Rd. +- Zhubei City, Hsinchu County Taiwan 302058 +- TW ++10-54-D2 (hex) Sybersense ++500000-5FFFFF (base 16) Sybersense ++ Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK ++ Hong Kong 999077 ++ CN + + 10-54-D2 (hex) SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD + 700000-7FFFFF (base 16) SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD +@@ -9638,12 +9674,6 @@ D00000-DFFFFF (base 16) Shenzhen Vitalitim Technology Co., Ltd + Edison NJ 08837 + US + +-10-54-D2 (hex) Sybersense +-500000-5FFFFF (base 16) Sybersense +- Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK +- Hong Kong 999077 +- CN +- + 0C-86-29 (hex) MyGregor Ltd + 800000-8FFFFF (base 16) MyGregor Ltd + 11A, Carnegie str. +@@ -9656,18 +9686,18 @@ D00000-DFFFFF (base 16) Annapurna labs + Mail box 15123 Haifa 3508409 + IL + +-6C-93-08 (hex) Shenzhen TOPWAY Technology Co.,LTD +-A00000-AFFFFF (base 16) Shenzhen TOPWAY Technology Co.,LTD +- Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist +- ShenZhen Guangdong 518055 +- CN +- + 6C-93-08 (hex) Shenzhen DOOGEE Hengtong Technology CO., LTD + 900000-9FFFFF (base 16) Shenzhen DOOGEE Hengtong Technology CO., LTD + B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District + Shenzhen Guangdong 518000 + CN + ++6C-93-08 (hex) Shenzhen TOPWAY Technology Co.,LTD ++A00000-AFFFFF (base 16) Shenzhen TOPWAY Technology Co.,LTD ++ Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist ++ ShenZhen Guangdong 518055 ++ CN ++ + 30-43-D7 (hex) SYMES SA + 000000-0FFFFF (base 16) SYMES SA + 4 allée technopolis, chemin des presses +@@ -9692,12 +9722,6 @@ E00000-EFFFFF (base 16) ANDDORO LLC + New York NY 10018 + US + +-38-1F-26 (hex) Zhejiang Huazhou Intelligent Equipment Co,. Ltd +-500000-5FFFFF (base 16) Zhejiang Huazhou Intelligent Equipment Co,. Ltd +- Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, +- Jiaxing 314000 +- CN +- + 38-1F-26 (hex) Synamedia + 200000-2FFFFF (base 16) Synamedia + Luipaardstraat 12 +@@ -9710,6 +9734,12 @@ C00000-CFFFFF (base 16) Jade Bird Fire Co., Ltd. + Beijing 100871 + CN + ++38-1F-26 (hex) Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++500000-5FFFFF (base 16) Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++ Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, ++ Jiaxing 314000 ++ CN ++ + 18-A5-9C (hex) Omwave + 000000-0FFFFF (base 16) Omwave + 5 rue Barbes +@@ -9728,11 +9758,11 @@ C00000-CFFFFF (base 16) Jade Bird Fire Co., Ltd. + nanjing 211100 + CN + +-1C-59-74 (hex) Shenzhen Geshem Technology Co Ltd +-D00000-DFFFFF (base 16) Shenzhen Geshem Technology Co Ltd +- 12th Floor, Block B, Building 7, International Innovation Valley +- Shenzhen Gunagdong 518000 +- CN ++1C-59-74 (hex) Topway Global Technology Limited ++800000-8FFFFF (base 16) Topway Global Technology Limited ++ Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong ++ Hong Kong Hong Kong 999077 ++ HK + + 1C-59-74 (hex) King-On Technology Ltd. + C00000-CFFFFF (base 16) King-On Technology Ltd. +@@ -9740,11 +9770,11 @@ C00000-CFFFFF (base 16) King-On Technology Ltd. + New Taipei Taiwan 23146 + TW + +-1C-59-74 (hex) Topway Global Technology Limited +-800000-8FFFFF (base 16) Topway Global Technology Limited +- Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong +- Hong Kong Hong Kong 999077 +- HK ++1C-59-74 (hex) Shenzhen Geshem Technology Co Ltd ++D00000-DFFFFF (base 16) Shenzhen Geshem Technology Co Ltd ++ 12th Floor, Block B, Building 7, International Innovation Valley ++ Shenzhen Gunagdong 518000 ++ CN + + 18-A5-9C (hex) Annapurna labs + D00000-DFFFFF (base 16) Annapurna labs +@@ -9824,6 +9854,60 @@ C00000-CFFFFF (base 16) shenzhen newbridge communication equipment CO.,LTD + Shenzhen Guangdong 518057 + CN + ++8C-51-09 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++A00000-AFFFFF (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China ++ Suzhou 215021 ++ CN ++ ++8C-51-09 (hex) TianJin JointOptic Technology Co., LTD. ++000000-0FFFFF (base 16) TianJin JointOptic Technology Co., LTD. ++ Floor 3, Building 6, Teda Service Outsourcing Industrial Park, 19 Xinhuan West Road, Binhai New Area, ++ Tianjin 300000 ++ CN ++ ++8C-51-09 (hex) Shenzhen WOWOTO Technology Co., Ltd. ++400000-4FFFFF (base 16) Shenzhen WOWOTO Technology Co., Ltd. ++ Room B508,Building B,Gaoxingqi Industrial Park,Liuxian 1st Road,District 67,Bao'an ++ Shenzhen Guangdong 518100 ++ CN ++ ++8C-51-09 (hex) Beijing Superhexa Century Technology Co., Ltd. ++B00000-BFFFFF (base 16) Beijing Superhexa Century Technology Co., Ltd. ++ Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing ++ Beijing 100010 ++ CN ++ ++E4-95-6E (hex) Tband srl ++100000-1FFFFF (base 16) Tband srl ++ Via Camucina 27/A ++ PORTOGRUARO Venezia 30026 ++ IT ++ ++0C-7F-ED (hex) ALT Co., Ltd. ++D00000-DFFFFF (base 16) ALT Co., Ltd. ++ #1201, 8, Seongnam-dearo 331beon-gil ++ Bundang-gu, Seongnam-si Gyeonggi-do 13558 ++ KR ++ ++0C-7F-ED (hex) Shenzhen ORVIBO Technology Co., Ltd. ++900000-9FFFFF (base 16) Shenzhen ORVIBO Technology Co., Ltd. ++ F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC. ++ shenzhen 518000 ++ CN ++ ++0C-7F-ED (hex) Netweb Technologies India Pvt Ltd ++600000-6FFFFF (base 16) Netweb Technologies India Pvt Ltd ++ Plot H1, Pocket-9, FIT,Sector-57, Ballabhgarh ++ Faridabad Haryana 121004 ++ IN ++ ++FC-61-79 (hex) Kvaliteta Systems and Solutions Private Limited ++700000-7FFFFF (base 16) Kvaliteta Systems and Solutions Private Limited ++ 2207 Yamuna Building Techno Park Phase 3 ++ Trivandrum Kerala 695583 ++ IN ++ + 20-85-93 (hex) UNILUMIN GROUP CO.,LTD + 300000-3FFFFF (base 16) UNILUMIN GROUP CO.,LTD + No.112 Yongfu Rd.,BaoanDistrict, +@@ -14687,12 +14771,6 @@ A00000-AFFFFF (base 16) Pavana Technologies JSC. + Vinh Phuc 35000 + VN + +-10-54-D2 (hex) COSMO AIOT TECHNOLOGY CO LTD +-E00000-EFFFFF (base 16) COSMO AIOT TECHNOLOGY CO LTD +- Haier Information Industrial Complex, No.1 HaierRoad +- Qingdao Shandong 266101 +- CN +- + 10-54-D2 (hex) GIPS Technology Co., Ltd. + 000000-0FFFFF (base 16) GIPS Technology Co., Ltd. + Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist. +@@ -14717,6 +14795,12 @@ C00000-CFFFFF (base 16) LUXSHARE-ICT Co., Ltd. + Taipei City Taiwan 114754 + TW + ++10-54-D2 (hex) COSMO AIOT TECHNOLOGY CO LTD ++E00000-EFFFFF (base 16) COSMO AIOT TECHNOLOGY CO LTD ++ Haier Information Industrial Complex, No.1 HaierRoad ++ Qingdao Shandong 266101 ++ CN ++ + 0C-86-29 (hex) SHENZHEN YINGMU TECHNOLOGY.,LTD + C00000-CFFFFF (base 16) SHENZHEN YINGMU TECHNOLOGY.,LTD + 8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District, +@@ -14741,6 +14825,12 @@ E00000-EFFFFF (base 16) FX TECHNOLOGY LIMITED + Karlsruhe 76131 + DE + ++30-43-D7 (hex) Shenzhen juduoping Technology Co.,Ltd ++100000-1FFFFF (base 16) Shenzhen juduoping Technology Co.,Ltd ++ Baoan Xin'an Streat ++ Shenzhen 002052 ++ CN ++ + 30-43-D7 (hex) Sprocomm Technologies Co., Ltd.Guangming Branch + 600000-6FFFFF (base 16) Sprocomm Technologies Co., Ltd.Guangming Branch + Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, +@@ -14753,12 +14843,6 @@ C00000-CFFFFF (base 16) Shenzhen haichangxing Technology Co., Ltd. + SHENZHEN GUANGZHOU 518000 + CN + +-30-43-D7 (hex) Shenzhen juduoping Technology Co.,Ltd +-100000-1FFFFF (base 16) Shenzhen juduoping Technology Co.,Ltd +- Baoan Xin'an Streat +- Shenzhen 002052 +- CN +- + 30-43-D7 (hex) Guangdong Hongqin Telecom Technology Co. Ltd. + E00000-EFFFFF (base 16) Guangdong Hongqin Telecom Technology Co. Ltd. + 10 Keyuan Road, Songshan Lake +@@ -14771,18 +14855,18 @@ E00000-EFFFFF (base 16) Guangdong Hongqin Telecom Technology Co. Ltd. + Bengaluru Karnataka 560100 + IN + +-18-A5-9C (hex) ePower Network Solution Co., Ltd. +-700000-7FFFFF (base 16) ePower Network Solution Co., Ltd. +- No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., +- New Taipei City , 242063 +- TW +- + 18-A5-9C (hex) Erba Lachema s.r.o. + A00000-AFFFFF (base 16) Erba Lachema s.r.o. + Karasek1d + Brno 62100 + CZ + ++18-A5-9C (hex) ePower Network Solution Co., Ltd. ++700000-7FFFFF (base 16) ePower Network Solution Co., Ltd. ++ No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., ++ New Taipei City , 242063 ++ TW ++ + 1C-59-74 (hex) Shenzhen Hanshine Technology Co.Ltd. + 000000-0FFFFF (base 16) Shenzhen Hanshine Technology Co.Ltd. + Buiding 2 ,row 3,number 2 industrail zone,yulv community,Yutang street +@@ -14795,24 +14879,12 @@ A00000-AFFFFF (base 16) Erba Lachema s.r.o. + Chongqing 400000 + CN + +-6C-15-24 (hex) Telsonic AG +-100000-1FFFFF (base 16) Telsonic AG +- Industriestrasse 6b +- Bronschhofen St.Gallen 9552 +- CH +- + 18-A5-9C (hex) Beijing QS Medical Technology Co., Ltd. + 300000-3FFFFF (base 16) Beijing QS Medical Technology Co., Ltd. + Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area + Beijing 100176 + CN + +-6C-15-24 (hex) SYMLINK CORPORATION +-D00000-DFFFFF (base 16) SYMLINK CORPORATION +- 6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park +- Taipei 11492 +- TW +- + C4-A1-0E (hex) Clinton Electronics Corporation + B00000-BFFFFF (base 16) Clinton Electronics Corporation + 6701 Clinton Road +@@ -14825,6 +14897,12 @@ C4-A1-0E (hex) Wistron InfoComn (Kunshan) Co., Ltd. + Kunshan Jiangsu 215300 + CN + ++6C-15-24 (hex) Telsonic AG ++100000-1FFFFF (base 16) Telsonic AG ++ Industriestrasse 6b ++ Bronschhofen St.Gallen 9552 ++ CH ++ + C4-A1-0E (hex) Guangzhou South Satellite Navigation Instrument Co., Ltd. + 700000-7FFFFF (base 16) Guangzhou South Satellite Navigation Instrument Co., Ltd. + Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District, +@@ -14837,24 +14915,18 @@ C4-A1-0E (hex) Guangzhou South Satellite Navigation Instrument Co., Ltd. + Bentley Western Australia 6102 + AU + ++6C-15-24 (hex) SYMLINK CORPORATION ++D00000-DFFFFF (base 16) SYMLINK CORPORATION ++ 6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park ++ Taipei 11492 ++ TW ++ + 6C-15-24 (hex) AEC s.r.l. + E00000-EFFFFF (base 16) AEC s.r.l. + Via Zambon, 33/A + Creazzo Vicenza 36051 + IT + +-70-50-E7 (hex) Shenzhen C & D Electronics Co., Ltd. +-000000-0FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd. +- 9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District +- ShenZhen GuangDong 518000 +- CN +- +-70-50-E7 (hex) Beijing Shannoncyber Technology Co.,Ltd +-B00000-BFFFFF (base 16) Beijing Shannoncyber Technology Co.,Ltd +- 913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District +- beijing beijing 100029 +- CN +- + C4-A1-0E (hex) Harbour Cross Technology Ltd + 400000-4FFFFF (base 16) Harbour Cross Technology Ltd + Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang, +@@ -14867,10 +14939,16 @@ C4-A1-0E (hex) Harbour Cross Technology Ltd + Mail box 15123 Haifa 3508409 + IL + +-80-02-F4 (hex) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. +-900000-9FFFFF (base 16) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. +- SECOND FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA +- XIAMEN 361106 ++70-50-E7 (hex) Shenzhen C & D Electronics Co., Ltd. ++000000-0FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd. ++ 9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District ++ ShenZhen GuangDong 518000 ++ CN ++ ++70-50-E7 (hex) Beijing Shannoncyber Technology Co.,Ltd ++B00000-BFFFFF (base 16) Beijing Shannoncyber Technology Co.,Ltd ++ 913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District ++ beijing beijing 100029 + CN + + 80-02-F4 (hex) PassiveLogic +@@ -14879,12 +14957,90 @@ A00000-AFFFFF (base 16) PassiveLogic + Holladay UT 84121 + US + ++80-02-F4 (hex) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++900000-9FFFFF (base 16) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++ SECOND FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA ++ XIAMEN 361106 ++ CN ++ + 80-02-F4 (hex) Sichuan Fanyi Technology Co. Ltd. + 500000-5FFFFF (base 16) Sichuan Fanyi Technology Co. Ltd. + No. 1707, Unit 1, Building 1, 888, Middle Section of Yizhou Avenue, Gaoxin District + Chengdu Sichuan 650000 + CN + ++80-02-F4 (hex) Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd ++D00000-DFFFFF (base 16) Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd ++ No. 52, Guoxiang Road, Wujin economic development zone ++ ChangZhou JiangSu 213100 ++ CN ++ ++80-02-F4 (hex) Infors AG ++400000-4FFFFF (base 16) Infors AG ++ Wuhrmattstr. 7 ++ Bottmingen 4103 ++ CH ++ ++80-02-F4 (hex) Mech-Mind Robotics Technologies Ltd. ++600000-6FFFFF (base 16) Mech-Mind Robotics Technologies Ltd. ++ Room 1001,1F,Building 3, No.8,Chuangye Road,Haidian District ++ Beijing 100085 ++ CN ++ ++8C-51-09 (hex) ENPLUG Co., Ltd. ++700000-7FFFFF (base 16) ENPLUG Co., Ltd. ++ #A-705, 46 Dallaenae-ro, Sujeong-gu, ++ Seongnam-si Gyeonggi-do 13449 ++ KR ++ ++8C-51-09 (hex) Frontmatec ++900000-9FFFFF (base 16) Frontmatec ++ Hassellunden 9 ++ Smørum 2765 ++ DK ++ ++0C-7F-ED (hex) ShenZhen TianGang Micro Technology CO.LTD ++500000-5FFFFF (base 16) ShenZhen TianGang Micro Technology CO.LTD ++ 3rd floor ,Building20,QingHu Industrial,QingHu community,LongHua DistrictShenZhen,China ++ ShenZhen GangDong 518100 ++ CN ++ ++0C-7F-ED (hex) U-tec Group Inc. ++800000-8FFFFF (base 16) U-tec Group Inc. ++ 32920 Alvarado-Niles Rd Ste 220 ++ Union City CA 94587 ++ US ++ ++0C-7F-ED (hex) Soft dB ++300000-3FFFFF (base 16) Soft dB ++ 1040, avenue Belvédère #215 ++ Québec Quebec G1S 3G3 ++ CA ++ ++FC-61-79 (hex) MACH SYSTEMS s.r.o. ++900000-9FFFFF (base 16) MACH SYSTEMS s.r.o. ++ Pocernicka 272/96 ++ Prague 10800 ++ CZ ++ ++FC-61-79 (hex) Annapurna labs ++800000-8FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++FC-61-79 (hex) Zhuhai Anjubao Electronics Technology Co., Ltd. ++000000-0FFFFF (base 16) Zhuhai Anjubao Electronics Technology Co., Ltd. ++ Room 603, Building 4, No. 101, Daxue Road, Tangjiawan Town, High-tech Zone, ++ Zhuhai Guangdong 519000 ++ CN ++ ++FC-61-79 (hex) Shenzhen Shenshui Electronic Commerce Co.,Ltd ++200000-2FFFFF (base 16) Shenzhen Shenshui Electronic Commerce Co.,Ltd ++ Room 517, Biaofan Building, No. 6, Tangwei Industrial Avenue, Fuhai Street, Baoan District ++ Shenzhen 518132 ++ CN ++ + 4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd. + 600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd. + 22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone +@@ -19667,18 +19823,18 @@ D00000-DFFFFF (base 16) Sun wealth technology corporation limited + Seoul 05808 + KR + +-0C-86-29 (hex) HagerEnergy GmbH +-700000-7FFFFF (base 16) HagerEnergy GmbH +- Karlstrasse 5 +- Osnabrueck 49074 +- DE +- + 6C-93-08 (hex) Shenzhen EZpro Sound & Light Technology Co., Ltd. + B00000-BFFFFF (base 16) Shenzhen EZpro Sound & Light Technology Co., Ltd. + E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District + shenz guangdong 518055 + CN + ++0C-86-29 (hex) HagerEnergy GmbH ++700000-7FFFFF (base 16) HagerEnergy GmbH ++ Karlstrasse 5 ++ Osnabrueck 49074 ++ DE ++ + 30-43-D7 (hex) Xiaoniu network technology (Shanghai) Co., Ltd. + C00000-CFFFFF (base 16) Xiaoniu network technology (Shanghai) Co., Ltd. + Room 706, building 3, no.20 east road, jingan district. +@@ -19697,17 +19853,23 @@ A00000-AFFFFF (base 16) Flextronics International Kft + Zalaegerszeg 8900 + HU + ++38-1F-26 (hex) Airmaster A/S ++400000-4FFFFF (base 16) Airmaster A/S ++ Industrivej 59 ++ Aars 9600 ++ DK ++ + 38-1F-26 (hex) HWACHANG CORPORATION + D00000-DFFFFF (base 16) HWACHANG CORPORATION + 90, NONGGONGANJI-GIL + SOCHO-SI 24899 + KR + +-38-1F-26 (hex) Airmaster A/S +-400000-4FFFFF (base 16) Airmaster A/S +- Industrivej 59 +- Aars 9600 +- DK ++18-A5-9C (hex) Residence Control Ltd ++800000-8FFFFF (base 16) Residence Control Ltd ++ Cvetan Vuchkov 7 ++ Sofia Sofia 1614 ++ BG + + 18-A5-9C (hex) Actiontec Electronics Inc. + 200000-2FFFFF (base 16) Actiontec Electronics Inc. +@@ -19721,12 +19883,6 @@ D00000-DFFFFF (base 16) HWACHANG CORPORATION + Yeongtong-gu, Suwon-si Gyeonggi-do 16229 + KR + +-18-A5-9C (hex) Residence Control Ltd +-800000-8FFFFF (base 16) Residence Control Ltd +- Cvetan Vuchkov 7 +- Sofia Sofia 1614 +- BG +- + 7C-70-BC (hex) Motec GmbH + A00000-AFFFFF (base 16) Motec GmbH + 287 27 Road +@@ -19751,6 +19907,12 @@ B00000-BFFFFF (base 16) Beijing Flintec Electronic Technology Co.,Ltd. + shanghai 201614 + CN + ++1C-59-74 (hex) Square Inc. ++600000-6FFFFF (base 16) Square Inc. ++ 1455 Market St. ++ San Francisco CA 94103 ++ US ++ + 6C-15-24 (hex) Shenzhen Electron Technology Co., LTD. + 500000-5FFFFF (base 16) Shenzhen Electron Technology Co., LTD. + Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District +@@ -19769,18 +19931,6 @@ B00000-BFFFFF (base 16) Annapurna labs + Mail box 15123 Haifa 3508409 + IL + +-1C-59-74 (hex) Square Inc. +-600000-6FFFFF (base 16) Square Inc. +- 1455 Market St. +- San Francisco CA 94103 +- US +- +-6C-15-24 (hex) DEFA AS +-000000-0FFFFF (base 16) DEFA AS +- Blingsmovegen 30 +- Nesbyen 3540 +- NO +- + 6C-15-24 (hex) Linkplay + 200000-2FFFFF (base 16) Linkplay + 891 W. Washington Ave. +@@ -19793,6 +19943,12 @@ C00000-CFFFFF (base 16) CORAL-TAIYI + Taipei City 114 + TW + ++6C-15-24 (hex) DEFA AS ++000000-0FFFFF (base 16) DEFA AS ++ Blingsmovegen 30 ++ Nesbyen 3540 ++ NO ++ + C4-A1-0E (hex) O-NET Industrial Technologies (Shenzhen) Limited + 500000-5FFFFF (base 16) O-NET Industrial Technologies (Shenzhen) Limited + 501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District +@@ -19817,16 +19973,70 @@ D00000-DFFFFF (base 16) Eta Compute Inc. + Sunnyvale CA 94086 + US + ++80-02-F4 (hex) Wuhan Glory Road Intelligent Technology Co., Ltd. ++C00000-CFFFFF (base 16) Wuhan Glory Road Intelligent Technology Co., Ltd. ++ 18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone ++ Wuhan Hubei 430073 ++ CN ++ + 80-02-F4 (hex) Sichuan lookout environment protection technology co.,Ltd + 100000-1FFFFF (base 16) Sichuan lookout environment protection technology co.,Ltd + No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone + Chengdu Sichuan 610052 + CN + +-80-02-F4 (hex) Wuhan Glory Road Intelligent Technology Co., Ltd. +-C00000-CFFFFF (base 16) Wuhan Glory Road Intelligent Technology Co., Ltd. +- 18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone +- Wuhan Hubei 430073 ++8C-51-09 (hex) PROCET Technology Co., Ltd(HK) ++200000-2FFFFF (base 16) PROCET Technology Co., Ltd(HK) ++ Flat B,4/F, Kjngswell Commercial Tower, 171-173 Lockhard Road, Wanchai, Hongkong ++ Hong kong 999077 ++ HK ++ ++80-02-F4 (hex) Alfred Systems Inc ++E00000-EFFFFF (base 16) Alfred Systems Inc ++ 13F, No. 2, Sec. 5, Xinyi Rd. ++ Taipei city 110 ++ TW ++ ++8C-51-09 (hex) SpotterRF LLC ++C00000-CFFFFF (base 16) SpotterRF LLC ++ 720 Timpanogos Parkway ++ Orem UT 84097 ++ US ++ ++0C-7F-ED (hex) Tango Networks Inc ++200000-2FFFFF (base 16) Tango Networks Inc ++ 2801 Network Blvd, Suite 200 ++ Frisco TX TX 75034 ++ US ++ ++0C-7F-ED (hex) Purple Mountain ,Inc ++400000-4FFFFF (base 16) Purple Mountain ,Inc ++ New District ++ SuZhou JiangSu 215000 ++ CN ++ ++FC-61-79 (hex) CHOEUNENG ++400000-4FFFFF (base 16) CHOEUNENG ++ 22, Ildong-ro, Sangnok-gu ++ Ansan-si Gyeonggi-do 15326 ++ KR ++ ++FC-61-79 (hex) EchoStar Mobile ++300000-3FFFFF (base 16) EchoStar Mobile ++ 25/28 NORTH WALL QUAY, DUBLIN 1, D01H104 Ireland ++ Dublin Ireland D01H104 ++ IE ++ ++0C-7F-ED (hex) environmental systems corporation ++E00000-EFFFFF (base 16) environmental systems corporation ++ 122F Commerce Park Drive ++ Barrie Ontario L4N 8W8 ++ CA ++ ++FC-61-79 (hex) Hangzhou LiDe Communication Co.,Ltd ++600000-6FFFFF (base 16) Hangzhou LiDe Communication Co.,Ltd ++ No.188,DongJia Rd,Tonglu Econominc Development Zone,Hangzhou,Zhejiang, ++ Hangzhou 311500 + CN + + 20-85-93 (hex) Great Lite International +@@ -24632,12 +24842,6 @@ E00000-EFFFFF (base 16) CEL Terminus (Shanghai) Information Technologies Co + Colorado Springs CO 80907 + US + +-6C-93-08 (hex) Uconfree technology(shenzhen)limited +-600000-6FFFFF (base 16) Uconfree technology(shenzhen)limited +- Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China +- SHENZHEN 518111 +- CN +- + 0C-86-29 (hex) Annapurna labs + 300000-3FFFFF (base 16) Annapurna labs + Matam Scientific Industries Center, Building 8.2 +@@ -24650,11 +24854,11 @@ E00000-EFFFFF (base 16) CEL Terminus (Shanghai) Information Technologies Co + Hangzhou City Zhejiang Province 31000 + CN + +-30-43-D7 (hex) Bodhi +-A00000-AFFFFF (base 16) Bodhi +- 3150 W. Prospect Road, Suite 330 +- Fort Lauderdale FL 33309 +- US ++6C-93-08 (hex) Uconfree technology(shenzhen)limited ++600000-6FFFFF (base 16) Uconfree technology(shenzhen)limited ++ Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China ++ SHENZHEN 518111 ++ CN + + 6C-93-08 (hex) ZHEJIANG XIAN DA Environmental Technology Co., Ltd + 200000-2FFFFF (base 16) ZHEJIANG XIAN DA Environmental Technology Co., Ltd +@@ -24662,24 +24866,24 @@ A00000-AFFFFF (base 16) Bodhi + HANGZHOU ZHEJIANG 310000 + CN + +-30-43-D7 (hex) Kesu (Shanghai) Electronic Technology Co., Ltd +-800000-8FFFFF (base 16) Kesu (Shanghai) Electronic Technology Co., Ltd +- 3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District +- Shanghai 202150 +- CN +- + 30-43-D7 (hex) PK Solutions LLC + 900000-9FFFFF (base 16) PK Solutions LLC + 10811 E Harry + Wichita KS 67207 + US + +-30-43-D7 (hex) FIBERME COMMUNICATIONS LLC +-400000-4FFFFF (base 16) FIBERME COMMUNICATIONS LLC +- 1749 Old Meadow Rd. +- McLean VA 22102 ++30-43-D7 (hex) Bodhi ++A00000-AFFFFF (base 16) Bodhi ++ 3150 W. Prospect Road, Suite 330 ++ Fort Lauderdale FL 33309 + US + ++30-43-D7 (hex) Kesu (Shanghai) Electronic Technology Co., Ltd ++800000-8FFFFF (base 16) Kesu (Shanghai) Electronic Technology Co., Ltd ++ 3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District ++ Shanghai 202150 ++ CN ++ + 38-1F-26 (hex) NOITAC sp. z o.o. sp.k. + 600000-6FFFFF (base 16) NOITAC sp. z o.o. sp.k. + Szlak 28/3 +@@ -24692,6 +24896,12 @@ A00000-AFFFFF (base 16) Bodhi + YANG YANG GUN 25017 + KR + ++30-43-D7 (hex) FIBERME COMMUNICATIONS LLC ++400000-4FFFFF (base 16) FIBERME COMMUNICATIONS LLC ++ 1749 Old Meadow Rd. ++ McLean VA 22102 ++ US ++ + 38-1F-26 (hex) Deutronic Elektronik GmbH + B00000-BFFFFF (base 16) Deutronic Elektronik GmbH + Deutronicstraße 5 +@@ -24758,18 +24968,18 @@ A00000-AFFFFF (base 16) Jiangsu Perceive World Technology Co.,Ltd. + Nur-Sultan 010000 + KZ + +-C4-A1-0E (hex) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD +-900000-9FFFFF (base 16) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD +- No.211 Tiangu 8th Road, High-tech Zone +- Xi 'an Shaanxi 710065 +- CN +- + 6C-15-24 (hex) STERIS + A00000-AFFFFF (base 16) STERIS + Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road + Bishops Stortford herts CM23 5GZ + GB + ++C4-A1-0E (hex) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD ++900000-9FFFFF (base 16) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD ++ No.211 Tiangu 8th Road, High-tech Zone ++ Xi 'an Shaanxi 710065 ++ CN ++ + C4-A1-0E (hex) Alio, Inc + E00000-EFFFFF (base 16) Alio, Inc + 10901 W. 120th Ave, Suite 380 +@@ -24811,3 +25021,93 @@ A00000-AFFFFF (base 16) Guangzhou Tianhe High Tech Industrial Development Z + 1730 North First Street, 5th Floor + San Jose CA 95112 + US ++ ++80-02-F4 (hex) Annapurna labs ++800000-8FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++8C-51-09 (hex) Avxav Electronic Trading LLC ++600000-6FFFFF (base 16) Avxav Electronic Trading LLC ++ Office 534 Building # 6WA Dubai Airport Free Zone ++ Dubai Dubai 33964 ++ AE ++ ++80-02-F4 (hex) Lazer Safe Pty Ltd ++700000-7FFFFF (base 16) Lazer Safe Pty Ltd ++ 27 Action Road ++ Perth WA 6090 ++ AU ++ ++80-02-F4 (hex) Beijing Cybercore ++200000-2FFFFF (base 16) Beijing Cybercore ++ A206,F2,Yard#12,Building#1,JingAn DongLi,Chaoyang ++ Beijing Beijing 100028 ++ CN ++ ++8C-51-09 (hex) SHENZHEN LDROBOT CO., LTD. ++300000-3FFFFF (base 16) SHENZHEN LDROBOT CO., LTD. ++ Nanshan ++ Shenzhen 518000 ++ CN ++ ++8C-51-09 (hex) nerospec ++800000-8FFFFF (base 16) nerospec ++ 9 Freda Road, Bromhof,Skyview Retail Park ++ Randburg Gauteng 2169 ++ ZA ++ ++8C-51-09 (hex) Surpedia Technologies Co., Ltd. ++D00000-DFFFFF (base 16) Surpedia Technologies Co., Ltd. ++ 5F-1, No.212, Sec 3, Datong Rd. ++ Xhzhi Dist. New Taipei City 22103 ++ TW ++ ++8C-51-09 (hex) IROOTELLUCKY Corp. ++E00000-EFFFFF (base 16) IROOTELLUCKY Corp. ++ 609ho, 13, LS-ro ++ Gunpo-si Gyeonggi-do 15843 ++ KR ++ ++0C-7F-ED (hex) Shenzhen MoreSense Technology Co., Ltd. ++C00000-CFFFFF (base 16) Shenzhen MoreSense Technology Co., Ltd. ++ #206 Building A1,#663 Bulong Road,Dafapu Community,Bantian Street, ++ Shenzhen Guangdong 518129 ++ CN ++ ++0C-7F-ED (hex) Grandway Technology (Shenzhen) Limited ++700000-7FFFFF (base 16) Grandway Technology (Shenzhen) Limited ++ Block 7, Zhu Keng Industrial Zone ++ Ping Shan District Shenzhen 518118 ++ CN ++ ++0C-7F-ED (hex) TelX Systems ++B00000-BFFFFF (base 16) TelX Systems ++ UMM RAMOOL ++ DEIRA DUBAI 48235 ++ AE ++ ++FC-61-79 (hex) Int'Act Pty Ltd ++D00000-DFFFFF (base 16) Int'Act Pty Ltd ++ 4 Pine Street ++ North Ipswich Queensland 4305 ++ AU ++ ++0C-7F-ED (hex) Toast, Inc. ++100000-1FFFFF (base 16) Toast, Inc. ++ 401 Park Drive, Suite 801 ++ Boston MA 02215 ++ US ++ ++FC-61-79 (hex) Signalinks Communication Technology Co.,Ltd ++100000-1FFFFF (base 16) Signalinks Communication Technology Co.,Ltd ++ 3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen ++ Shenzhen Guangdong 518000 ++ CN ++ ++FC-61-79 (hex) Shenzhen Dptek Technology Co., Ltd. ++A00000-AFFFFF (base 16) Shenzhen Dptek Technology Co., Ltd. ++ Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District ++ Shenzhen Guangdong 518000 ++ CN +diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt +index 6a21795559..704a346ad5 100644 +--- a/hwdb.d/ma-small.txt ++++ b/hwdb.d/ma-small.txt +@@ -5687,6 +5687,12 @@ F74000-F74FFF (base 16) GE AVIC Civil Avionics Systems Company Limited + Shanghai 200241 + CN + ++8C-1F-64 (hex) Stercom Power Solutions GmbH ++2B6000-2B6FFF (base 16) Stercom Power Solutions GmbH ++ Ziegelstr. 1 ++ Weyarn Bayern 83629 ++ DE ++ + 8C-1F-64 (hex) Shenzhen zhushida Technology lnformation Co.,Ltd + A5D000-A5DFFF (base 16) Shenzhen zhushida Technology lnformation Co.,Ltd + 1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, +@@ -5699,12 +5705,6 @@ A5D000-A5DFFF (base 16) Shenzhen zhushida Technology lnformation Co.,Ltd + Sydney New South Wales 2132 + AU + +-8C-1F-64 (hex) Stercom Power Solutions GmbH +-2B6000-2B6FFF (base 16) Stercom Power Solutions GmbH +- Ziegelstr. 1 +- Weyarn Bayern 83629 +- DE +- + 8C-1F-64 (hex) Gateview Technologies + B7B000-B7BFFF (base 16) Gateview Technologies + 104 White St #201 +@@ -5741,6 +5741,12 @@ FBA000-FBAFFF (base 16) Onto Innovation + Wilmington MA 01887 + US + ++8C-1F-64 (hex) DAVE SRL ++967000-967FFF (base 16) DAVE SRL ++ VIA TALPONEDO 29/A ++ PORCIA PORDENONE 330850 ++ IT ++ + 8C-1F-64 (hex) Becton Dickinson + 775000-775FFF (base 16) Becton Dickinson + 7 Loveton Circle +@@ -5759,12 +5765,6 @@ BFB000-BFBFFF (base 16) TechArgos + Moscow 105066 + RU + +-8C-1F-64 (hex) DAVE SRL +-967000-967FFF (base 16) DAVE SRL +- VIA TALPONEDO 29/A +- PORCIA PORDENONE 330850 +- IT +- + 8C-1F-64 (hex) e.kundenservice Netz GmbH + 855000-855FFF (base 16) e.kundenservice Netz GmbH + Steindamm 100 +@@ -5801,23 +5801,17 @@ EB5000-EB5FFF (base 16) Meiryo Denshi Corp. + Gadag Karnataka 582103 + IN + +-8C-1F-64 (hex) Tesat-Spacecom GmbH & Co. KG +-F27000-F27FFF (base 16) Tesat-Spacecom GmbH & Co. KG +- Gerberstrasse 49 +- Backnang 71522 +- DE +- + 8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme + 059000-059FFF (base 16) MB connect line GmbH Fernwartungssysteme + Winnettener Straße 6 + Dinkelsbuehl Bavaria 91550 + DE + +-8C-1F-64 (hex) JBF +-F45000-F45FFF (base 16) JBF +- via goretta 90 +- mappano torino 10079 +- IT ++8C-1F-64 (hex) Tesat-Spacecom GmbH & Co. KG ++F27000-F27FFF (base 16) Tesat-Spacecom GmbH & Co. KG ++ Gerberstrasse 49 ++ Backnang 71522 ++ DE + + 8C-1F-64 (hex) REFU Storage System GmbH + 53B000-53BFFF (base 16) REFU Storage System GmbH +@@ -5831,6 +5825,12 @@ F45000-F45FFF (base 16) JBF + Bergisch Gladbach North Rhine-Westphalia 51465 + DE + ++8C-1F-64 (hex) JBF ++F45000-F45FFF (base 16) JBF ++ via goretta 90 ++ mappano torino 10079 ++ IT ++ + 8C-1F-64 (hex) Micro Electroninc Products + 765000-765FFF (base 16) Micro Electroninc Products + TT Vasumweg 150 +@@ -5849,35 +5849,17 @@ F45000-F45FFF (base 16) JBF + Indianapolis IN 46240 + US + +-8C-1F-64 (hex) INVIXIUM ACCESS INC +-274000-274FFF (base 16) INVIXIUM ACCESS INC +- 111 Gordon Baker Road, Suite #300 +- Toronto Ontario M2H 3R1 +- CA +- + 8C-1F-64 (hex) Sicon srl + B3B000-B3BFFF (base 16) Sicon srl + Via Sila 1/3 + Isola Vicentina Vicenza 36033 + IT + +-8C-1F-64 (hex) Sanchar Telesystems limited +-958000-958FFF (base 16) Sanchar Telesystems limited +- A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI +- New Delhi Delhi 110020 +- IN +- +-8C-1F-64 (hex) Tantronic AG +-1EF000-1EFFFF (base 16) Tantronic AG +- Gewerbering 12 +- Wohlen AG 5610 +- CH +- +-8C-1F-64 (hex) Tunstall A/S +-F2C000-F2CFFF (base 16) Tunstall A/S +- Niels Bohrs vej 42 +- Stilling Skanderborg 8660 +- DK ++8C-1F-64 (hex) INVIXIUM ACCESS INC ++274000-274FFF (base 16) INVIXIUM ACCESS INC ++ 111 Gordon Baker Road, Suite #300 ++ Toronto Ontario M2H 3R1 ++ CA + + 8C-1F-64 (hex) Bunka Shutter Co., Ltd. + 0B0000-0B0FFF (base 16) Bunka Shutter Co., Ltd. +@@ -5885,6 +5867,12 @@ F2C000-F2CFFF (base 16) Tunstall A/S + Oyama Tochigi 323-0063 + JP + ++8C-1F-64 (hex) Sanchar Telesystems limited ++958000-958FFF (base 16) Sanchar Telesystems limited ++ A-78, GROUND FLOOR, OKHLA INDUSTRIAL AREA, PHASE - II, NEW DELHI ++ New Delhi Delhi 110020 ++ IN ++ + 8C-1F-64 (hex) Rodgers Instruments US LLC + A42000-A42FFF (base 16) Rodgers Instruments US LLC + 6497 NE Croeni Avenue +@@ -5903,6 +5891,42 @@ A42000-A42FFF (base 16) Rodgers Instruments US LLC + Ottawa ON K2G 0G3 + CA + ++8C-1F-64 (hex) Tunstall A/S ++F2C000-F2CFFF (base 16) Tunstall A/S ++ Niels Bohrs vej 42 ++ Stilling Skanderborg 8660 ++ DK ++ ++8C-1F-64 (hex) Tantronic AG ++1EF000-1EFFFF (base 16) Tantronic AG ++ Gewerbering 12 ++ Wohlen AG 5610 ++ CH ++ ++8C-1F-64 (hex) Strategic Robotic Systems ++C57000-C57FFF (base 16) Strategic Robotic Systems ++ 14842 NE 95th StreetBuilding 5 ++ Redmond WA 98052 ++ US ++ ++8C-1F-64 (hex) MHE Electronics ++E90000-E90FFF (base 16) MHE Electronics ++ 49Alexander Rd, Westmead ++ Durban KwaZulu Natal 3610 ++ ZA ++ ++8C-1F-64 (hex) tickIoT Inc. ++949000-949FFF (base 16) tickIoT Inc. ++ 651 N Broad St Ste 206, Ste 206 ++ Middletown DE 19709 ++ US ++ ++8C-1F-64 (hex) SYSN ++2C5000-2C5FFF (base 16) SYSN ++ the third floor, 26, Namsan-ro 39beon-gil, Uichang-gu ++ Changwon-si, Gyeongsangnam-do, Republic of Korea 51368 ++ KR ++ + 70-B3-D5 (hex) EVCO SPA + A80000-A80FFF (base 16) EVCO SPA + VIA FELTRE N. 81 +@@ -11465,22 +11489,16 @@ ED9000-ED9FFF (base 16) NETGEN HITECH SOLUTIONS LLP + MUMBAI MAHARASHTRA 400064 + IN + +-8C-1F-64 (hex) Wolfspyre Labs +-9D4000-9D4FFF (base 16) Wolfspyre Labs +- 5007 Highland Ct #WPL-IEEE +- Austin TX 78731 +- US +- + 8C-1F-64 (hex) Vekto + 4AC000-4ACFFF (base 16) Vekto + Televisieweg 75 + Almere 1322AK + NL + +-8C-1F-64 (hex) SpectraDynamics, Inc. +-581000-581FFF (base 16) SpectraDynamics, Inc. +- 1849 Cherry St. +- Louisville CO 80027 ++8C-1F-64 (hex) Wolfspyre Labs ++9D4000-9D4FFF (base 16) Wolfspyre Labs ++ 5007 Highland Ct #WPL-IEEE ++ Austin TX 78731 + US + + 8C-1F-64 (hex) IO Master Technology +@@ -11489,11 +11507,11 @@ BD3000-BD3FFF (base 16) IO Master Technology + New Taipei City 235 Taipei 235 + TW + +-8C-1F-64 (hex) ESCAD AUTOMATION GmbH +-05F000-05FFFF (base 16) ESCAD AUTOMATION GmbH +- Escadstr. 1 +- Pfullendorf 88630 +- DE ++8C-1F-64 (hex) SpectraDynamics, Inc. ++581000-581FFF (base 16) SpectraDynamics, Inc. ++ 1849 Cherry St. ++ Louisville CO 80027 ++ US + + 8C-1F-64 (hex) TIFLEX + 194000-194FFF (base 16) TIFLEX +@@ -11501,11 +11519,11 @@ BD3000-BD3FFF (base 16) IO Master Technology + PONCIN 01450 + FR + +-8C-1F-64 (hex) Neuralog LP +-115000-115FFF (base 16) Neuralog LP +- 4800 Sugar Grove Blvd., Ste. 200 +- Stafford TX 77479 +- US ++8C-1F-64 (hex) ESCAD AUTOMATION GmbH ++05F000-05FFFF (base 16) ESCAD AUTOMATION GmbH ++ Escadstr. 1 ++ Pfullendorf 88630 ++ DE + + 8C-1F-64 (hex) Sichuan Aiyijan Technology Company Ltd. + 40C000-40CFFF (base 16) Sichuan Aiyijan Technology Company Ltd. +@@ -11531,11 +11549,11 @@ C24000-C24FFF (base 16) Alifax S.r.l. + POLVERARA PD 35020 + IT + +-8C-1F-64 (hex) Flextronics International Kft +-A4C000-A4CFFF (base 16) Flextronics International Kft +- Zrínyi Miklós str. 38. +- Zalaegerszeg 8900 +- HU ++8C-1F-64 (hex) Neuralog LP ++115000-115FFF (base 16) Neuralog LP ++ 4800 Sugar Grove Blvd., Ste. 200 ++ Stafford TX 77479 ++ US + + 8C-1F-64 (hex) Pietro Fiorentini Spa + 8D9000-8D9FFF (base 16) Pietro Fiorentini Spa +@@ -11543,24 +11561,30 @@ A4C000-A4CFFF (base 16) Flextronics International Kft + San Vito al Tagliamento (PN) 33078 + IT + ++8C-1F-64 (hex) Flextronics International Kft ++A4C000-A4CFFF (base 16) Flextronics International Kft ++ Zrínyi Miklós str. 38. ++ Zalaegerszeg 8900 ++ HU ++ + 8C-1F-64 (hex) Flextronics International Kft + D02000-D02FFF (base 16) Flextronics International Kft + 38. Zrinyi Str. + Zalaegerszeg Zala 8900 + HU + +-8C-1F-64 (hex) VMukti Solutions Private Limited +-E30000-E30FFF (base 16) VMukti Solutions Private Limited +- 3-4, Shivalik Plaza, Panjrapole, Ambawadi +- Ahmedabad Gujarat 380015 +- IN +- + 8C-1F-64 (hex) Autark GmbH + 943000-943FFF (base 16) Autark GmbH + Platz des Friedens 8 + Baunatal Hessen D-34225 + DE + ++8C-1F-64 (hex) VMukti Solutions Private Limited ++E30000-E30FFF (base 16) VMukti Solutions Private Limited ++ 3-4, Shivalik Plaza, Panjrapole, Ambawadi ++ Ahmedabad Gujarat 380015 ++ IN ++ + 8C-1F-64 (hex) ACTELSER S.L. + 3F4000-3F4FFF (base 16) ACTELSER S.L. + CARRER ALBERT EINSTEIN, 44 +@@ -11597,11 +11621,11 @@ FA2000-FA2FFF (base 16) AZD Praha s.r.o., ZOZ Olomouc + Knoxville TN 37932 + US + +-70-B3-D5 (hex) Watteco +-E75000-E75FFF (base 16) Watteco +- Rue Gutenberg +- Hennebont Brittany 56700 +- FR ++8C-1F-64 (hex) Beijing Zhongchen Microelectronics Co.,Ltd ++AB4000-AB4FFF (base 16) Beijing Zhongchen Microelectronics Co.,Ltd ++ Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District ++ Beijing Beijing 100081 ++ CN + + 8C-1F-64 (hex) Toolplanet Co., Ltd. + 54F000-54FFFF (base 16) Toolplanet Co., Ltd. +@@ -11615,11 +11639,11 @@ E75000-E75FFF (base 16) Watteco + Dubai Dubai 74249 + AE + +-8C-1F-64 (hex) Beijing Zhongchen Microelectronics Co.,Ltd +-AB4000-AB4FFF (base 16) Beijing Zhongchen Microelectronics Co.,Ltd +- Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District +- Beijing Beijing 100081 +- CN ++70-B3-D5 (hex) Watteco ++E75000-E75FFF (base 16) Watteco ++ Rue Gutenberg ++ Hennebont Brittany 56700 ++ FR + + 8C-1F-64 (hex) Weidmann Tecnologia Electrica de Mexico + 7B7000-7B7FFF (base 16) Weidmann Tecnologia Electrica de Mexico +@@ -11657,6 +11681,36 @@ B7C000-B7CFFF (base 16) EVERNET CO,.LTD TAIWAN + Nelson Nelson 7010 + NZ + ++8C-1F-64 (hex) e.p.g. Elettronica s.r.l. ++3D4000-3D4FFF (base 16) e.p.g. Elettronica s.r.l. ++ Via della Crocetta 3 ++ Oltrona di San Mamette Como (CO) 22070 ++ IT ++ ++8C-1F-64 (hex) Stratis IOT ++3C5000-3C5FFF (base 16) Stratis IOT ++ 4230 Main Street ++ Philadelphia PA 19127 ++ US ++ ++8C-1F-64 (hex) Twinleaf LLC ++080000-080FFF (base 16) Twinleaf LLC ++ 300 Deer Creek DriveSuite 300 ++ Plainsboro NJ 08536 ++ US ++ ++8C-1F-64 (hex) Genius vision digital private limted ++CC6000-CC6FFF (base 16) Genius vision digital private limted ++ S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027 ++ new delhi new delhi 110027 ++ IN ++ ++8C-1F-64 (hex) FMTec GmbH - Future Management Technologies ++3E3000-3E3FFF (base 16) FMTec GmbH - Future Management Technologies ++ Austraße 59e ++ Bludenz Austria 6700 ++ AT ++ + 70-B3-D5 (hex) System West dba ICS Electronics + E06000-E06FFF (base 16) System West dba ICS Electronics + 7034 Commerce Circle Suite A +@@ -17222,18 +17276,18 @@ E61000-E61FFF (base 16) Stange Elektronik GmbH + Beijing Beijing 100029 + CN + +-8C-1F-64 (hex) EOLANE +-911000-911FFF (base 16) EOLANE +- ZI DU VAL D OMBREE +- COMBREE - 49520 +- FR +- + 8C-1F-64 (hex) Abbott Diagnostics Technologies AS + 429000-429FFF (base 16) Abbott Diagnostics Technologies AS + P. O. Box 6863 Rodeløkka + Oslo Oslo 0504 + NO + ++8C-1F-64 (hex) EOLANE ++911000-911FFF (base 16) EOLANE ++ ZI DU VAL D OMBREE ++ COMBREE - 49520 ++ FR ++ + 8C-1F-64 (hex) Huz Electronics Ltd + BC2000-BC2FFF (base 16) Huz Electronics Ltd + 10 Avondale road +@@ -17294,12 +17348,6 @@ E64000-E64FFF (base 16) Indefac company + São Paulo São Paulo 04268020 + BR + +-8C-1F-64 (hex) Real Digital +-3B2000-3B2FFF (base 16) Real Digital +- 655 SW James Pl +- Pullman WA 99163 +- US +- + 8C-1F-64 (hex) Fingoti Limited + CD9000-CD9FFF (base 16) Fingoti Limited + Barnam Ham Farm +@@ -17318,6 +17366,12 @@ FB7000-FB7FFF (base 16) Grace Design/Lunatec LLC + Leawood KS 66251 + US + ++8C-1F-64 (hex) Real Digital ++3B2000-3B2FFF (base 16) Real Digital ++ 655 SW James Pl ++ Pullman WA 99163 ++ US ++ + 8C-1F-64 (hex) Zhuhai Yunzhou Intelligence Technology Ltd. + 254000-254FFF (base 16) Zhuhai Yunzhou Intelligence Technology Ltd. + Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town +@@ -17354,12 +17408,48 @@ CCB000-CCBFFF (base 16) suzhou yuecrown Electronic Technology Co.,LTD + suzhou jiangsu 215000 + CN + ++8C-1F-64 (hex) nke marine electronics ++817000-817FFF (base 16) nke marine electronics ++ 6 rue gutenberg ++ Hennebont 56700 ++ FR ++ ++8C-1F-64 (hex) GS Industrie-Elektronik GmbH ++6B9000-6B9FFF (base 16) GS Industrie-Elektronik GmbH ++ Porschestrasse 11 ++ Leverkusen 51381 ++ DE ++ + 8C-1F-64 (hex) Paragraf + 01A000-01AFFF (base 16) Paragraf + 7-8 West Newlands + Somersham Cambridgeshire PE28 3EB + GB + ++8C-1F-64 (hex) YUYAMA MFG Co.,Ltd ++5AC000-5ACFFF (base 16) YUYAMA MFG Co.,Ltd ++ 1-4-30 ++ MEISHINGUCHI,TOYONAKA OSAKA 561-0841 ++ JP ++ ++8C-1F-64 (hex) Transdigital Pty Ltd ++7CF000-7CFFFF (base 16) Transdigital Pty Ltd ++ 1/160 Stirling Highway ++ Nedlands Western Australia 6009 ++ AU ++ ++8C-1F-64 (hex) Talleres de Escoriaza SA ++F65000-F65FFF (base 16) Talleres de Escoriaza SA ++ Barrio Ventas, 35 ++ Irun Gipuzkoa 20305 ++ ES ++ ++8C-1F-64 (hex) EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT ++CDB000-CDBFFF (base 16) EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT ++ 1132 Budapest, Váci út 22-24. 3. em.) ++ Budapest 1132 ++ HU ++ + 70-B3-D5 (hex) YUYAMA MFG Co.,Ltd + BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd + 3-3-1 +@@ -17900,12 +17990,6 @@ A7B000-A7BFFF (base 16) SmartSafe + Jinan City Shandong Province 250101 + CN + +-70-B3-D5 (hex) AVA Technologies Inc. +-72F000-72FFFF (base 16) AVA Technologies Inc. +- 45 East Cordova St, AVA Technologies Inc. +- Vancouver BC V6A 1K3 +- CA +- + 70-B3-D5 (hex) Position Imaging + A5D000-A5DFFF (base 16) Position Imaging + 22 marin way unit 1 +@@ -23042,36 +23126,24 @@ BD6000-BD6FFF (base 16) NOVA Products GmbH + Munich 80538 + DE + +-8C-1F-64 (hex) ECO-ADAPT +-C38000-C38FFF (base 16) ECO-ADAPT +- 39 Rue de Chateaudun +- Paris Ile-de-France 75009 +- FR +- +-8C-1F-64 (hex) Flextronics International Kft +-F5C000-F5CFFF (base 16) Flextronics International Kft ++70-B3-D5 (hex) Flextronics International Kft ++E2F000-E2FFFF (base 16) Flextronics International Kft + Zrínyi Miklós str. 38. + Zalaegerszeg 8900 + HU + +-70-B3-D5 (hex) Flextronics International Kft +-E2F000-E2FFFF (base 16) Flextronics International Kft ++8C-1F-64 (hex) Flextronics International Kft ++F5C000-F5CFFF (base 16) Flextronics International Kft + Zrínyi Miklós str. 38. + Zalaegerszeg 8900 + HU + +-8C-1F-64 (hex) ADETEC SAS +-AE8000-AE8FFF (base 16) ADETEC SAS +- 8 rue de l'Angoumois +- ARGENTEUIL 95100 ++8C-1F-64 (hex) ECO-ADAPT ++C38000-C38FFF (base 16) ECO-ADAPT ++ 39 Rue de Chateaudun ++ Paris Ile-de-France 75009 + FR + +-8C-1F-64 (hex) AML +-634000-634FFF (base 16) AML +- 2190 Regal Parkway +- Euless TX 76040 +- US +- + 8C-1F-64 (hex) In-lite Design BV + 557000-557FFF (base 16) In-lite Design BV + Stephensonweg 18 +@@ -23096,6 +23168,18 @@ A6D000-A6DFFF (base 16) CyberneX Co., Ltd + YOKOHAMA Kanagawa 222-0033 + JP + ++8C-1F-64 (hex) ADETEC SAS ++AE8000-AE8FFF (base 16) ADETEC SAS ++ 8 rue de l'Angoumois ++ ARGENTEUIL 95100 ++ FR ++ ++8C-1F-64 (hex) AML ++634000-634FFF (base 16) AML ++ 2190 Regal Parkway ++ Euless TX 76040 ++ US ++ + 70-B3-D5 (hex) Active Research Limited + 6A0000-6A0FFF (base 16) Active Research Limited + 21 Harwell Road +@@ -23156,18 +23240,132 @@ D69000-D69FFF (base 16) ADiCo Corporation + Utsunomiya-shi Tochigi 320-0075 + JP + ++8C-1F-64 (hex) METRONA-Union GmbH ++9FA000-9FAFFF (base 16) METRONA-Union GmbH ++ Aidenbachstr. 40 ++ München 81379 ++ DE ++ + 8C-1F-64 (hex) Wittra Networks AB + DF8000-DF8FFF (base 16) Wittra Networks AB + Västra Järnvägsgatan 39th floor(Convendum) + Stockholm Stockholm 111 64 + SE + +-8C-1F-64 (hex) METRONA-Union GmbH +-9FA000-9FAFFF (base 16) METRONA-Union GmbH +- Aidenbachstr. 40 +- München 81379 ++8C-1F-64 (hex) Unitron Systems b.v. ++FA8000-FA8FFF (base 16) Unitron Systems b.v. ++ SCHANSESTRAAT 7 ++ IJzendijke 4515 RN ++ NL ++ ++8C-1F-64 (hex) University of Geneva - Department of Particle Physics ++D88000-D88FFF (base 16) University of Geneva - Department of Particle Physics ++ Quai Ernest-Ansermet 24 ++ Geneva 1211 ++ CH ++ ++8C-1F-64 (hex) Massar Networks ++FAA000-FAAFFF (base 16) Massar Networks ++ Postfach 1207PEAX ID 473.1849.6740.89 ++ Baar Zug CH-6341 ++ CH ++ ++8C-1F-64 (hex) Vytahy-Vymyslicky s.r.o. ++737000-737FFF (base 16) Vytahy-Vymyslicky s.r.o. ++ Pivovarska 542 ++ Uherske Hradiste - Jarosov 60801 ++ CZ ++ ++8C-1F-64 (hex) Retency ++BBF000-BBFFFF (base 16) Retency ++ 19 rue Vivienne ++ Paris 75002 ++ FR ++ ++8C-1F-64 (hex) Camius ++601000-601FFF (base 16) Camius ++ 41593 Winchester Rd., Ste 200 ++ Temecula CA 92590 ++ US ++ ++8C-1F-64 (hex) Patch Technologies, Inc. ++0AC000-0ACFFF (base 16) Patch Technologies, Inc. ++ 100 S Cincinnati Ave, Fifth Floor ++ Tulsa OK 74103 ++ US ++ ++8C-1F-64 (hex) BNB ++0BE000-0BEFFF (base 16) BNB ++ Deongmyeongdong-ro 22beon-gil ++ Daejeon Yuseong-gu 34155 ++ KR ++ ++8C-1F-64 (hex) Pionierkraft GmbH ++CD3000-CD3FFF (base 16) Pionierkraft GmbH ++ Agnes-Pockels-Bogen 1 ++ Munich Bavaria 80992 + DE + ++8C-1F-64 (hex) Comm-ence, Inc. ++B73000-B73FFF (base 16) Comm-ence, Inc. ++ 1813 Limerick Ct ++ Darien IL 60561 ++ US ++ ++8C-1F-64 (hex) YUSUR Technology Co., Ltd. ++C3A000-C3AFFF (base 16) YUSUR Technology Co., Ltd. ++ Room 1401,building 4,yard 1, Beiqing Road No.81, Haidian District ++ Beijing Beijing 100086 ++ CN ++ ++70-B3-D5 (hex) Ava Technologies ++72F000-72FFFF (base 16) Ava Technologies ++ 2409 E. Pender St. ++ Vancouver BC V5K 2B2 ++ CA ++ ++8C-1F-64 (hex) Benison Tech ++3AC000-3ACFFF (base 16) Benison Tech ++ 2100 Geng Road, Suite 210 ++ Palo Alto CA 94043 ++ US ++ ++8C-1F-64 (hex) HIGHVOLT Prüftechnik ++8F8000-8F8FFF (base 16) HIGHVOLT Prüftechnik ++ Marie-Curie-Straße10 ++ Dresden 01139 ++ DE ++ ++8C-1F-64 (hex) Stresstech OY ++625000-625FFF (base 16) Stresstech OY ++ Tikkutehtaantie 1 ++ Vaajakoski 40800 ++ FI ++ ++8C-1F-64 (hex) BCMTECH ++94C000-94CFFF (base 16) BCMTECH ++ 803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu, ++ Anyang-si Gyeonggi-do 14042 ++ KR ++ ++8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme ++97C000-97CFFF (base 16) MB connect line GmbH Fernwartungssysteme ++ Winnettener Straße 6 ++ Dinkelsbuehl Bavaria 91550 ++ DE ++ ++8C-1F-64 (hex) SLAT ++683000-683FFF (base 16) SLAT ++ 11 Rue Jean-Elysée DUPUY ++ Champagne au Mont d'Or Rhône 69543 ++ FR ++ ++8C-1F-64 (hex) E VISION INDIA PVT LTD ++7AF000-7AFFFF (base 16) E VISION INDIA PVT LTD ++ 9/205, MAIN MARKET OLD FARIDABAD HARYANA INDIA 121002 ++ Faridabad HARYANA 121002 ++ IN ++ + 70-B3-D5 (hex) DISMUNTEL SAL + 92C000-92CFFF (base 16) DISMUNTEL SAL + Pol ind cotes +@@ -28613,6 +28811,12 @@ DC0000-DC0FFF (base 16) Pigs Can Fly Labs LLC + Beaverton OR 97008 + US + ++8C-1F-64 (hex) United States Technologies Inc. ++525000-525FFF (base 16) United States Technologies Inc. ++ 1701 Pollitt Drive ++ Fair Lawn NJ 07410 ++ US ++ + 8C-1F-64 (hex) EMBSYS SISTEMAS EMBARCADOS + FD4000-FD4FFF (base 16) EMBSYS SISTEMAS EMBARCADOS + AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324 +@@ -28625,17 +28829,11 @@ DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co + Webb City MO 64870 + US + +-8C-1F-64 (hex) United States Technologies Inc. +-525000-525FFF (base 16) United States Technologies Inc. +- 1701 Pollitt Drive +- Fair Lawn NJ 07410 +- US +- +-8C-1F-64 (hex) Rumble, Inc +-837000-837FFF (base 16) Rumble, Inc +- Bluebonnet Ln +- Austin TX 78704 +- US ++8C-1F-64 (hex) PuS GmbH und Co. KG ++4E0000-4E0FFF (base 16) PuS GmbH und Co. KG ++ Hainstr. 13 ++ Gera Germany 07545 ++ DE + + 8C-1F-64 (hex) EA Elektroautomatik GmbH & Co. KG + 504000-504FFF (base 16) EA Elektroautomatik GmbH & Co. KG +@@ -28643,11 +28841,11 @@ DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co + Viersen NRW 41747 + DE + +-8C-1F-64 (hex) PuS GmbH und Co. KG +-4E0000-4E0FFF (base 16) PuS GmbH und Co. KG +- Hainstr. 13 +- Gera Germany 07545 +- DE ++8C-1F-64 (hex) Rumble, Inc ++837000-837FFF (base 16) Rumble, Inc ++ Bluebonnet Ln ++ Austin TX 78704 ++ US + + 8C-1F-64 (hex) Cinetix Srl + 89E000-89EFFF (base 16) Cinetix Srl +@@ -28655,18 +28853,18 @@ DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co + Borgo Valsugana Trento 38051 + IT + +-8C-1F-64 (hex) ATM SOLUTIONS +-9BD000-9BDFFF (base 16) ATM SOLUTIONS +- Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine +- Navi Mumbai Maharashatra 400709 +- IN +- + 8C-1F-64 (hex) Mitsubishi Electric India Pvt. Ltd. + D92000-D92FFF (base 16) Mitsubishi Electric India Pvt. Ltd. + EL3, J BLOCK, M.I.D.C. Bhosari + PUNE Maharastra 411027 + IN + ++8C-1F-64 (hex) ATM SOLUTIONS ++9BD000-9BDFFF (base 16) ATM SOLUTIONS ++ Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine ++ Navi Mumbai Maharashatra 400709 ++ IN ++ + 8C-1F-64 (hex) Integer.pl S.A. + A97000-A97FFF (base 16) Integer.pl S.A. + Wielicka 28 +@@ -28685,11 +28883,17 @@ A97000-A97FFF (base 16) Integer.pl S.A. + Hagen 58119 + DE + +-8C-1F-64 (hex) ADAMCZEWSKI elektronische Messtechnik GmbH +-F4E000-F4EFFF (base 16) ADAMCZEWSKI elektronische Messtechnik GmbH +- Felix-Wankel-Str. 13 +- Zaberfeld Baden-Württemberg 74374 +- DE ++8C-1F-64 (hex) SCIREQ Scientific Respiratory Equipment Inc ++01E000-01EFFF (base 16) SCIREQ Scientific Respiratory Equipment Inc ++ 6600 rue St. Urbain, Suite 300 ++ Montreal Quebec H2S 3G8 ++ CA ++ ++8C-1F-64 (hex) Beijing Wenrise Technology Co., Ltd. ++A84000-A84FFF (base 16) Beijing Wenrise Technology Co., Ltd. ++ No.10 Shangdi Road, Haidian District ++ Beijing Beijing 100085 ++ CN + + 8C-1F-64 (hex) XSENSOR Technology Corp. + 7AA000-7AAFFF (base 16) XSENSOR Technology Corp. +@@ -28697,47 +28901,35 @@ F4E000-F4EFFF (base 16) ADAMCZEWSKI elektronische Messtechnik GmbH + Calgary Alberta T2G 0Z9 + CA + ++8C-1F-64 (hex) ADAMCZEWSKI elektronische Messtechnik GmbH ++F4E000-F4EFFF (base 16) ADAMCZEWSKI elektronische Messtechnik GmbH ++ Felix-Wankel-Str. 13 ++ Zaberfeld Baden-Württemberg 74374 ++ DE ++ + 8C-1F-64 (hex) MG s.r.l. + 67A000-67AFFF (base 16) MG s.r.l. + via Monte Bianco, 1 + Solbiate Olona VA 21058 + IT + +-8C-1F-64 (hex) Beijing Wenrise Technology Co., Ltd. +-A84000-A84FFF (base 16) Beijing Wenrise Technology Co., Ltd. +- No.10 Shangdi Road, Haidian District +- Beijing Beijing 100085 +- CN +- + 8C-1F-64 (hex) AMF Medical SA + F52000-F52FFF (base 16) AMF Medical SA + Chemin de la Dent-d'Oche 1 A + Ecublens VD Vaud 1024 + CH + +-8C-1F-64 (hex) SCIREQ Scientific Respiratory Equipment Inc +-01E000-01EFFF (base 16) SCIREQ Scientific Respiratory Equipment Inc +- 6600 rue St. Urbain, Suite 300 +- Montreal Quebec H2S 3G8 +- CA +- +-8C-1F-64 (hex) HUPI +-489000-489FFF (base 16) HUPI +- 45 allée théodore monod +- Bidart Sélectionnez un département / état 64210 +- FR +- + 8C-1F-64 (hex) Qualitrol LLC + 905000-905FFF (base 16) Qualitrol LLC + 1385 Fairport Rd + Fairport NY 14450 + US + +-8C-1F-64 (hex) WINTUS SYSTEM +-9BA000-9BAFFF (base 16) WINTUS SYSTEM +- E1102, 7 yeonmujang 5ga gil, seongdong-gu +- SEOUL SEOUL 04782 +- KR ++8C-1F-64 (hex) HUPI ++489000-489FFF (base 16) HUPI ++ 45 allée théodore monod ++ Bidart Sélectionnez un département / état 64210 ++ FR + + 8C-1F-64 (hex) TTC TELEKOMUNIKACE, s.r.o. + E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. +@@ -28751,11 +28943,11 @@ E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. + Yreka CA 96097 + US + +-8C-1F-64 (hex) Proterra, Inc +-552000-552FFF (base 16) Proterra, Inc +- 1 Whitlee Court +- Greenville SC 29607 +- US ++8C-1F-64 (hex) WINTUS SYSTEM ++9BA000-9BAFFF (base 16) WINTUS SYSTEM ++ E1102, 7 yeonmujang 5ga gil, seongdong-gu ++ SEOUL SEOUL 04782 ++ KR + + 8C-1F-64 (hex) eumig industrie-TV GmbH. + 5B3000-5B3FFF (base 16) eumig industrie-TV GmbH. +@@ -28763,6 +28955,12 @@ E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. + Anif Salzburg 5081 + AT + ++8C-1F-64 (hex) Proterra, Inc ++552000-552FFF (base 16) Proterra, Inc ++ 1 Whitlee Court ++ Greenville SC 29607 ++ US ++ + 8C-1F-64 (hex) TeraDiode / Panasonic + 2C3000-2C3FFF (base 16) TeraDiode / Panasonic + 30 Upton Dr +@@ -28781,18 +28979,6 @@ D7C000-D7CFFF (base 16) QUERCUS TECHNOLOGIES, S.L. + Uijeongbu-si Gyonggi-do 11652 + KR + +-8C-1F-64 (hex) VECOS Europe B.V. +-C80000-C80FFF (base 16) VECOS Europe B.V. +- ESP 237 +- Eindhoven Noord-Brabant 5633 AD +- NL +- +-8C-1F-64 (hex) EMIT GmbH +-3D1000-3D1FFF (base 16) EMIT GmbH +- Johannes-Mauthe-Straße 14 +- Albstadt Baden Württemberg 72458 +- DE +- + 8C-1F-64 (hex) M/S MILIND RAMACHANDRA RAJWADE + 721000-721FFF (base 16) M/S MILIND RAMACHANDRA RAJWADE + 713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru +@@ -28805,6 +28991,18 @@ C8F000-C8FFFF (base 16) JW Froehlich Maschinenfabrik GmbH + Leinfelden-Echterdingen 70771 + DE + ++8C-1F-64 (hex) VECOS Europe B.V. ++C80000-C80FFF (base 16) VECOS Europe B.V. ++ ESP 237 ++ Eindhoven Noord-Brabant 5633 AD ++ NL ++ ++8C-1F-64 (hex) EMIT GmbH ++3D1000-3D1FFF (base 16) EMIT GmbH ++ Johannes-Mauthe-Straße 14 ++ Albstadt Baden Württemberg 72458 ++ DE ++ + 8C-1F-64 (hex) Power Electronics Espana, S.L. + D08000-D08FFF (base 16) Power Electronics Espana, S.L. + Poligono Industrial Carrases. Ronda del camp d Aviacio 4 +@@ -28823,8 +29021,71 @@ B01000-B01FFF (base 16) noah + Leipzig 04109 + DE + ++8C-1F-64 (hex) eumig industrie-TV GmbH. ++426000-426FFF (base 16) eumig industrie-TV GmbH. ++ Gewerbeparkstrasse 9 ++ Anif Salzburg 5081 ++ AT ++ ++8C-1F-64 (hex) Hamamatsu Photonics K.K. ++67F000-67FFFF (base 16) Hamamatsu Photonics K.K. ++ 314-5 Shimokanzo ++ Iwata Shizuoka 4380193 ++ JP ++ ++8C-1F-64 (hex) Telemetrics Inc. ++5E5000-5E5FFF (base 16) Telemetrics Inc. ++ 75 Commerce Dr ++ Allendale 07401 ++ US ++ + 8C-1F-64 (hex) Nokeval Oy + E0E000-E0EFFF (base 16) Nokeval Oy + Rounionkatu 107 + Nokia 37150 + FI ++ ++8C-1F-64 (hex) NextT Microwave Inc ++8C5000-8C5FFF (base 16) NextT Microwave Inc ++ 121 Hymus Boulevard ++ Pointe-Claire Quebec H9R 1E6 ++ CA ++ ++8C-1F-64 (hex) Fuzhou Tucsen Photonics Co.,Ltd ++45D000-45DFFF (base 16) Fuzhou Tucsen Photonics Co.,Ltd ++ 5# Wanwushe Smart Industrial Park , No.2 Yangqi Branch Rd, Gaishan Town, Cangshan Area, Fuzhou, Fujian,PRC ++ fuzhou 350008 ++ CN ++ ++8C-1F-64 (hex) TEKVOX, Inc ++197000-197FFF (base 16) TEKVOX, Inc ++ 1965 Post Rd, Suite 400 ++ New Braunfels TX 78130 ++ US ++ ++8C-1F-64 (hex) ACSL Ltd. ++A2D000-A2DFFF (base 16) ACSL Ltd. ++ 3-6-4 Rinkaicho ++ Edogawa-ku Tokyo 134-0086 ++ JP ++ ++8C-1F-64 (hex) Private ++EE0000-EE0FFF (base 16) Private ++ ++8C-1F-64 (hex) Agar Corporation Inc. ++301000-301FFF (base 16) Agar Corporation Inc. ++ 5150 Tacoma Dr ++ Houston TX 77041 ++ US ++ ++8C-1F-64 (hex) Sensus Healthcare ++746000-746FFF (base 16) Sensus Healthcare ++ 851 Broken Sound Parkway NW, Suite 215 ++ Boca Raton FL 33487 ++ US ++ ++8C-1F-64 (hex) Nuvation Energy ++DFE000-DFEFFF (base 16) Nuvation Energy ++ 40 Bathurst Drive ++ Waterloo Ontario N2V 1V6 ++ CA +diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids +index 19832a58b3..c657b038fb 100644 +--- a/hwdb.d/pci.ids ++++ b/hwdb.d/pci.ids +@@ -1,8 +1,8 @@ + # + # List of PCI ID's + # +-# Version: 2022.03.22 +-# Date: 2022-03-22 03:15:02 ++# Version: 2022.04.16 ++# Date: 2022-04-16 00:17:00 + # + # Maintained by Albert Pool, Martin Mares, and other volunteers from + # the PCI ID Project at https://pci-ids.ucw.cz/. +@@ -103,6 +103,13 @@ + 0731 7212 JM7200 + 0731 7214 JM7500 + 0731 7215 JM7200 ++ 9100 JM9100 ++ 0731 9101 JM9100 ++ 0731 9102 JM9100-I ++ 910a JH910 ++ 0731 910a JH910 ++ 0731 910b JH910-I ++ 0731 910c JH910-M + 9200 JM9200 + 920a JH920 + 0731 920a JH920 +@@ -668,6 +675,7 @@ + 1000 3050 SAS9217-8i + 1000 3060 SAS9217-4i4e + 1014 0472 N2125 External Host Bus Adapter ++ 1014 047a N2115 Internal Host Bus Adapter + 1590 0041 H220i + 1590 0042 H221 / 9207-8e + 1590 0044 H220i +@@ -725,16 +733,16 @@ + 1000 46a0 MegaRAID 9660-24i Tri-Mode Storage Adapter + 1000 46c0 eHBA 9680W-16e Tri-Mode Storage Adapter + 1000 46d0 eHBA 9600-8i8e Tri-Mode Storage Adapter +- 1028 2114 PERC H965 Adapter +- 1028 2115 PERC H965 Front +- 1028 2117 PERC H965 MX ++ 1028 2114 PERC H965i Adapter ++ 1028 2115 PERC H965i Front ++ 1028 2117 PERC H965i MX + 1028 213a PERC H965e Adapter +- 1028 213b PERC H765 Adapter +- 1028 213c PERC H765 Front ++ 1028 213b PERC H765i Adapter ++ 1028 213c PERC H765i Front + 1028 213d PERC H765N Front +- 1028 213e PERC H765 MX +- 1028 213f PERC H365 Adapter +- 1028 2140 PERC H365 Front ++ 1028 213e PERC H765i MX ++ 1028 213f PERC H365i Adapter ++ 1028 2140 PERC H365i Front + 1028 2141 PERC H360 MX + 1028 2142 HBA 465e Adapter + 00ab SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC) +@@ -1075,7 +1083,9 @@ + 1636 Renoir + 1637 Renoir Radeon High Definition Audio Controller + 1638 Cezanne +- 163f VanGogh ++# Used in the Steam Deck ++ 163f VanGogh [AMD Custom GPU 0405] ++ 1640 Rembrandt Radeon High Definition Audio Controller + 164c Lucienne + 164d Rembrandt + 1681 Rembrandt [Radeon 680M] +@@ -12416,6 +12426,8 @@ + 20b5 GA100 [A100 PCIe 80GB] + 20b6 GA100GL [PG506-232] + 20b7 GA100GL [A30 PCIe] ++ 20b8 GA100 [A100X] ++ 20b9 GA100 [A30X] + 20bb GA100 [DRIVE A100 PROD] + 20be GA100 [GRID A100A] + 20bf GA100 [GRID A100B] +@@ -12437,6 +12449,7 @@ + 21c4 TU116 [GeForce GTX 1660 SUPER] + 21d1 TU116BM [GeForce GTX 1660 Ti Mobile] + 2200 GA102 ++ 2203 GA102 [GeForce RTX 3090 Ti] + 2204 GA102 [GeForce RTX 3090] + 147d 10de NVIDIA Geforce RTX 3090 Founders Edition + 2205 GA102 [GeForce RTX 3080 Ti 20GB] +@@ -12485,6 +12498,7 @@ + 24ad GA104 [GeForce RTX 3060 Engineering Sample] + 24af GA104 [GeForce RTX 3070 Engineering Sample] + 24b0 GA104GL [RTX A4000] ++ 24b1 GA104GL [RTX A4000H] + 24b6 GA104GLM [RTX A5000 Mobile] + 24b7 GA104GLM [RTX A4000 Mobile] + 24b8 GA104GLM [RTX A3000 Mobile] +@@ -12511,11 +12525,13 @@ + 2583 GA107 [GeForce RTX 3050] + 25a0 GA107M [GeForce RTX 3050 Ti Mobile] + 25a2 GA107M [GeForce RTX 3050 Mobile] ++ 25a3 GA107 + 25a4 GA107 + 25a5 GA107M [GeForce RTX 3050 Mobile] + 25a6 GA107M [GeForce MX570] + 25a7 GA107M [GeForce MX570] + 25a9 GA107M [GeForce RTX 2050] ++ 25aa GA107M [GeForce MX570 A] + 25af GA107 [GeForce RTX 3050 Engineering Sample] + 25b5 GA107GLM [RTX A4 Mobile] + # A16 - 25B6 10DE 14A9 / A2 - 25B6 10DE 157E +@@ -12568,6 +12584,7 @@ + e300 LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter + 1014 0614 PCIe3 4-Port 16Gb Fibre Channel Adapter for POWER (FC EN1C/EN1D; CCIN 578E) + 1014 0615 PCIe3 2-Port 32Gb Fibre Channel Adapter for POWER (FC EN1A/EN1B; CCIN 578F) ++ 1014 06a0 PCIe3 2-Port 16Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC) + 10df e300 LPe32002-M2 2-Port 32Gb Fibre Channel Adapter + 10df e301 LPe32000-M2 1-Port 32Gb Fibre Channel Adapter + 10df e310 LPe31002-M6 2-Port 16Gb Fibre Channel Adapter +@@ -12621,9 +12638,13 @@ + 10df f411 LPe35000-M2-D 1-Port 32Gb Fibre Channel Adapter + 10df f418 LPe35000-M2-L 1-Port 32Gb PCIe Fibre Channel Adapter + 10df f419 LPe35002-M2-L 2-Port 32Gb PCIe Fibre Channel Adapter ++ 10df f421 LPe36002-M2-L 2-Port 64Gb PCIe Fibre Channel Adapter ++ 10df f422 LPe36002-M64-D 2-Port 64Gb Fibre Channel Adapter + 1590 02d5 StoreFabric SN1610E 1-Port 32Gb Fibre Channel Adapter + 1590 02d6 StoreFabric SN1610E 2-Port 32Gb Fibre Channel Adapter + f500 LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter ++ 1014 06c1 PCIe4 4-Port 32Gb Fibre Channel Adapter for POWER (FC EN1L/EN1M; CCIN 2CFC) ++ 1014 06c2 PCIe4 2-Port 64Gb Fibre Channel Adapter for POWER (FC EN1N/EN1P; CCIN 2CFD) + f700 LP7000 Fibre Channel Host Adapter + f701 LP7000 Fibre Channel Host Adapter Alternate ID (JX1:2-3, JX2:1-2) + f800 LP8000 Fibre Channel Host Adapter +@@ -15877,6 +15898,7 @@ + 8534 PM8534 PFX 64xG3 PCIe Fanout Switch + 8535 PM8535 PFX 80xG3 PCIe Fanout Switch + 8536 PM8536 PFX 96xG3 PCIe Fanout Switch ++ 1bd4 0081 PM8536 PFX 96xG3 PCIe Fanout Switch + 8546 PM8546 B-FEIP PSX 96xG3 PCIe Storage Switch + 8562 PM8562 Switchtec PFX-L 32xG3 Fanout-Lite PCIe Gen3 Switch + 11f9 I-Cube Inc +@@ -17187,6 +17209,8 @@ + 5190 9200 ECO NVMe SSD + 5191 9200 PRO NVMe SSD + 5192 9200 MAX NVMe SSD ++ 51a2 9300 PRO NVMe SSD ++ 51a3 9300 MAX NVMe SSD + 1345 Arescom Inc + 1347 Odetics + 1349 Sumitomo Electric Industries, Ltd. +@@ -19680,6 +19704,8 @@ + 14e4 4126 NetXtreme-E Dual-port 10G SFP+ Ethernet OCP 3.0 Adapter (BCM957412N4120C) + 152d 8b20 BCM57412 NetXtreme-E 10Gb RDMA Ethernet Controller + 152d 8b22 BCM57412 NetXtreme-E 25Gb RDMA Ethernet Controller ++# NIC-ETH531F-LP-2P BCM57412 2 x 10G SFP+ Ethernet PCIe Card ++ 193d 1024 NIC-ETH531F-LP-2P + 16d7 BCM57414 NetXtreme-E 10Gb/25Gb RDMA Ethernet Controller + 14e4 1402 BCM957414A4142CC 10Gb/25Gb Ethernet PCIe + 14e4 1404 BCM957414M4142C OCP 2x25G Type1 wRoCE +@@ -20033,6 +20059,7 @@ + 9027 CN99xx [ThunderX2] Integrated AHCI/SATA 3 Host Controller + a8d8 BCM43224/5 Wireless Network Adapter + aa52 BCM43602 802.11ac Wireless LAN SoC ++ b080 BCM56080 Firelight2 Switch ASIC + b302 BCM56302 StrataXGS 24x1GE 2x10GE Switch Controller + b334 BCM56334 StrataXGS 24x1GE 4x10GE Switch Controller + b370 BCM56370 Switch ASIC +@@ -22053,8 +22080,8 @@ + 0400 Datacenter Technologies QDF2432 PCI Express Root Port + 0401 Datacenter Technologies QDF2400 PCI Express Root Port + 1000 QCS405 PCIe Root Complex +- 1101 QCA6390 Wireless Network Adapter [AX500-DBS (2x2)] +- 1103 Atheros QCNFA765 ++ 1101 QCA6390 Wireless Network Adapter ++ 1103 QCNFA765 Wireless Network Adapter + 1104 QCN6024/9024/9074 Wireless Network Adapter + 17cc NetChip Technology, Inc + 2280 USB 2.0 +@@ -23684,6 +23711,38 @@ + 1bb1 0157 Nytro 5050M 7mm + # Nytro 5050M (Ebonhawk Mainstream Performance) TCG - 7mm + 1bb1 0158 Nytro 5050M TCG 7mm ++# Nytro 5060M (Rocinante Mainstream Performance) - 15mm ++ 1bb1 0159 Nytro 5060M ++# Nytro 5050M TCG (Rocinante Mainstream Performance) - 15mm ++ 1bb1 0160 Nytro 5060M TCG ++# Nytro 5060M 7mm (Rocinante Mainstream Performance) ++ 1bb1 0161 Nytro 5060M 7mm ++# Nytro 5060M TCG (Rocinante Mainstream Performance) - 7mm ++ 1bb1 0162 Nytro 5060M TCG 7mm ++# Nytro 5060H (Rocinante High Performance) ++ 1bb1 0163 Nytro 5060H ++# Nytro 5060H TCG (Rocinante High Performance) ++ 1bb1 0164 Nytro 5060H TCG ++# Nytro 5060H (Rocinante - High Performance) - E3.S 1T ++ 1bb1 0165 Nytro 5060H E3.S 1T ++# Nytro 5060H (Rocinante - High Performance) - E3.S 1T TCG ++ 1bb1 0166 Nytro 5060H E3.S 1T TCG ++# Nytro 5060H (Rocinante - High Performance) - E3.L 1T ++ 1bb1 0167 Nytro 5060H E3.L 1T ++# Nytro 5060H (Rocinante - High Performance) - E3.L 1T TCG ++ 1bb1 0168 Nytro 5060H E3.L 1T TCG ++# Nytro 5060M (Rocinante Mainstream Performance) - E3.S 1T ++ 1bb1 0169 Nytro 5060M E3.S 1T ++# Nytro 5060M (Rocinante Mainstream Performance) - E3.S 1T TCG ++ 1bb1 0170 Nytro 5060M E3.S 1T TCG ++# Nytro 5060M (Rocinante Mainstream Performance) - E3.L 1T ++ 1bb1 0171 Nytro 5060M E3.L 1T ++# Nytro 5060M (Rocinante Mainstream Performance) - E3.L 1T TCG ++ 1bb1 0172 Nytro 5060M E3.L 1T TCG ++# Nytro 5060M (Rocinante Mainstream Performance) - E1.S ++ 1bb1 0173 Nytro 5060M E1.S ++# Nytro 5060M (Rocinante Mainstream Performance) - E1.S TCG ++ 1bb1 0174 Nytro 5060M E1.S TCG + 1bb1 01a1 Nytro XP7102 + 5012 FireCuda 510 SSD + 5016 FireCuda 520 SSD +@@ -24076,10 +24135,16 @@ + 0001 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + 00b1 AQC100 10G Ethernet MAC controller [AQtion] + 07b1 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] ++# Older revision of QNAP QM2 M.2 2280 PCIe SSD & 10GbE Expansion Card ++ 1baa 07b1 QM2-2P10G1TA [QXG 10GbE Network Adapter] ++# Newer revision of QNAP QM2 M.2 2280 PCIe SSD & 10GbE Expansion Card ++ 1baa 07b2 QM2-2P10G1TA [QM2 Expansion Adapter] + 08b1 AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + 11b1 AQC111 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + 12b1 AQC112 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + 87b1 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] ++ 94c0 AQC113CS NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] ++ 1043 87f5 ProArt X570-CREATOR WIFI + d107 AQC107 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] + 1043 8741 XG-C100C + d108 AQC108 NBase-T/IEEE 802.3bz Ethernet Controller [AQtion] +@@ -24618,7 +24683,14 @@ + 1ed3 Yeston + 1ed5 Moore Threads Technology Co.,Ltd + 0100 MTT S10 +- 0101 MTT S30 ++ 0101 MTT S10 ++ 0102 MTT S30 ++ 0105 MTT S50 ++ 0106 MTT S60 ++ 0111 MTT S100 ++ 0121 MTT S1000M ++ 0122 MTT S1000 ++ 0123 MTT S2000 + 1ed8 Digiteq Automotive + 0101 FG4 PCIe Frame Grabber + 1ed9 Myrtle.ai +@@ -24626,6 +24698,9 @@ + 1eec Viscore Technologies Ltd + 0102 VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe + 1eec VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe ++1eed Xiangdixian Computing Technology (Chongqing) Ltd. ++ 0100 XDX P100 VGA controller ++ 0101 XDX P101 High Definition Audio Controller + 1efb Flexxon Pte Ltd + 1f02 Beijing Dayu Technology + 1f03 Shenzhen Shichuangyi Electronics Co., Ltd +@@ -25156,6 +25231,8 @@ + 0d10 SB-365x Motion Feedback Device + 2f00 SB-3642 Motion Feedback Device + 3000 SB-3644 Motion Feedback Device ++4e58 Nutanix, Inc. ++ 0001 Virtual NVMe Controller + 5045 University of Toronto + 4243 BLASTbus PCI Interface Card v1 + 5046 GemTek Technology Corporation +@@ -26340,8 +26417,9 @@ + 8086 0010 Ethernet Network Adapter I710-T4L for OCP 3.0 + 8086 401a Ethernet Network Adapter I710-T4L + 8086 401b Ethernet Network Adapter I710-T4L for OCP 3.0 ++ 0dd5 Ethernet Adaptive Virtual Function + 0dda Ethernet Connection X722 for 10GbE SFP+ +- 1bd4 0076 Ethernet Connection X722 for 10GbE SFP+ ++ 1bd4 0076 Ethernet Connection F102IX722 for 10GbE SFP + 0e00 Xeon E7 v2/Xeon E5 v2/Core i7 DMI2 + 1028 04f7 Xeon E5 v2 on PowerEdge R320 server + 15d9 066b X9SRL-F +@@ -27692,9 +27770,13 @@ + 8086 000c Ethernet 100G 2P E810-C OCP + 8086 000d Ethernet Network Adapter E810-L-Q2 for OCP 3.0 + 8086 000e Ethernet Network Adapter E810-2C-Q2 ++ 8086 000f Ethernet Network Adapter E810-C-Q2T + 8086 0010 Ethernet 100G 2P E810-C-stg Adapter ++ 8086 0011 Ethernet Network Adapter E810-C-Q1 for OCP3.0 + 1593 Ethernet Controller E810-C for SFP + 1137 02c3 E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC ++ 1137 02e9 E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC ++ 1137 02ea E810XXVDA4T 4x25/10 GbE SFP28 PCIe NIC + 8086 0002 Ethernet Network Adapter E810-L-2 + 8086 0005 Ethernet Network Adapter E810-XXV-4 + 8086 0006 Ethernet Network Adapter E810-XXV-4 +@@ -27707,6 +27789,8 @@ + 8086 000e Ethernet Network Adapter E810-XXV-4T + 8086 000f Ethernet 25G 4P E810-XXV-stg Adapter + 8086 0010 Ethernet 25G 4P E810-XXV-st Adapter ++ 8086 4010 Ethernet Network Adapter E810-XXV-4 ++ 8086 4013 Ethernet Network Adapter E810-XXV-4 for OCP 3.0 + 1599 Ethernet Controller E810-XXV for backplane + 8086 0001 Ethernet 25G 2P E810-XXV-k Mezz + 159a Ethernet Controller E810-XXV for QSFP +@@ -27723,6 +27807,7 @@ + 8086 4001 Ethernet Network Adapter E810-XXV-2 + 8086 4002 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 + 8086 4003 Ethernet Network Adapter E810-XXV-2 ++ 8086 4015 Ethernet Network Adapter E810-XXV-2 for OCP 3.0 + 15a0 Ethernet Connection (2) I218-LM + 15a1 Ethernet Connection (2) I218-V + 15a2 Ethernet Connection (3) I218-LM +@@ -31429,6 +31514,7 @@ + 34b7 Ice Lake-LP PCI Express Root Port #16 + 34ba Ice Lake-LP PCI Express Root Port #3 + 34bc Ice Lake-LP PCI Express Root Port #5 ++ 34c4 Ice Lake-LP SD Host Controller + 34c5 Ice Lake-LP Serial IO I2c Controller #4 + 34c6 Ice Lake-LP Serial IO I2c Controller #5 + 34c8 Ice Lake-LP Smart Sound Technology Audio Controller +@@ -32805,6 +32891,7 @@ + 8a23 Ice Lake Thunderbolt 3 PCI Express Root Port #3 + 8a51 Iris Plus Graphics G7 (Ice Lake) + 8a52 Iris Plus Graphics G7 ++ 8a53 Iris Plus Graphics G7 + 8a56 Iris Plus Graphics G1 (Ice Lake) + 8a5a Iris Plus Graphics G4 (Ice Lake) + 8a5c Iris Plus Graphics G4 (Ice Lake) +@@ -33843,6 +33930,7 @@ + 2008 Video assistant component + 8820 Stryker Corporation + 2724 Mako Front Side Motor Controller [cPCI] ++8848 Wuxi Micro Innovation Integrated Circuit Design Co.,Ltd + 8866 T-Square Design Inc. + 8888 Silicon Magic + 8912 TRX +@@ -34215,6 +34303,10 @@ + 1bd4 0070 RS0800M5E24i + 1bd4 0071 RS0800M5H16i + 1bd4 0072 RS0800M5E16i ++ 1bd4 0077 RS0800M5E16iM ++ 1bd4 0078 RS0800M5E24iM ++ 1bd4 0079 RS0800M5H24iM ++ 1bd4 0080 RS0804M5R16iM + 1cc4 0101 Ramaxel FBGF-RAD PM8204 + 1cc4 0201 Ramaxel FBGF-RAD PM8222 + 1d49 0220 ThinkSystem 4350-8i SAS/SATA 12Gb HBA +@@ -34844,7 +34936,6 @@ C 05 Memory controller + 01 FLASH memory + 02 CXL + 00 CXL Memory Device - vendor specific +-# Devices compliant to CXL spec + 10 CXL Memory Device (CXL 2.x) + 80 Memory controller + C 06 Bridge +diff --git a/hwdb.d/pnp_id_registry.html b/hwdb.d/pnp_id_registry.html +index a1d6f63bcd..ac15190e4c 100644 +--- a/hwdb.d/pnp_id_registry.html ++++ b/hwdb.d/pnp_id_registry.html +@@ -1262,7 +1262,7 @@ + MatroxMTX11/29/1996 + Mat's ComputersMCQ07/22/2004 + Matsushita Communication Industrial Co., Ltd.WPA03/15/2001 +- Matsushita Electric Ind. Company LtdMAT11/29/1996 ++ Panasonic Connect Co.,Ltd.MAT04/01/2022 + MaxCom Technical IncMTI11/29/1996 + MaxData Computer AGVOB02/21/2000 + MaxData Computer GmbH & Co.KGMXD04/19/2000 +diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids +index d02e59f5e2..8e19afff93 100644 +--- a/hwdb.d/usb.ids ++++ b/hwdb.d/usb.ids +@@ -9,8 +9,8 @@ + # The latest version can be obtained from + # http://www.linux-usb.org/usb.ids + # +-# Version: 2022.03.18 +-# Date: 2022-03-18 20:34:09 ++# Version: 2022.04.13 ++# Date: 2022-04-13 20:34:10 + # + + # Vendors, devices and interfaces. Please keep sorted. +@@ -3412,6 +3412,12 @@ + 069b ECOSYS M2635dn + 06b4 ECOSYS M5526cdw + 0483 STMicroelectronics ++ 0102 Remote NDIS Network device with Android debug (ADB) ++ 0103 Remote NDIS Network device ++ 0104 MTP device with Android debug (ADB) ++ 0105 MTP device ++ 0106 PTP device with Android debug (ADB) ++ 0107 PTP device + 0137 BeWAN ADSL USB ST (blue or green) + 0138 Unicorn II (ST70138B + MTC-20174TQ chipset) + 0adb Android Debug Bridge (ADB) device +@@ -14964,6 +14970,10 @@ + 0e23 Liou Yuane Enterprise Co., Ltd + 0e25 VinChip Systems, Inc. + 0e26 J-Phone East Co., Ltd ++0e2e Brady Worldwide, Inc. ++ 000b BMP 51 ++ 000c BMP 61 ++ 000d BMP 41 + 0e30 HeartMath LLC + 0e34 Micro Computer Control Corp. + 0e35 3Pea Technologies, Inc. diff --git a/SOURCES/0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch b/SOURCES/0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch new file mode 100644 index 0000000..485ae28 --- /dev/null +++ b/SOURCES/0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch @@ -0,0 +1,40 @@ +From 101c779033314c5df131d5de48778524c7c82559 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering +Date: Thu, 28 Apr 2022 17:43:27 +0200 +Subject: [PATCH] hwdb: run "ninja update-hwdb-autosuspend" for v251-rc2 + +(cherry picked from commit 27c03586ea80bc75f3f747670b4c89ce340d5345) + +Related: #2087778 +--- + hwdb.d/60-autosuspend-fingerprint-reader.hwdb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb +index b44e3e328b..9704680cd1 100644 +--- a/hwdb.d/60-autosuspend-fingerprint-reader.hwdb ++++ b/hwdb.d/60-autosuspend-fingerprint-reader.hwdb +@@ -137,6 +137,7 @@ usb:v04F3p0C32* + usb:v04F3p0C33* + usb:v04F3p0C3D* + usb:v04F3p0C42* ++usb:v04F3p0C4B* + usb:v04F3p0C4D* + usb:v04F3p0C4F* + usb:v04F3p0C63* +@@ -192,6 +193,7 @@ usb:v06CBp0103* + usb:v06CBp0123* + usb:v06CBp0126* + usb:v06CBp0129* ++usb:v06CBp0168* + ID_AUTOSUSPEND=1 + ID_PERSIST=0 + +@@ -261,7 +263,6 @@ usb:v138Ap0091* + # Known unsupported devices + usb:v04F3p036B* + usb:v04F3p0C00* +-usb:v04F3p0C4B* + usb:v04F3p0C4C* + usb:v04F3p0C57* + usb:v04F3p0C5E* diff --git a/SOURCES/0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch b/SOURCES/0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch new file mode 100644 index 0000000..4ac8aea --- /dev/null +++ b/SOURCES/0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch @@ -0,0 +1,25 @@ +From 1704b021b3d662b6f2e64208370c5a944144531d Mon Sep 17 00:00:00 2001 +From: techtino +Date: Sat, 30 Apr 2022 14:06:55 +0100 +Subject: [PATCH] Fix orientation detection for Asus Transformer T100TAF, + copied T100TA rule + +(cherry picked from commit ad44259225eabeb9755440506c261c6080a2f405) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index d6a584150c..0dfaaaf467 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -123,6 +123,7 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT300CHI:* + + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnM80TA:* + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA:* ++sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAF:* + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:* + ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 + diff --git a/SOURCES/0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch b/SOURCES/0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch new file mode 100644 index 0000000..cb452fe --- /dev/null +++ b/SOURCES/0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch @@ -0,0 +1,25 @@ +From d16426ae82574ad5312f0b3aaee076be199fe302 Mon Sep 17 00:00:00 2001 +From: Alice S +Date: Sun, 1 May 2022 14:49:18 -0700 +Subject: [PATCH] Fix orientation detection for HP Pavilion X2 10-k010nr + +(cherry picked from commit 8099abee00e3c6f53c292e8f8d33fc487e71a198) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 0dfaaaf467..b5d9eda510 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -452,6 +452,8 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:* + + # HP Pavillion X2 10-n000nd + sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:* ++# HP Pavilion X2 10-k010nr ++sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2DetachablePC10:* + ACCEL_MOUNT_MATRIX=0, -1, 0; -1, 0, 0; 0, 0, 1 + + # HP Pro Tablet 408 G1 diff --git a/SOURCES/0310-fix-typo.patch b/SOURCES/0310-fix-typo.patch new file mode 100644 index 0000000..c7430ae --- /dev/null +++ b/SOURCES/0310-fix-typo.patch @@ -0,0 +1,25 @@ +From 612140f2207d0d6bf996acdf51b444c790f9f528 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 3 May 2022 01:16:32 +0900 +Subject: [PATCH] fix typo + +(cherry picked from commit 77f081f3632862eaaa43bbc744c9c897b373521c) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index b5d9eda510..70759145a8 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -450,7 +450,7 @@ sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream7Tablet:* + sensor:modalias:acpi:SMO8500*:dmi:*:svnHewlett-Packard:pnHPStream8Tablet:* + ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1 + +-# HP Pavillion X2 10-n000nd ++# HP Pavilion X2 10-n000nd + sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2Detachable:*:rn815D:* + # HP Pavilion X2 10-k010nr + sensor:modalias:i2c:bmc150_accel:dmi:*:svnHewlett-Packard:pnHPPavilionx2DetachablePC10:* diff --git a/SOURCES/0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch b/SOURCES/0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch new file mode 100644 index 0000000..ef7c93d --- /dev/null +++ b/SOURCES/0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch @@ -0,0 +1,67 @@ +From 1926de432e7ac0e7eddc18e127f57809e64ec162 Mon Sep 17 00:00:00 2001 +From: rodin-ia <38556724+rodin-ia@users.noreply.github.com> +Date: Tue, 3 May 2022 22:40:55 +0200 +Subject: [PATCH] Adding a description of the keyboard shortcut Fn+F12 for the + HP EliteBook 845 G7 device. (#23253) + +udevadm info /dev/input/event4 +P: /devices/platform/i8042/serio0/input/input4/event4 +N: input/event4 +L: 0 +S: input/by-path/platform-i8042-serio-0-event-kbd +E: DEVPATH=/devices/platform/i8042/serio0/input/input4/event4 +E: DEVNAME=/dev/input/event4 +E: MAJOR=13 +E: MINOR=68 +E: SUBSYSTEM=input +E: USEC_INITIALIZED=4165584 +E: KEYBOARD_KEY_81=f20 +E: KEYBOARD_KEY_89=battery +E: KEYBOARD_KEY_8a=screenlock +E: KEYBOARD_KEY_8b=camera +E: KEYBOARD_KEY_8c=media +E: KEYBOARD_KEY_8e=dvd +E: KEYBOARD_KEY_92=brightnessdown +E: KEYBOARD_KEY_97=brightnessup +E: KEYBOARD_KEY_b1=help +E: KEYBOARD_KEY_b3=unknown +E: KEYBOARD_KEY_d7=wlan +E: KEYBOARD_KEY_ee=switchvideomode +E: KEYBOARD_KEY_68=unknown +E: ID_INPUT=1 +E: ID_INPUT_KEY=1 +E: ID_INPUT_KEYBOARD=1 +E: ID_BUS=i8042 +E: ID_SERIAL=noserial +E: ID_PATH=platform-i8042-serio-0 +E: ID_PATH_TAG=platform-i8042-serio-0 +E: XKBMODEL=pc105 +E: XKBLAYOUT=us +E: BACKSPACE=guess +E: LIBINPUT_DEVICE_GROUP=11/1/1:isa0060/serio0 +E: DEVLINKS=/dev/input/by-path/platform-i8042-serio-0-event-kbd +E: TAGS=:power-switch: +E: CURRENT_TAGS=:power-switch: + +(cherry picked from commit d31b8a66d187523dab5d19a9269c9543382e021d) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 9b06bab54d..b852f33608 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -699,6 +699,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPEliteBookFolioG1:* + KEYBOARD_KEY_64=calendar + KEYBOARD_KEY_81=f20 + ++# HP EliteBook 845 G7 ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP*:pnHPEliteBook845G7*:pvr* ++ KEYBOARD_KEY_68=unknown # Fn+F12 HP Programmable Key ++ + # HP ProBook 650 + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*ProBook*650*:* + KEYBOARD_KEY_f8=wlan # Wireless HW switch button diff --git a/SOURCES/0312-hwdb-run-update-hwdb.patch b/SOURCES/0312-hwdb-run-update-hwdb.patch new file mode 100644 index 0000000..4f428d2 --- /dev/null +++ b/SOURCES/0312-hwdb-run-update-hwdb.patch @@ -0,0 +1,1984 @@ +From 500ed61936ff0ef1269d08e45b97b99db63439bb Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Thu, 5 May 2022 16:22:42 +0200 +Subject: [PATCH] hwdb: run "update-hwdb" + +(cherry picked from commit da2f26b2cbc607ae46fd181909f5513bad182dbf) + +Related: #2087778 +--- + hwdb.d/20-OUI.hwdb | 209 +++++++++++++++++++- + hwdb.d/20-acpi-vendor.hwdb.patch | 4 +- + hwdb.d/20-pci-vendor-model.hwdb | 187 +++++++++++++++--- + hwdb.d/20-usb-vendor-model.hwdb | 8 +- + hwdb.d/ma-large.txt | 322 +++++++++++++++++++++++++++++-- + hwdb.d/ma-medium.txt | 58 +++++- + hwdb.d/ma-small.txt | 108 +++++++++-- + hwdb.d/pci.ids | 61 +++++- + hwdb.d/usb.ids | 8 +- + 9 files changed, 877 insertions(+), 88 deletions(-) + +diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb +index aaa3326325..ab3afc31b2 100644 +--- a/hwdb.d/20-OUI.hwdb ++++ b/hwdb.d/20-OUI.hwdb +@@ -39836,6 +39836,9 @@ OUI:044169* + OUI:04421A* + ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC. + ++OUI:0443FD* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:0444A1* + ID_OUI_FROM_DATABASE=TELECON GALICIA,S.A. + +@@ -41318,6 +41321,9 @@ OUI:082522* + OUI:082525* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:082573* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:082697* + ID_OUI_FROM_DATABASE=Zyxel Communications Corporation + +@@ -48152,6 +48158,9 @@ OUI:200CC8* + OUI:200DB0* + ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd. + ++OUI:200E2B* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:200E95* + ID_OUI_FROM_DATABASE=IEC – TC9 WG43 + +@@ -48959,6 +48968,9 @@ OUI:20E52A* + OUI:20E564* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:20E6DF* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:20E791* + ID_OUI_FROM_DATABASE=Siemens Healthcare Diagnostics, Inc + +@@ -50165,6 +50177,9 @@ OUI:2827BF* + OUI:28285D* + ID_OUI_FROM_DATABASE=Zyxel Communications Corporation + ++OUI:282947* ++ ID_OUI_FROM_DATABASE=Chipsea Technologies (Shenzhen) Corp. ++ + OUI:282986* + ID_OUI_FROM_DATABASE=APC by Schneider Electric + +@@ -50615,6 +50630,9 @@ OUI:288A1C* + OUI:288CB8* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:288EEC* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:2891D0* + ID_OUI_FROM_DATABASE=Stage Tec Entwicklungsgesellschaft für professionelle Audiotechnik mbH + +@@ -51929,6 +51947,9 @@ OUI:2C8A72* + OUI:2C8BF2* + ID_OUI_FROM_DATABASE=Hitachi Metals America Ltd + ++OUI:2C8D37* ++ ID_OUI_FROM_DATABASE=Virtium ++ + OUI:2C8DB1* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -52652,6 +52673,21 @@ OUI:303ABA* + OUI:303D08* + ID_OUI_FROM_DATABASE=GLINTT TES S.A. + ++OUI:303D511* ++ ID_OUI_FROM_DATABASE=SHENZHEN WLINK TECHNOLOGY CO., LTD. ++ ++OUI:303D512* ++ ID_OUI_FROM_DATABASE=Harman Connected Services Corporation India Pvt. Ltd. ++ ++OUI:303D515* ++ ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd. ++ ++OUI:303D518* ++ ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam ++ ++OUI:303D51A* ++ ID_OUI_FROM_DATABASE=TeraNXT Global India Pvt Ltd. ++ + OUI:303EA7* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -55133,6 +55169,9 @@ OUI:387A3C* + OUI:387B47* + ID_OUI_FROM_DATABASE=AKELA, Inc. + ++OUI:387C76* ++ ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd. ++ + OUI:3880DF* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + +@@ -56078,6 +56117,9 @@ OUI:3C38F4* + OUI:3C39C3* + ID_OUI_FROM_DATABASE=JW Electronics Co., Ltd. + ++OUI:3C39C8* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:3C39E70* + ID_OUI_FROM_DATABASE=Hannstar Display Corp + +@@ -57227,6 +57269,9 @@ OUI:4044FD* + OUI:4045DA* + ID_OUI_FROM_DATABASE=Spreadtrum Communications (Shanghai) Co., Ltd. + ++OUI:40475E* ++ ID_OUI_FROM_DATABASE=eero inc. ++ + OUI:40476A* + ID_OUI_FROM_DATABASE=Astro Gaming + +@@ -57617,6 +57662,9 @@ OUI:40A36BD* + OUI:40A3CC* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:40A53B* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:40A5EF* + ID_OUI_FROM_DATABASE=Shenzhen Four Seas Global Link Network Technology Co., Ltd. + +@@ -58040,6 +58088,9 @@ OUI:40FA7F* + OUI:40FC89* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:40FDF3* ++ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc. ++ + OUI:40FE0D* + ID_OUI_FROM_DATABASE=MAXIO + +@@ -60734,6 +60785,9 @@ OUI:4CA003* + OUI:4CA161* + ID_OUI_FROM_DATABASE=Rain Bird Corporation + ++OUI:4CA3A7* ++ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED ++ + OUI:4CA515* + ID_OUI_FROM_DATABASE=Baikal Electronics JSC + +@@ -63665,6 +63719,9 @@ OUI:586356* + OUI:58639A* + ID_OUI_FROM_DATABASE=TPL SYSTEMES + ++OUI:5864C4* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:5865E6* + ID_OUI_FROM_DATABASE=infomark + +@@ -63890,6 +63947,9 @@ OUI:589835* + OUI:58986F* + ID_OUI_FROM_DATABASE=Revolution Display + ++OUI:589A3E* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:589B0B* + ID_OUI_FROM_DATABASE=Shineway Technologies, Inc. + +@@ -64472,6 +64532,9 @@ OUI:5C3B35* + OUI:5C3C27* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:5C3E1B* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:5C4058* + ID_OUI_FROM_DATABASE=Jefferson Audio Video Systems, Inc. + +@@ -64532,6 +64595,9 @@ OUI:5C521E* + OUI:5C5230* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:5C5284* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:5C53C3* + ID_OUI_FROM_DATABASE=Ubee Interactive Co., Limited + +@@ -67811,6 +67877,9 @@ OUI:6882F2* + OUI:68831A* + ID_OUI_FROM_DATABASE=Pandora Mobility Corporation + ++OUI:6883CB* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:688470* + ID_OUI_FROM_DATABASE=eSSys Co.,Ltd + +@@ -70178,6 +70247,9 @@ OUI:70B14E* + OUI:70B265* + ID_OUI_FROM_DATABASE=Hiltron s.r.l. + ++OUI:70B306* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:70B317* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -79704,7 +79776,7 @@ OUI:70B3D5C74* + ID_OUI_FROM_DATABASE=Qtechnology A/S + + OUI:70B3D5C75* +- ID_OUI_FROM_DATABASE=BIT Group USA, Inc. ++ ID_OUI_FROM_DATABASE=PLANET INNOVATION (PI) + + OUI:70B3D5C76* + ID_OUI_FROM_DATABASE=ELA INNOVATION +@@ -79983,7 +80055,7 @@ OUI:70B3D5CD1* + ID_OUI_FROM_DATABASE=Cannex Technology Inc. + + OUI:70B3D5CD2* +- ID_OUI_FROM_DATABASE=HBH Microwave GmbH ++ ID_OUI_FROM_DATABASE=TRUMPF Huttinger GmbH + Co. KG, + + OUI:70B3D5CD3* + ID_OUI_FROM_DATABASE=Controlrad +@@ -83273,6 +83345,9 @@ OUI:747E1A* + OUI:747E2D* + ID_OUI_FROM_DATABASE=Beijing Thomson CITIC Digital Technology Co. LTD. + ++OUI:74803F* ++ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd. ++ + OUI:748114* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -85364,6 +85439,9 @@ OUI:7C27BC* + OUI:7C2A31* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:7C2ACA* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:7C2ADB* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -88610,6 +88688,9 @@ OUI:881DFC* + OUI:881FA1* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:88200D* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:882012* + ID_OUI_FROM_DATABASE=LMI Technologies + +@@ -89981,6 +90062,9 @@ OUI:8C1F6419B* + OUI:8C1F6419C* + ID_OUI_FROM_DATABASE=Aton srl + ++OUI:8C1F641A5* ++ ID_OUI_FROM_DATABASE=DIALTRONICS SYSTEMS PVT LTD ++ + OUI:8C1F641AF* + ID_OUI_FROM_DATABASE=EnviroNode IoT Solutions + +@@ -90014,6 +90098,9 @@ OUI:8C1F641E3* + OUI:8C1F641EF* + ID_OUI_FROM_DATABASE=Tantronic AG + ++OUI:8C1F641F0* ++ ID_OUI_FROM_DATABASE=AVCOMM Technologies Inc ++ + OUI:8C1F64204* + ID_OUI_FROM_DATABASE=castcore + +@@ -90050,6 +90137,9 @@ OUI:8C1F6425E* + OUI:8C1F64264* + ID_OUI_FROM_DATABASE=BR. Voss Ingenjörsfirma AB + ++OUI:8C1F64268* ++ ID_OUI_FROM_DATABASE=Astro Machine Corporation ++ + OUI:8C1F64270* + ID_OUI_FROM_DATABASE=Xi‘an Hangguang Satellite and Control Technology Co.,Ltd + +@@ -90272,6 +90362,9 @@ OUI:8C1F64498* + OUI:8C1F644AC* + ID_OUI_FROM_DATABASE=Vekto + ++OUI:8C1F644AE* ++ ID_OUI_FROM_DATABASE=KCS Co., Ltd. ++ + OUI:8C1F644B0* + ID_OUI_FROM_DATABASE=U -MEI-DAH INT'L ENTERPRISE CO.,LTD. + +@@ -90584,6 +90677,9 @@ OUI:8C1F6472C* + OUI:8C1F64737* + ID_OUI_FROM_DATABASE=Vytahy-Vymyslicky s.r.o. + ++OUI:8C1F6473B* ++ ID_OUI_FROM_DATABASE=Fink Zeitsysteme GmbH ++ + OUI:8C1F6473C* + ID_OUI_FROM_DATABASE=REO AG + +@@ -90905,6 +91001,9 @@ OUI:8C1F649F0* + OUI:8C1F649F2* + ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme + ++OUI:8C1F649F4* ++ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG ++ + OUI:8C1F649FA* + ID_OUI_FROM_DATABASE=METRONA-Union GmbH + +@@ -90914,6 +91013,9 @@ OUI:8C1F649FD* + OUI:8C1F649FE* + ID_OUI_FROM_DATABASE=Metroval Controle de Fluidos Ltda + ++OUI:8C1F649FF* ++ ID_OUI_FROM_DATABASE=Satelles Inc ++ + OUI:8C1F64A01* + ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd. + +@@ -91130,6 +91232,9 @@ OUI:8C1F64C03* + OUI:8C1F64C0C* + ID_OUI_FROM_DATABASE=GIORDANO CONTROLS SPA + ++OUI:8C1F64C0E* ++ ID_OUI_FROM_DATABASE=Goodtech AS dep Fredrikstad ++ + OUI:8C1F64C1F* + ID_OUI_FROM_DATABASE=Esys Srl + +@@ -91200,7 +91305,7 @@ OUI:8C1F64CBE* + ID_OUI_FROM_DATABASE=Circa Enterprises Inc + + OUI:8C1F64CC6* +- ID_OUI_FROM_DATABASE=Genius vision digital private limted ++ ID_OUI_FROM_DATABASE=Genius Vision Digital Private Limited + + OUI:8C1F64CCB* + ID_OUI_FROM_DATABASE=suzhou yuecrown Electronic Technology Co.,LTD +@@ -91238,6 +91343,9 @@ OUI:8C1F64CF1* + OUI:8C1F64CF3* + ID_OUI_FROM_DATABASE=ABB S.p.A. + ++OUI:8C1F64CF4* ++ ID_OUI_FROM_DATABASE=NT ++ + OUI:8C1F64D02* + ID_OUI_FROM_DATABASE=Flextronics International Kft + +@@ -91304,6 +91412,9 @@ OUI:8C1F64DAE* + OUI:8C1F64DB5* + ID_OUI_FROM_DATABASE=victtron + ++OUI:8C1F64DB7* ++ ID_OUI_FROM_DATABASE=Lambda Systems Inc. ++ + OUI:8C1F64DB9* + ID_OUI_FROM_DATABASE=Ermes Elettronica s.r.l. + +@@ -91322,6 +91433,9 @@ OUI:8C1F64DCA* + OUI:8C1F64DD5* + ID_OUI_FROM_DATABASE=Cardinal Scales Manufacturing Co + ++OUI:8C1F64DD7* ++ ID_OUI_FROM_DATABASE=KST technology ++ + OUI:8C1F64DE1* + ID_OUI_FROM_DATABASE=Franke Aquarotter GmbH + +@@ -91529,6 +91643,9 @@ OUI:8C1F64FB0* + OUI:8C1F64FB1* + ID_OUI_FROM_DATABASE=ABB + ++OUI:8C1F64FB5* ++ ID_OUI_FROM_DATABASE=Bavaria Digital Technik GmbH ++ + OUI:8C1F64FB7* + ID_OUI_FROM_DATABASE=Grace Design/Lunatec LLC + +@@ -92600,6 +92717,9 @@ OUI:900A39* + OUI:900A3A* + ID_OUI_FROM_DATABASE=PSG Plastic Service GmbH + ++OUI:900A62* ++ ID_OUI_FROM_DATABASE=Inventus Power Eletronica do Brasil LTDA ++ + OUI:900A84* + ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. + +@@ -94013,6 +94133,9 @@ OUI:946A77* + OUI:946AB0* + ID_OUI_FROM_DATABASE=Arcadyan Corporation + ++OUI:946DAE* ++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. ++ + OUI:9470D2* + ID_OUI_FROM_DATABASE=WINFIRM TECHNOLOGY + +@@ -95984,6 +96107,9 @@ OUI:9C04EB* + OUI:9C0567* + ID_OUI_FROM_DATABASE=Honor Device Co., Ltd. + ++OUI:9C0591* ++ ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. ++ + OUI:9C061B* + ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited + +@@ -96557,6 +96683,9 @@ OUI:9C8EDC* + OUI:9C9019* + ID_OUI_FROM_DATABASE=Beyless + ++OUI:9C924F* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:9C934E* + ID_OUI_FROM_DATABASE=Xerox Corporation + +@@ -97679,6 +97808,9 @@ OUI:A08C15* + OUI:A08C9B* + ID_OUI_FROM_DATABASE=Xtreme Technologies Corp + ++OUI:A08CF2* ++ ID_OUI_FROM_DATABASE=YINUOLINK CO.,LTD ++ + OUI:A08CF8* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -98900,6 +99032,9 @@ OUI:A48873* + OUI:A4895B* + ID_OUI_FROM_DATABASE=ARK INFOSOLUTIONS PVT LTD + ++OUI:A4897E* ++ ID_OUI_FROM_DATABASE=Guangzhou Yuhong Technology Co.,Ltd. ++ + OUI:A48CC0* + ID_OUI_FROM_DATABASE=JLG Industries, Inc. + +@@ -100079,6 +100214,9 @@ OUI:A8A668* + OUI:A8A795* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:A8ABB5* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:A8AD3D* + ID_OUI_FROM_DATABASE=Alcatel-Lucent Shanghai Bell Co., Ltd + +@@ -100331,6 +100469,9 @@ OUI:AA0003* + OUI:AA0004* + ID_OUI_FROM_DATABASE=DIGITAL EQUIPMENT CORPORATION + ++OUI:AC007A* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:AC00D0* + ID_OUI_FROM_DATABASE=zte corporation + +@@ -101117,6 +101258,9 @@ OUI:ACBB61* + OUI:ACBC32* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:ACBCB5* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:ACBCD9* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -101453,6 +101597,9 @@ OUI:B01C91* + OUI:B01F29* + ID_OUI_FROM_DATABASE=Helvetia INC. + ++OUI:B01F47* ++ ID_OUI_FROM_DATABASE=Heights Telecom T ltd ++ + OUI:B01F810* + ID_OUI_FROM_DATABASE=Dalian GigaTec Electronics Co.,Ltd + +@@ -101735,6 +101882,9 @@ OUI:B065F1* + OUI:B0672F* + ID_OUI_FROM_DATABASE=Bowers & Wilkins + ++OUI:B067B5* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:B068B6* + ID_OUI_FROM_DATABASE=Hangzhou OYE Technology Co. Ltd + +@@ -103643,6 +103793,9 @@ OUI:B847C6* + OUI:B848AA* + ID_OUI_FROM_DATABASE=EM Microelectronic + ++OUI:B8496D* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:B84D43* + ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED + +@@ -104411,6 +104564,9 @@ OUI:BC1485* + OUI:BC14EF* + ID_OUI_FROM_DATABASE=ITON Technology Limited + ++OUI:BC1541* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:BC15A6* + ID_OUI_FROM_DATABASE=Taiwan Jantek Electronics,Ltd. + +@@ -105893,6 +106049,9 @@ OUI:C09435* + OUI:C094AD* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:C0956D* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:C095DA* + ID_OUI_FROM_DATABASE=NXP India Private Limited + +@@ -106814,6 +106973,9 @@ OUI:C464B7* + OUI:C464E3* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:C464F2* ++ ID_OUI_FROM_DATABASE=Infinix mobility limited ++ + OUI:C46516* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -107603,6 +107765,9 @@ OUI:C81CFE* + OUI:C81E8E* + ID_OUI_FROM_DATABASE=ADV Security (S) Pte Ltd + ++OUI:C81EC2* ++ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED ++ + OUI:C81EE7* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -114809,12 +114974,18 @@ OUI:E0EDC7* + OUI:E0EE1B* + ID_OUI_FROM_DATABASE=Panasonic Automotive Systems Company of America + ++OUI:E0EF02* ++ ID_OUI_FROM_DATABASE=Chengdu Quanjing Intelligent Technology Co.,Ltd ++ + OUI:E0EF25* + ID_OUI_FROM_DATABASE=Lintes Technology Co., Ltd. + + OUI:E0F211* + ID_OUI_FROM_DATABASE=Digitalwatt + ++OUI:E0F318* ++ ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD ++ + OUI:E0F379* + ID_OUI_FROM_DATABASE=Vaddio + +@@ -115502,6 +115673,9 @@ OUI:E4A471* + OUI:E4A5EF* + ID_OUI_FROM_DATABASE=TRON LINK ELECTRONICS CO., LTD. + ++OUI:E4A634* ++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc. ++ + OUI:E4A749* + ID_OUI_FROM_DATABASE=Palo Alto Networks + +@@ -116003,6 +116177,9 @@ OUI:E8361D* + OUI:E8377A* + ID_OUI_FROM_DATABASE=Zyxel Communications Corporation + ++OUI:E838A0* ++ ID_OUI_FROM_DATABASE=Vizio, Inc ++ + OUI:E83935* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -116625,7 +116802,7 @@ OUI:E8CC32* + ID_OUI_FROM_DATABASE=Micronet LTD + + OUI:E8CC8C* +- ID_OUI_FROM_DATABASE=Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd. ++ ID_OUI_FROM_DATABASE=Chengdu Jiarui Hualian Communication Technology Co + + OUI:E8CD2D* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD +@@ -117419,6 +117596,9 @@ OUI:EC9F0DD* + OUI:EC9F0DE* + ID_OUI_FROM_DATABASE=MAX Technologies + ++OUI:ECA138* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:ECA1D1* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -117515,6 +117695,9 @@ OUI:ECC01B* + OUI:ECC06A* + ID_OUI_FROM_DATABASE=PowerChord Group Limited + ++OUI:ECC07A* ++ ID_OUI_FROM_DATABASE=Laird Connectivity ++ + OUI:ECC1AB* + ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited + +@@ -117776,6 +117959,9 @@ OUI:F01E34* + OUI:F01FAF* + ID_OUI_FROM_DATABASE=Dell Inc. + ++OUI:F01FC7* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:F0219D* + ID_OUI_FROM_DATABASE=Cal-Comp Electronics & Communications Company Ltd. + +@@ -118610,6 +118796,9 @@ OUI:F0D657* + OUI:F0D767* + ID_OUI_FROM_DATABASE=Axema Passagekontroll AB + ++OUI:F0D793* ++ ID_OUI_FROM_DATABASE=Apple, Inc. ++ + OUI:F0D7AA* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company + +@@ -119465,6 +119654,9 @@ OUI:F4911E* + OUI:F492BF* + ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc. + ++OUI:F4931C* ++ ID_OUI_FROM_DATABASE=Universal Electronics, Inc. ++ + OUI:F4939F* + ID_OUI_FROM_DATABASE=Hon Hai Precision Industry Co., Ltd. + +@@ -121463,9 +121655,18 @@ OUI:FC61799* + OUI:FC6179A* + ID_OUI_FROM_DATABASE=Shenzhen Dptek Technology Co., Ltd. + ++OUI:FC6179B* ++ ID_OUI_FROM_DATABASE=Fulian Precision Electronics(Tianjin) Co., Ltd ++ ++OUI:FC6179C* ++ ID_OUI_FROM_DATABASE=Shenzhen Xmitech Electronic Co.,Ltd ++ + OUI:FC6179D* + ID_OUI_FROM_DATABASE=Int'Act Pty Ltd + ++OUI:FC6179E* ++ ID_OUI_FROM_DATABASE=ACCO Brands USA LLC ++ + OUI:FC6198* + ID_OUI_FROM_DATABASE=NEC Personal Products, Ltd + +diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch +index f88a96ed30..a696119753 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb.patch ++++ b/hwdb.d/20-acpi-vendor.hwdb.patch +@@ -1,5 +1,5 @@ +---- 20-acpi-vendor.hwdb.base 2022-04-28 17:39:22.374730080 +0200 +-+++ 20-acpi-vendor.hwdb 2022-04-28 17:39:22.381730080 +0200 ++--- 20-acpi-vendor.hwdb.base 2022-05-05 16:21:43.499198786 +0200 +++++ 20-acpi-vendor.hwdb 2022-05-05 16:21:43.513198949 +0200 + @@ -3,6 +3,8 @@ + # Data imported from: + # https://uefi.org/uefi-pnp-export +diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb +index b55bd82327..cae426479b 100644 +--- a/hwdb.d/20-pci-vendor-model.hwdb ++++ b/hwdb.d/20-pci-vendor-model.hwdb +@@ -2127,7 +2127,13 @@ pci:v00001000d000000A5sv00001028sd00002141* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX) + + pci:v00001000d000000A5sv00001028sd00002142* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA 465e Adapter) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465e Adapter) ++ ++pci:v00001000d000000A5sv00001028sd00002209* ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465i Adapter) ++ ++pci:v00001000d000000A5sv00001028sd0000220A* ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465i Front) + + pci:v00001000d000000AB* + ID_MODEL_FROM_DATABASE=SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC) +@@ -11072,6 +11078,9 @@ pci:v00001002d000073BFsv00001002sd00000E3A* + pci:v00001002d000073BFsv0000148Csd00002408* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (Red Devil AMD Radeon RX 6900 XT) + ++pci:v00001002d000073BFsv00001DA2sd0000440F* ++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (TOXIC RX 6900 XT) ++ + pci:v00001002d000073BFsv00001EAEsd00006701* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] (XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black) + +@@ -11114,6 +11123,12 @@ pci:v00001002d0000740C* + pci:v00001002d0000740F* + ID_MODEL_FROM_DATABASE=Aldebaran + ++pci:v00001002d00007421* ++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6500M] ++ ++pci:v00001002d00007422* ++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6400] ++ + pci:v00001002d0000743F* + ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT] + +@@ -37052,6 +37067,9 @@ pci:v000010DEd00002505* + pci:v000010DEd00002507* + ID_MODEL_FROM_DATABASE=GA106 [Geforce RTX 3050] + ++pci:v000010DEd00002508* ++ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3050 OEM] ++ + pci:v000010DEd00002520* + ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q] + +@@ -37121,6 +37139,9 @@ pci:v000010DEd000025B9* + pci:v000010DEd000025BA* + ID_MODEL_FROM_DATABASE=GA107GLM [RTX A2000 8GB Laptop GPU] + ++pci:v000010DEd000025BB* ++ ID_MODEL_FROM_DATABASE=GA107GLM [RTX A500 Laptop GPU] ++ + pci:v000010DEd000025E0* + ID_MODEL_FROM_DATABASE=GA107BM [GeForce RTX 3050 Ti Mobile] + +@@ -56754,7 +56775,7 @@ pci:v000014C3* + ID_VENDOR_FROM_DATABASE=MEDIATEK Corp. + + pci:v000014C3d00000608* +- ID_MODEL_FROM_DATABASE=RZ608 Wi-Fi 6E 80MHz ++ ID_MODEL_FROM_DATABASE=MT7921K (RZ608) Wi-Fi 6E 80MHz + + pci:v000014C3d00000616* + ID_MODEL_FROM_DATABASE=MT7922 802.11ax PCI Express Wireless Network Adapter +@@ -61523,6 +61544,12 @@ pci:v000015B3d00000258* + pci:v000015B3d00000259* + ID_MODEL_FROM_DATABASE=Abir Chiplet + ++pci:v000015B3d0000025B* ++ ID_MODEL_FROM_DATABASE=Quantum-3 in Flash Recovery Mode ++ ++pci:v000015B3d0000025C* ++ ID_MODEL_FROM_DATABASE=Quantum-3 RMA ++ + pci:v000015B3d00000262* + ID_MODEL_FROM_DATABASE=MT27710 [ConnectX-4 Lx Programmable] EN + +@@ -62108,6 +62135,9 @@ pci:v000015B3d0000D2F0* + pci:v000015B3d0000D2F2* + ID_MODEL_FROM_DATABASE=Quantum-2 NDR (400Gbps) switch + ++pci:v000015B3d0000D2F4* ++ ID_MODEL_FROM_DATABASE=Quantum-3 ++ + pci:v000015B4* + ID_VENDOR_FROM_DATABASE=CCI/TRIAD + +@@ -65375,6 +65405,18 @@ pci:v000017D3d00001884* + pci:v000017D3d0000188A* + ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller + ++pci:v000017D3d0000188Asv000017D3sd00001217* ++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller) ++ ++pci:v000017D3d0000188Asv000017D3sd00001227* ++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller) ++ ++pci:v000017D3d0000188Asv000017D3sd00001686* ++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1686 PCIe 4.0 to SAS/SATA 12/6Gb Tape drive Controller) ++ ++pci:v000017D3d0000188Asv000017D3sd00001886* ++ ID_MODEL_FROM_DATABASE=ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller (ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller) ++ + pci:v000017D5* + ID_VENDOR_FROM_DATABASE=Exar Corp. + +@@ -70268,6 +70310,9 @@ pci:v00001C5Cd00002839sv00001C5Csd00000100* + pci:v00001C5Cd00002849* + ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive + ++pci:v00001C5Cd00002849sv00001C5Csd00000101* ++ ID_MODEL_FROM_DATABASE=PE81x0 U.2/3 NVMe Solid State Drive ++ + pci:v00001C5F* + ID_VENDOR_FROM_DATABASE=Beijing Memblaze Technology Co. Ltd. + +@@ -72525,13 +72570,61 @@ pci:v00001EECd00001EEC* + ID_MODEL_FROM_DATABASE=VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe + + pci:v00001EED* +- ID_VENDOR_FROM_DATABASE=Xiangdixian Computing Technology (Chongqing) Ltd. ++ ID_VENDOR_FROM_DATABASE=XDX Computing Technology Ltd. ++ ++pci:v00001EEDd00001100* ++ ID_MODEL_FROM_DATABASE=XDX110 Graphic/VGA Controller ++ ++pci:v00001EEDd00001101* ++ ID_MODEL_FROM_DATABASE=XDX110 Audio Controller ++ ++pci:v00001EEDd00001200* ++ ID_MODEL_FROM_DATABASE=XDX120 Graphic/VGA Controller ++ ++pci:v00001EEDd00001201* ++ ID_MODEL_FROM_DATABASE=XDX120 Audio Controller ++ ++pci:v00001EEDd00001300* ++ ID_MODEL_FROM_DATABASE=XDX130 Graphic/VGA Controller ++ ++pci:v00001EEDd00001301* ++ ID_MODEL_FROM_DATABASE=XDX130 Audio Controller ++ ++pci:v00001EEDd00001400* ++ ID_MODEL_FROM_DATABASE=XDX140 Graphic/VGA Controller ++ ++pci:v00001EEDd00001401* ++ ID_MODEL_FROM_DATABASE=XDX140 Audio Controller + +-pci:v00001EEDd00000100* +- ID_MODEL_FROM_DATABASE=XDX P100 VGA controller ++pci:v00001EEDd00001500* ++ ID_MODEL_FROM_DATABASE=XDX150 Graphic/VGA Controller + +-pci:v00001EEDd00000101* +- ID_MODEL_FROM_DATABASE=XDX P101 High Definition Audio Controller ++pci:v00001EEDd00001501* ++ ID_MODEL_FROM_DATABASE=XDX150 Audio Controller ++ ++pci:v00001EEDd00001600* ++ ID_MODEL_FROM_DATABASE=XDX160 Graphic/VGA Controller ++ ++pci:v00001EEDd00001601* ++ ID_MODEL_FROM_DATABASE=XDX160 Audio Controller ++ ++pci:v00001EEDd00001700* ++ ID_MODEL_FROM_DATABASE=XDX170 Graphic/VGA Controller ++ ++pci:v00001EEDd00001701* ++ ID_MODEL_FROM_DATABASE=XDX170 Audio Controller ++ ++pci:v00001EEDd00001800* ++ ID_MODEL_FROM_DATABASE=XDX180 Graphic/VGA Controller ++ ++pci:v00001EEDd00001801* ++ ID_MODEL_FROM_DATABASE=XDX180 Audio Controller ++ ++pci:v00001EEDd00001900* ++ ID_MODEL_FROM_DATABASE=XDX190 Graphic/VGA Controller ++ ++pci:v00001EEDd00001901* ++ ID_MODEL_FROM_DATABASE=XDX190 Audio Controller + + pci:v00001EFB* + ID_VENDOR_FROM_DATABASE=Flexxon Pte Ltd +@@ -74156,6 +74249,12 @@ pci:v00005168d00000300* + pci:v00005168d00000301* + ID_MODEL_FROM_DATABASE=FlyDVB-T + ++pci:v000051D8* ++ ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2 ++ ++pci:v000051D9* ++ ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3 ++ + pci:v00005301* + ID_VENDOR_FROM_DATABASE=Alliance Semiconductor Corp. + +@@ -74804,6 +74903,12 @@ pci:v00006766d00003D00* + pci:v00006766d00003D02* + ID_MODEL_FROM_DATABASE=Arise 1020 + ++pci:v00006766d00003D03* ++ ID_MODEL_FROM_DATABASE=Arise-GT-1040 ++ ++pci:v00006766d00003D04* ++ ID_MODEL_FROM_DATABASE=Arise1010 ++ + pci:v00006766d00003D40* + ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller + +@@ -80048,6 +80153,9 @@ pci:v00008086d0000124F* + pci:v00008086d00001250* + ID_MODEL_FROM_DATABASE=430HX - 82439HX TXC [Triton II] + ++pci:v00008086d0000125B* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller I226-LM ++ + pci:v00008086d00001360* + ID_MODEL_FROM_DATABASE=82806AA PCI64 Hub PCI Bridge + +@@ -80682,61 +80790,61 @@ pci:v00008086d00001560* + ID_MODEL_FROM_DATABASE=Ethernet Controller X540 + + pci:v00008086d00001563* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 + + pci:v00008086d00001563sv00001028sd00001FA8* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550/I350 rNDC) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 4P X550/I350 rNDC) + + pci:v00008086d00001563sv00001028sd00001FA9* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 4P X550 rNDC) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 4P X550 rNDC) + + pci:v00008086d00001563sv00001137sd000002B2* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550-TX 10 Gig LOM) + + pci:v00008086d00001563sv00001137sd000002B3* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550-TX 10 Gig LOM) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550-TX 10 Gig LOM) + + pci:v00008086d00001563sv00001170sd00000001* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Intel Ethernet Controller X550-T2 OCP card) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Intel Ethernet Controller X550-T2 OCP card) + + pci:v00008086d00001563sv000014C0sd00001201* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550 10Gb 2P RJ45 OCP Mezz) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550 10Gb 2P RJ45 OCP Mezz) + + pci:v00008086d00001563sv00001590sd000000D1* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10Gb 2-port 562T Adapter) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10Gb 2-port 562T Adapter) + + pci:v00008086d00001563sv00001590sd000000D2* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10Gb 2-port 562FLR-T Adapter) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10Gb 2-port 562FLR-T Adapter) + + pci:v00008086d00001563sv000016B8sd00007217* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Twin10G Thunderbolt 3 Edition) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Twin10G Thunderbolt 3 Edition) + + pci:v00008086d00001563sv000018D4sd00000C08* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (X550 10Gb 2-port RJ45 OCP Mezz Card MOP81-I-10GT2) + + pci:v00008086d00001563sv0000193Dsd00001008* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (560T-B) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (560T-B) + + pci:v00008086d00001563sv0000193Dsd00001009* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (560T-L) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (560T-L) + + pci:v00008086d00001563sv0000193Dsd00001011* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (UN-NIC-ETH563T-sL-2P) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (UN-NIC-ETH563T-sL-2P) + + pci:v00008086d00001563sv00008086sd00000001* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2) + + pci:v00008086d00001563sv00008086sd0000001A* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2) + + pci:v00008086d00001563sv00008086sd0000001B* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Server Adapter X550-T2 for OCP) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Server Adapter X550-T2 for OCP) + + pci:v00008086d00001563sv00008086sd0000001D* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet 10G 2P X550-t Adapter) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet 10G 2P X550-t Adapter) + + pci:v00008086d00001563sv00008086sd00000022* +- ID_MODEL_FROM_DATABASE=Ethernet Controller 10G X550T (Ethernet Converged Network Adapter X550-T2) ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X550 (Ethernet Converged Network Adapter X550-T2) + + pci:v00008086d00001564* + ID_MODEL_FROM_DATABASE=X550 Virtual Function +@@ -81266,6 +81374,9 @@ pci:v00008086d00001592sv00008086sd00000010* + pci:v00008086d00001592sv00008086sd00000011* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1 for OCP3.0) + ++pci:v00008086d00001592sv00008086sd00000012* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C-st Adapter) ++ + pci:v00008086d00001593* + ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP + +@@ -81836,6 +81947,21 @@ pci:v00008086d0000163E* + pci:v00008086d00001889* + ID_MODEL_FROM_DATABASE=Ethernet Adaptive Virtual Function + ++pci:v00008086d0000188A* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for backplane ++ ++pci:v00008086d0000188B* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for QSFP ++ ++pci:v00008086d0000188C* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C for SFP ++ ++pci:v00008086d0000188D* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C/X557-AT 10GBASE-T ++ ++pci:v00008086d0000188E* ++ ID_MODEL_FROM_DATABASE=Ethernet Connection E823-C 1GbE ++ + pci:v00008086d00001890* + ID_MODEL_FROM_DATABASE=Ethernet Connection E822-C for backplane + +@@ -95171,6 +95297,12 @@ pci:v00008086d000051C8* + pci:v00008086d000051D3* + ID_MODEL_FROM_DATABASE=Alder Lake-P SATA AHCI Controller + ++pci:v00008086d000051D8* ++ ID_MODEL_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2 ++ ++pci:v00008086d000051D9* ++ ID_MODEL_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3 ++ + pci:v00008086d000051E0* + ID_MODEL_FROM_DATABASE=Alder Lake PCH HECI Controller + +@@ -95222,9 +95354,6 @@ pci:v00008086d0000530D* + pci:v00008086d00005502* + ID_MODEL_FROM_DATABASE=Ethernet Controller (2) I225-LMvP + +-pci:v00008086d00005504* +- ID_MODEL_FROM_DATABASE=Ethernet Controller I226-K +- + pci:v00008086d00005845* + ID_MODEL_FROM_DATABASE=QEMU NVM Express Controller + +diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb +index c0e6f59917..d7e218011a 100644 +--- a/hwdb.d/20-usb-vendor-model.hwdb ++++ b/hwdb.d/20-usb-vendor-model.hwdb +@@ -66939,7 +66939,7 @@ usb:v2A19p5442* + ID_MODEL_FROM_DATABASE=TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device + + usb:v2A1D* +- ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies, Ltd ++ ID_VENDOR_FROM_DATABASE=Oxford Nanopore Technologies plc + + usb:v2A1Dp0000* + ID_MODEL_FROM_DATABASE=MinION +@@ -66959,6 +66959,12 @@ usb:v2A1Dp0020* + usb:v2A1Dp0021* + ID_MODEL_FROM_DATABASE=GridION + ++usb:v2A1Dp0120* ++ ID_MODEL_FROM_DATABASE=GridION Mk1 Bay ++ ++usb:v2A1Dp0121* ++ ID_MODEL_FROM_DATABASE=GridION Mk1 Bay ++ + usb:v2A37* + ID_VENDOR_FROM_DATABASE=RTD Embedded Technologies, Inc. + +diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt +index 67fd6c1836..aeecb73bbf 100644 +--- a/hwdb.d/ma-large.txt ++++ b/hwdb.d/ma-large.txt +@@ -38327,12 +38327,6 @@ C8BF4C (base 16) Beijing Xiaomi Mobile Software Co., Ltd + Beijing Beijing 100085 + CN + +-E8-CC-8C (hex) Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd. +-E8CC8C (base 16) Chengdu Jia Rui Hua Lian Communication Technology Co.,Ltd. +- 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province +- Chengdu Sichuan 610000 +- CN +- + 58-1C-F8 (hex) Intel Corporate + 581CF8 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -38387,11 +38381,17 @@ CC29BD (base 16) zte corporation + Hangzhou Zhejiang 310052 + CN + +-5C-60-BA (hex) HP Inc. +-5C60BA (base 16) HP Inc. +- 10300 Energy Dr +- Spring TX 77389 +- US ++E0-EF-02 (hex) Chengdu Quanjing Intelligent Technology Co.,Ltd ++E0EF02 (base 16) Chengdu Quanjing Intelligent Technology Co.,Ltd ++ Building A2, Chi Yuen Technology Park, 1001 College Avenue, Nanshan District, Shenzhen,P.R.C. ++ Shenzhen Guangdong 518000 ++ CN ++ ++4C-A3-A7 (hex) TECNO MOBILE LIMITED ++4CA3A7 (base 16) TECNO MOBILE LIMITED ++ ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG ++ Hong Kong Hong Kong 999077 ++ HK + + 20-9C-B4 (hex) Aruba, a Hewlett Packard Enterprise Company + 209CB4 (base 16) Aruba, a Hewlett Packard Enterprise Company +@@ -38399,6 +38399,90 @@ CC29BD (base 16) zte corporation + Santa Clara CA 95054 + US + ++E8-CC-8C (hex) Chengdu Jiarui Hualian Communication Technology Co ++E8CC8C (base 16) Chengdu Jiarui Hualian Communication Technology Co ++ 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province ++ Chengdu Sichuan 610000 ++ CN ++ ++A8-AB-B5 (hex) Apple, Inc. ++A8ABB5 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++58-64-C4 (hex) Apple, Inc. ++5864C4 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++40-A5-3B (hex) Nokia ++40A53B (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++B0-67-B5 (hex) Apple, Inc. ++B067B5 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++5C-52-84 (hex) Apple, Inc. ++5C5284 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++C0-95-6D (hex) Apple, Inc. ++C0956D (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++3C-39-C8 (hex) Apple, Inc. ++3C39C8 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++04-43-FD (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++0443FD (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++74-80-3F (hex) Renesas Electronics (Penang) Sdn. Bhd. ++74803F (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY ++ ++EC-A1-38 (hex) Amazon Technologies Inc. ++ECA138 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++5C-60-BA (hex) HP Inc. ++5C60BA (base 16) HP Inc. ++ 10300 Energy Dr ++ Spring TX 77389 ++ US ++ ++A4-89-7E (hex) Guangzhou Yuhong Technology Co.,Ltd. ++A4897E (base 16) Guangzhou Yuhong Technology Co.,Ltd. ++ Room 402, No. 11 Software Road, Tianhe District, Guangzhou ++ Guangzhou Guangdong 510640 ++ CN ++ ++90-0A-62 (hex) Inventus Power Eletronica do Brasil LTDA ++900A62 (base 16) Inventus Power Eletronica do Brasil LTDA ++ Av Buriti, 4285 Distrito Industrial ++ Manaus Amazonas 69075000 ++ BR ++ + 9C-FF-C2 (hex) AVI Systems GmbH + 9CFFC2 (base 16) AVI Systems GmbH + Dr. Franz Wilhelmstraße 2A +@@ -76376,6 +76460,42 @@ A036BC (base 16) ASUSTek COMPUTER INC. + Hsinchu 300 + TW + ++70-B3-06 (hex) Apple, Inc. ++70B306 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++B8-49-6D (hex) Apple, Inc. ++B8496D (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++9C-92-4F (hex) Apple, Inc. ++9C924F (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++20-0E-2B (hex) Apple, Inc. ++200E2B (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++F0-D7-93 (hex) Apple, Inc. ++F0D793 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++30-3D-51 (hex) IEEE Registration Authority ++303D51 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ + 84-80-94 (hex) Meter, Inc. + 848094 (base 16) Meter, Inc. + 148 Townsend St +@@ -114587,12 +114707,6 @@ F0C1CE (base 16) GoodWe Technologies CO., Ltd + Dallas TX 75243 + US + +-38-E7-C0 (hex) Hui Zhou Gaoshengda Technology Co.,LTD +-38E7C0 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD +- No.2,Jin-da Road,Huinan Industrial Park +- Hui Zhou Guangdong 516025 +- CN +- + D8-E8-44 (hex) zte corporation + D8E844 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +@@ -114611,12 +114725,54 @@ E46A35 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Shenzhen Guangdong 518040 + CN + ++58-9A-3E (hex) Amazon Technologies Inc. ++589A3E (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++E8-38-A0 (hex) Vizio, Inc ++E838A0 (base 16) Vizio, Inc ++ 39 Tesla ++ Irvine CA 92618 ++ US ++ ++C8-1E-C2 (hex) ITEL MOBILE LIMITED ++C81EC2 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK ++ ++38-E7-C0 (hex) Hui Zhou Gaoshengda Technology Co.,LTD ++38E7C0 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD ++ No.2,Jin-da Road,Huinan Industrial Park ++ Hui Zhou Guangdong 516025 ++ CN ++ + 68-B9-C2 (hex) Earda Technologies co Ltd + 68B9C2 (base 16) Earda Technologies co Ltd + Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District + Guangzhou Guangdong 511455 + CN + ++68-83-CB (hex) Apple, Inc. ++6883CB (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++EC-C0-7A (hex) Laird Connectivity ++ECC07A (base 16) Laird Connectivity ++ 3F.-1, No.145, Xianzheng 9th Rd., ++ Zhubei 30251 ++ TW ++ ++9C-05-91 (hex) Mellanox Technologies, Inc. ++9C0591 (base 16) Mellanox Technologies, Inc. ++ 350 Oakmead Parkway, Suite 100 ++ Sunnyvale CA 94085 ++ US ++ + F8-D0-27 (hex) Seiko Epson Corporation + F8D027 (base 16) Seiko Epson Corporation + 2070 Kotobuki Koaka +@@ -152948,6 +153104,48 @@ EC74D7 (base 16) Grandstream Networks Inc + shenzhen guangdong 518057 + CN + ++A0-8C-F2 (hex) YINUOLINK CO.,LTD ++A08CF2 (base 16) YINUOLINK CO.,LTD ++ 3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an ++ Shenzhen Guangdong 518103 ++ CN ++ ++40-47-5E (hex) eero inc. ++40475E (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++20-E6-DF (hex) eero inc. ++20E6DF (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++F4-93-1C (hex) Universal Electronics, Inc. ++F4931C (base 16) Universal Electronics, Inc. ++ 201 E. Sandpointe Ave ++ Santa Ana CA 92707 ++ US ++ ++5C-3E-1B (hex) Apple, Inc. ++5C3E1B (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++7C-2A-CA (hex) Apple, Inc. ++7C2ACA (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++28-8E-EC (hex) Apple, Inc. ++288EEC (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + 7C-8A-E1 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD. + 7C8AE1 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD. + NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE +@@ -191027,8 +191225,98 @@ DC0539 (base 16) Cisco Systems, Inc + East Greenwich RI 02818 + US + ++B0-1F-47 (hex) Heights Telecom T ltd ++B01F47 (base 16) Heights Telecom T ltd ++ Moshe Lerer 15 ++ Nes Ziona 7404996 ++ IL ++ ++28-29-47 (hex) Chipsea Technologies (Shenzhen) Corp. ++282947 (base 16) Chipsea Technologies (Shenzhen) Corp. ++ 3 / F, Block A, Building 2, Shenzhen Bay Innovation Technology Center, No.3156 keyuan South Road, Yuehai Street, Nanshan District, Shenzhen ++ Shenzhen Guangdong 518000 ++ CN ++ ++AC-BC-B5 (hex) Apple, Inc. ++ACBCB5 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++08-25-73 (hex) Apple, Inc. ++082573 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++AC-00-7A (hex) Apple, Inc. ++AC007A (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++F0-1F-C7 (hex) Apple, Inc. ++F01FC7 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + B8-8F-27 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + B88F27 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. + Chongqing China 401120 + CN ++ ++88-20-0D (hex) Apple, Inc. ++88200D (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++BC-15-41 (hex) Nokia ++BC1541 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++E0-F3-18 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++E0F318 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++C4-64-F2 (hex) Infinix mobility limited ++C464F2 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ ++94-6D-AE (hex) Mellanox Technologies, Inc. ++946DAE (base 16) Mellanox Technologies, Inc. ++ 350 Oakmead Parkway, Suite 100 ++ Sunnyvale CA 94085 ++ US ++ ++40-FD-F3 (hex) AMPAK Technology,Inc. ++40FDF3 (base 16) AMPAK Technology,Inc. ++ 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, ++ Hsinchu Hsinchu,Taiwan R.O.C. 30352 ++ TW ++ ++E4-A6-34 (hex) Universal Electronics, Inc. ++E4A634 (base 16) Universal Electronics, Inc. ++ 201 E. Sandpointe Ave ++ Santa Ana CA 92707 ++ US ++ ++2C-8D-37 (hex) Virtium ++2C8D37 (base 16) Virtium ++ 30052 Tomas ++ Racho Santa MArgarita CA 92688 ++ US ++ ++38-7C-76 (hex) Universal Global Scientific Industrial Co., Ltd. ++387C76 (base 16) Universal Global Scientific Industrial Co., Ltd. ++ 141, Lane 351, Taiping Road, Sec.1,Tsao Tuen ++ Nan-Tou Taiwan 54261 ++ TW +diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt +index 08cdcba936..18806ccc14 100644 +--- a/hwdb.d/ma-medium.txt ++++ b/hwdb.d/ma-medium.txt +@@ -5060,6 +5060,18 @@ A00000-AFFFFF (base 16) Annapurna labs + Mail box 15123 Haifa 3508409 + IL + ++FC-61-79 (hex) Shenzhen Xmitech Electronic Co.,Ltd ++C00000-CFFFFF (base 16) Shenzhen Xmitech Electronic Co.,Ltd ++ Room 8B1888, Block AB, New Energy Building, No.2239, Nanhai Avenue, Nanguang Community, Nanshan Street, Nanshan District, Shenzhen ++ Shenzhen 518054 ++ CN ++ ++30-3D-51 (hex) SHENZHEN WLINK TECHNOLOGY CO., LTD. ++100000-1FFFFF (base 16) SHENZHEN WLINK TECHNOLOGY CO., LTD. ++ 201, F5 Building, TCL International E City, No.1001 Zhongshanyuan Rd., Nanshan Dist. ++ Shenzhen Guangdong 518052 ++ CN ++ + 4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD + 400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD + Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district +@@ -15023,11 +15035,11 @@ FC-61-79 (hex) MACH SYSTEMS s.r.o. + Prague 10800 + CZ + +-FC-61-79 (hex) Annapurna labs +-800000-8FFFFF (base 16) Annapurna labs +- Matam Scientific Industries Center, Building 8.2 +- Mail box 15123 Haifa 3508409 +- IL ++30-3D-51 (hex) Media Hub Digital Smart Home Pty Ltd. ++500000-5FFFFF (base 16) Media Hub Digital Smart Home Pty Ltd. ++ 40 Koornang Road ++ Scoresby VIC 3179 ++ AU + + FC-61-79 (hex) Zhuhai Anjubao Electronics Technology Co., Ltd. + 000000-0FFFFF (base 16) Zhuhai Anjubao Electronics Technology Co., Ltd. +@@ -15041,6 +15053,18 @@ FC-61-79 (hex) Shenzhen Shenshui Electronic Commerce Co.,Ltd + Shenzhen 518132 + CN + ++FC-61-79 (hex) Annapurna labs ++800000-8FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++30-3D-51 (hex) TeraNXT Global India Pvt Ltd. ++A00000-AFFFFF (base 16) TeraNXT Global India Pvt Ltd. ++ 7A/61 W.E.A KAROL BAGH ++ DELHI DELHI 110005 ++ IN ++ + 4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd. + 600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd. + 22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone +@@ -20039,6 +20063,18 @@ FC-61-79 (hex) Hangzhou LiDe Communication Co.,Ltd + Hangzhou 311500 + CN + ++30-3D-51 (hex) Harman Connected Services Corporation India Pvt. Ltd. ++200000-2FFFFF (base 16) Harman Connected Services Corporation India Pvt. Ltd. ++ Plot No 3 & 3A, EOIZ Industrial Area, Sy.No.85 and 86, KIADB, Whitefield, ++ Bengaluru Karnataka 560066 ++ IN ++ ++FC-61-79 (hex) ACCO Brands USA LLC ++E00000-EFFFFF (base 16) ACCO Brands USA LLC ++ Four Corporate Drive ++ Lake Zurich IL 60047-2997 ++ US ++ + 20-85-93 (hex) Great Lite International + 700000-7FFFFF (base 16) Great Lite International + 11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist., +@@ -25100,12 +25136,24 @@ D00000-DFFFFF (base 16) Int'Act Pty Ltd + Boston MA 02215 + US + ++30-3D-51 (hex) The Heil Co dba AWTI 3rd Eye Cam ++800000-8FFFFF (base 16) The Heil Co dba AWTI 3rd Eye Cam ++ 201 West Main Street, Suite 300 ++ Chattanooga 37408 ++ US ++ + FC-61-79 (hex) Signalinks Communication Technology Co.,Ltd + 100000-1FFFFF (base 16) Signalinks Communication Technology Co.,Ltd + 3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen + Shenzhen Guangdong 518000 + CN + ++FC-61-79 (hex) Fulian Precision Electronics(Tianjin) Co., Ltd ++B00000-BFFFFF (base 16) Fulian Precision Electronics(Tianjin) Co., Ltd ++ No 36. North Street, West Zone, Economic & Technological Development Area, Tianjin, China ++ Tianjin Tianjin 300457 ++ CN ++ + FC-61-79 (hex) Shenzhen Dptek Technology Co., Ltd. + A00000-AFFFFF (base 16) Shenzhen Dptek Technology Co., Ltd. + Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District +diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt +index 704a346ad5..496fd55c73 100644 +--- a/hwdb.d/ma-small.txt ++++ b/hwdb.d/ma-small.txt +@@ -5927,6 +5927,30 @@ E90000-E90FFF (base 16) MHE Electronics + Changwon-si, Gyeongsangnam-do, Republic of Korea 51368 + KR + ++8C-1F-64 (hex) Lambda Systems Inc. ++DB7000-DB7FFF (base 16) Lambda Systems Inc. ++ 2-11-26 Sangenjaya ++ Setagaya-ku Tokyo 154-0024 ++ JP ++ ++8C-1F-64 (hex) Grossenbacher Systeme AG ++9F4000-9F4FFF (base 16) Grossenbacher Systeme AG ++ Spinnereistrasse 10 ++ St. Gallen 9008 ++ CH ++ ++8C-1F-64 (hex) KCS Co., Ltd. ++4AE000-4AEFFF (base 16) KCS Co., Ltd. ++ 1101, NexZone, 50, Wanam-ro, Seongsan-gu, ++ Changwon-si 51573 ++ KR ++ ++8C-1F-64 (hex) Satelles Inc ++9FF000-9FFFFF (base 16) Satelles Inc ++ 1835 Alexander Bell Dr., Suite 240 ++ Reston VA 20191 ++ US ++ + 70-B3-D5 (hex) EVCO SPA + A80000-A80FFF (base 16) EVCO SPA + VIA FELTRE N. 81 +@@ -11699,18 +11723,24 @@ B7C000-B7CFFF (base 16) EVERNET CO,.LTD TAIWAN + Plainsboro NJ 08536 + US + +-8C-1F-64 (hex) Genius vision digital private limted +-CC6000-CC6FFF (base 16) Genius vision digital private limted +- S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027 +- new delhi new delhi 110027 +- IN +- + 8C-1F-64 (hex) FMTec GmbH - Future Management Technologies + 3E3000-3E3FFF (base 16) FMTec GmbH - Future Management Technologies + Austraße 59e + Bludenz Austria 6700 + AT + ++8C-1F-64 (hex) Genius Vision Digital Private Limited ++CC6000-CC6FFF (base 16) Genius Vision Digital Private Limited ++ S-39, GF JANTA MARKET, RAJOURI GARDEN,NEW DELHI - 110027 ++ new delhi new delhi 110027 ++ IN ++ ++8C-1F-64 (hex) AVCOMM Technologies Inc ++1F0000-1F0FFF (base 16) AVCOMM Technologies Inc ++ 333 West Loop N FreewaySuite 460 ++ Houston TX 77024-7338 ++ US ++ + 70-B3-D5 (hex) System West dba ICS Electronics + E06000-E06FFF (base 16) System West dba ICS Electronics + 7034 Commerce Circle Suite A +@@ -13829,12 +13859,6 @@ CE5000-CE5FFF (base 16) GridBridge Inc + Christchurch Canterbury 8024 + NZ + +-70-B3-D5 (hex) HBH Microwave GmbH +-CD2000-CD2FFF (base 16) HBH Microwave GmbH +- Helmholtzstr. 1 +- Stutensee 76297 +- DE +- + 70-B3-D5 (hex) Firefly RFID Solutions + 8B3000-8B3FFF (base 16) Firefly RFID Solutions + 1521 Boone Trail Rd +@@ -17450,6 +17474,24 @@ CDB000-CDBFFF (base 16) EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT + Budapest 1132 + HU + ++8C-1F-64 (hex) Goodtech AS dep Fredrikstad ++C0E000-C0EFFF (base 16) Goodtech AS dep Fredrikstad ++ Gamle Beddingvei 28 ++ FREDRIKSTAD Viken 1671 ++ NO ++ ++70-B3-D5 (hex) TRUMPF Huttinger GmbH + Co. KG, ++CD2000-CD2FFF (base 16) TRUMPF Huttinger GmbH + Co. KG, ++ Helmholtzstr. 1 ++ Stutensee 76297 ++ DE ++ ++8C-1F-64 (hex) DIALTRONICS SYSTEMS PVT LTD ++1A5000-1A5FFF (base 16) DIALTRONICS SYSTEMS PVT LTD ++ Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur ++ Hyderabad Telangana 500081 ++ IN ++ + 70-B3-D5 (hex) YUYAMA MFG Co.,Ltd + BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd + 3-3-1 +@@ -21887,12 +21929,6 @@ DBA000-DBAFFF (base 16) KODENSHI CORP. + MINATO-KU TOKYO 1060032 + JP + +-70-B3-D5 (hex) BIT Group USA, Inc. +-C75000-C75FFF (base 16) BIT Group USA, Inc. +- 15870 Bernardo center drive +- San Diego CA 92127 +- US +- + 70-B3-D5 (hex) Zeus Control Systems Ltd + E73000-E73FFF (base 16) Zeus Control Systems Ltd + 1-4 Alexander House Station Road +@@ -23366,6 +23402,36 @@ C3A000-C3AFFF (base 16) YUSUR Technology Co., Ltd. + Faridabad HARYANA 121002 + IN + ++8C-1F-64 (hex) Fink Zeitsysteme GmbH ++73B000-73BFFF (base 16) Fink Zeitsysteme GmbH ++ Möslestraße 21 ++ Altach Vorarlberg 6844 ++ AT ++ ++70-B3-D5 (hex) PLANET INNOVATION (PI) ++C75000-C75FFF (base 16) PLANET INNOVATION (PI) ++ 6 Thomas ++ Irvine CA 92618 ++ US ++ ++8C-1F-64 (hex) KST technology ++DD7000-DD7FFF (base 16) KST technology ++ KST B/D 4-5, Wiryeseong-daero 12-gil ++ Songpa-gu Seoul 05636 ++ KR ++ ++8C-1F-64 (hex) Bavaria Digital Technik GmbH ++FB5000-FB5FFF (base 16) Bavaria Digital Technik GmbH ++ Rehbichler Weg 26 ++ Pfronten Bayern 87459 ++ DE ++ ++8C-1F-64 (hex) NT ++CF4000-CF4FFF (base 16) NT ++ Azrieli Circular Tower132 Menachem Begin Rd ++ Tel Aviv 6701101 ++ IL ++ + 70-B3-D5 (hex) DISMUNTEL SAL + 92C000-92CFFF (base 16) DISMUNTEL SAL + Pol ind cotes +@@ -29089,3 +29155,9 @@ DFE000-DFEFFF (base 16) Nuvation Energy + 40 Bathurst Drive + Waterloo Ontario N2V 1V6 + CA ++ ++8C-1F-64 (hex) Astro Machine Corporation ++268000-268FFF (base 16) Astro Machine Corporation ++ 630 Lively Blvd ++ Elk Grove Village IL 60007 ++ US +diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids +index c657b038fb..9bba38f431 100644 +--- a/hwdb.d/pci.ids ++++ b/hwdb.d/pci.ids +@@ -1,8 +1,8 @@ + # + # List of PCI ID's + # +-# Version: 2022.04.16 +-# Date: 2022-04-16 00:17:00 ++# Version: 2022.05.03 ++# Date: 2022-05-03 03:15:01 + # + # Maintained by Albert Pool, Martin Mares, and other volunteers from + # the PCI ID Project at https://pci-ids.ucw.cz/. +@@ -744,7 +744,9 @@ + 1028 213f PERC H365i Adapter + 1028 2140 PERC H365i Front + 1028 2141 PERC H360 MX +- 1028 2142 HBA 465e Adapter ++ 1028 2142 HBA465e Adapter ++ 1028 2209 HBA465i Adapter ++ 1028 220a HBA465i Front + 00ab SAS3516 Fusion-MPT Tri-Mode RAID On Chip (ROC) + # 8 Internal and 8 External port channel 9400 HBA + 1000 3040 HBA 9400-8i8e +@@ -3776,6 +3778,7 @@ + 73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] + 1002 0e3a Radeon RX 6900 XT + 148c 2408 Red Devil AMD Radeon RX 6900 XT ++ 1da2 440f TOXIC RX 6900 XT + 1eae 6701 XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black + 73c3 Navi 22 + 73c4 Navi 22 USB +@@ -3790,6 +3793,8 @@ + 7408 Aldebaran + 740c Aldebaran + 740f Aldebaran ++ 7421 Navi 24 [Radeon PRO W6500M] ++ 7422 Navi 24 [Radeon PRO W6400] + 743f Navi 24 [Radeon RX 6400 / 6500 XT] + 1da2 e457 PULSE AMD Radeon RX 6500 XT + 7833 RS350 Host Bridge +@@ -12515,6 +12520,7 @@ + 2504 GA106 [GeForce RTX 3060 Lite Hash Rate] + 2505 GA106 + 2507 GA106 [Geforce RTX 3050] ++ 2508 GA106 [GeForce RTX 3050 OEM] + 2520 GA106M [GeForce RTX 3060 Mobile / Max-Q] + 2523 GA106M [GeForce RTX 3050 Ti Mobile / Max-Q] + 252f GA106 [GeForce RTX 3060 Engineering Sample] +@@ -12539,6 +12545,7 @@ + 25b8 GA107GLM [RTX A2000 Mobile] + 25b9 GA107GLM [RTX A1000 Laptop GPU] + 25ba GA107GLM [RTX A2000 8GB Laptop GPU] ++ 25bb GA107GLM [RTX A500 Laptop GPU] + 25e0 GA107BM [GeForce RTX 3050 Ti Mobile] + 25e2 GA107BM [GeForce RTX 3050 Mobile] + 25e5 GA107BM [GeForce RTX 3050 Mobile] +@@ -19178,7 +19185,7 @@ + 103c 1240 Myrinet M2L-PCI64/2-3.0 LANai 7.4 (HP OEM) + 14c2 DTK Computer + 14c3 MEDIATEK Corp. +- 0608 RZ608 Wi-Fi 6E 80MHz ++ 0608 MT7921K (RZ608) Wi-Fi 6E 80MHz + 0616 MT7922 802.11ax PCI Express Wireless Network Adapter + 7612 MT7612E 802.11acbgn PCI Express Wireless Network Adapter + 7615 MT7615E 802.11ac PCI Express Wireless Network Adapter +@@ -20795,6 +20802,8 @@ + 0257 Quantum-2 in Flash Recovery Mode + 0258 Quantum-2 RMA + 0259 Abir Chiplet ++ 025b Quantum-3 in Flash Recovery Mode ++ 025c Quantum-3 RMA + 0262 MT27710 [ConnectX-4 Lx Programmable] EN + 0263 MT27710 [ConnectX-4 Lx Programmable Virtual Function] EN + 0264 Innova-2 Flex Burn image +@@ -20998,6 +21007,7 @@ + cf84 Spectrum-4C + d2f0 Quantum HDR (200Gbps) switch + d2f2 Quantum-2 NDR (400Gbps) switch ++ d2f4 Quantum-3 + 15b4 CCI/TRIAD + 15b5 Cimetrics Inc + 15b6 Texas Memory Systems Inc +@@ -22126,6 +22136,10 @@ + 17d3 1883 ARC-1883 8/12/16/24 Port PCIe 3.0 to SAS/SATA 12Gb RAID Controller + 1884 ARC-1884 series PCIe 3.0 to SAS/SATA 12/6Gb RAID Controller + 188a ARC-1886 series PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller ++ 17d3 1217 ARC-1217 4-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller ++ 17d3 1227 ARC-1227 8-Port PCIe 4.0 to SAS/SATA 12/6Gb RAID Controller ++ 17d3 1686 ARC-1686 PCIe 4.0 to SAS/SATA 12/6Gb Tape drive Controller ++ 17d3 1886 ARC-1886 PCIe 4.0 to NVMe/SAS/SATA 16/12/6Gb RAID Controller + # nee Neterion Inc., previously S2io Inc. + 17d5 Exar Corp. + 5731 Xframe 10-Gigabit Ethernet PCI-X +@@ -23901,6 +23915,7 @@ + 1028 214a DC NVMe PE8010 RI U.2 7.68TB + 1c5c 0100 PE8000 Series NVMe Solid State Drive + 2849 PE81x0 U.2/3 NVMe Solid State Drive ++ 1c5c 0101 PE81x0 U.2/3 NVMe Solid State Drive + 1c5f Beijing Memblaze Technology Co. Ltd. + 000d PBlaze5 520/526 + 000e PBlaze6 6530 +@@ -24698,9 +24713,25 @@ + 1eec Viscore Technologies Ltd + 0102 VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe + 1eec VSE250231S Dual-port 10Gb/25Gb Ethernet PCIe +-1eed Xiangdixian Computing Technology (Chongqing) Ltd. +- 0100 XDX P100 VGA controller +- 0101 XDX P101 High Definition Audio Controller ++1eed XDX Computing Technology Ltd. ++ 1100 XDX110 Graphic/VGA Controller ++ 1101 XDX110 Audio Controller ++ 1200 XDX120 Graphic/VGA Controller ++ 1201 XDX120 Audio Controller ++ 1300 XDX130 Graphic/VGA Controller ++ 1301 XDX130 Audio Controller ++ 1400 XDX140 Graphic/VGA Controller ++ 1401 XDX140 Audio Controller ++ 1500 XDX150 Graphic/VGA Controller ++ 1501 XDX150 Audio Controller ++ 1600 XDX160 Graphic/VGA Controller ++ 1601 XDX160 Audio Controller ++ 1700 XDX170 Graphic/VGA Controller ++ 1701 XDX170 Audio Controller ++ 1800 XDX180 Graphic/VGA Controller ++ 1801 XDX180 Audio Controller ++ 1900 XDX190 Graphic/VGA Controller ++ 1901 XDX190 Audio Controller + 1efb Flexxon Pte Ltd + 1f02 Beijing Dayu Technology + 1f03 Shenzhen Shichuangyi Electronics Co., Ltd +@@ -25247,6 +25278,8 @@ + 5168 Animation Technologies Inc. + 0300 FlyDVB-S + 0301 FlyDVB-T ++51d8 Alder Lake-P Serial IO I2C Controller #2 ++51d9 Alder Lake-P Serial IO I2C Controller #3 + 5301 Alliance Semiconductor Corp. + 0001 ProMotion aT3D + 5333 S3 Graphics Ltd. +@@ -25466,6 +25499,8 @@ + 6766 Glenfly Tech Co., Ltd. + 3d00 Arise-GT-10C0 + 3d02 Arise 1020 ++ 3d03 Arise-GT-1040 ++ 3d04 Arise1010 + 3d40 Arise-GT-10C0 High Definition Audio Controller + 3d41 Arise 1020 High Definition Audio Controller + 6899 ZT Systems +@@ -27357,6 +27392,7 @@ + 124e Ethernet Connection E823-L/X557-AT 10GBASE-T + 124f Ethernet Connection E823-L 1GbE + 1250 430HX - 82439HX TXC [Triton II] ++ 125b Ethernet Controller I226-LM + 1360 82806AA PCI64 Hub PCI Bridge + 1361 82806AA PCI64 Hub Controller (HRes) + 8086 1361 82806AA PCI64 Hub Controller (HRes) +@@ -27569,7 +27605,7 @@ + 8086 0001 Ethernet Server Bypass Adapter X520-SR2 + 8086 0002 Ethernet Server Bypass Adapter X520-LR2 + 1560 Ethernet Controller X540 +- 1563 Ethernet Controller 10G X550T ++ 1563 Ethernet Controller X550 + 1028 1fa8 Ethernet 10G 4P X550/I350 rNDC + 1028 1fa9 Ethernet 10G 4P X550 rNDC + 1137 02b2 X550-TX 10 Gig LOM +@@ -27773,6 +27809,7 @@ + 8086 000f Ethernet Network Adapter E810-C-Q2T + 8086 0010 Ethernet 100G 2P E810-C-stg Adapter + 8086 0011 Ethernet Network Adapter E810-C-Q1 for OCP3.0 ++ 8086 0012 Ethernet 100G 2P E810-C-st Adapter + 1593 Ethernet Controller E810-C for SFP + 1137 02c3 E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC + 1137 02e9 E810XXVDA4TG 4x25/10 GbE SFP28 PCIe NIC +@@ -27964,6 +28001,11 @@ + 163d Broadwell-U Integrated Graphics + 163e Broadwell-U Integrated Graphics + 1889 Ethernet Adaptive Virtual Function ++ 188a Ethernet Connection E823-C for backplane ++ 188b Ethernet Connection E823-C for QSFP ++ 188c Ethernet Connection E823-C for SFP ++ 188d Ethernet Connection E823-C/X557-AT 10GBASE-T ++ 188e Ethernet Connection E823-C 1GbE + 1890 Ethernet Connection E822-C for backplane + 1891 Ethernet Connection E822-C for QSFP + 1892 Ethernet Connection E822-C for SFP +@@ -32420,6 +32462,8 @@ + 51c6 Alder Lake-P Serial IO I2C Controller #1 + 51c8 Alder Lake PCH-P High Definition Audio Controller + 51d3 Alder Lake-P SATA AHCI Controller ++ 51d8 Alder Lake-P Serial IO I2C Controller #2 ++ 51d9 Alder Lake-P Serial IO I2C Controller #3 + 51e0 Alder Lake PCH HECI Controller + 51e8 Alder Lake PCH Serial IO I2C Controller #0 + 51e9 Alder Lake PCH Serial IO I2C Controller #1 +@@ -32437,7 +32481,6 @@ + 8086 0001 EtherExpress PRO/100 Server Ethernet Adapter + 530d 80310 (IOP) IO Processor + 5502 Ethernet Controller (2) I225-LMvP +- 5504 Ethernet Controller I226-K + 5845 QEMU NVM Express Controller + 1af4 1100 QEMU Virtual Machine + 5900 Xeon E3-1200 v6/7th Gen Core Processor Host Bridge/DRAM Registers +diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids +index 8e19afff93..9342f7c331 100644 +--- a/hwdb.d/usb.ids ++++ b/hwdb.d/usb.ids +@@ -9,8 +9,8 @@ + # The latest version can be obtained from + # http://www.linux-usb.org/usb.ids + # +-# Version: 2022.04.13 +-# Date: 2022-04-13 20:34:10 ++# Version: 2022.05.03 ++# Date: 2022-05-03 20:34:10 + # + + # Vendors, devices and interfaces. Please keep sorted. +@@ -22333,13 +22333,15 @@ + 5440 TimVideos' HDMI2USB Opsis (FX2) - Unconfigured device + 5441 TimVideos' HDMI2USB Opsis (FX2) - Firmware load/upgrade + 5442 TimVideos' HDMI2USB Opsis (FX2) - HDMI/DVI Capture Device +-2a1d Oxford Nanopore Technologies, Ltd ++2a1d Oxford Nanopore Technologies plc + 0000 MinION + 0001 MinION + 0010 VolTRAX + 0011 VolTRAX + 0020 GridION + 0021 GridION ++ 0120 GridION Mk1 Bay ++ 0121 GridION Mk1 Bay + 2a37 RTD Embedded Technologies, Inc. + 5110 UPS35110/UPS25110 + 2a39 RME diff --git a/SOURCES/0313-hwdb-add-rammus-accelerometer-support.patch b/SOURCES/0313-hwdb-add-rammus-accelerometer-support.patch new file mode 100644 index 0000000..7d4ae75 --- /dev/null +++ b/SOURCES/0313-hwdb-add-rammus-accelerometer-support.patch @@ -0,0 +1,27 @@ +From be69b550c85a1882afd01daa24407272ff891bf0 Mon Sep 17 00:00:00 2001 +From: lucagoc <77584602+lucagoc@users.noreply.github.com> +Date: Sat, 7 May 2022 18:30:22 +0200 +Subject: [PATCH] hwdb: add rammus accelerometer support + +(cherry picked from commit 97d670a4297d4d3ffd21748b70c1a669a67d4e0f) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 70759145a8..d883db22a1 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -395,6 +395,10 @@ sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnVayne*:* + sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:* + ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 + ++# rammus board (Asus Chromebook Flip C433) ++sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnRammus*:* ++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 ++ + ######################################### + # GP-electronic + ######################################### diff --git a/SOURCES/0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch b/SOURCES/0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch new file mode 100644 index 0000000..141247b --- /dev/null +++ b/SOURCES/0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch @@ -0,0 +1,56 @@ +From fab29ebaa62cfae9f56a7a108b35d17e4d2a16cd Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +Date: Mon, 9 May 2022 20:16:22 -0500 +Subject: [PATCH] Add support to set autosuspend delay via hwdb + +(cherry picked from commit fa9a43a6905187195c9e86a61a906647726c3e55) + +Related: #2087778 +--- + hwdb.d/60-autosuspend.hwdb | 4 ++++ + hwdb.d/parse_hwdb.py | 1 + + rules.d/60-autosuspend.rules | 4 ++++ + 3 files changed, 9 insertions(+) + +diff --git a/hwdb.d/60-autosuspend.hwdb b/hwdb.d/60-autosuspend.hwdb +index 1b6c1e1c8f..323611d000 100644 +--- a/hwdb.d/60-autosuspend.hwdb ++++ b/hwdb.d/60-autosuspend.hwdb +@@ -24,8 +24,12 @@ + # + # Allowed properties are: + # ID_AUTOSUSPEND=1 ++# ID_AUTOSUSPEND_DELAY_MS=#### + # ID_PERSIST=0 + # ++# ID_AUTOSUSPEND_DELAY_MS adjusts the delay for autosuspend to something ++# different than the kernel default of 2000ms. ++# + # ID_PERSIST=0 allows disabling the kernels USB "persist" feature, which allows + # the continued use of devices after a power loss (due to suspend). Disable it + # if the device will loose state without a USB power session and the driver +diff --git a/hwdb.d/parse_hwdb.py b/hwdb.d/parse_hwdb.py +index 93179b675c..7bad559699 100755 +--- a/hwdb.d/parse_hwdb.py ++++ b/hwdb.d/parse_hwdb.py +@@ -135,6 +135,7 @@ def property_grammar(): + ('MOUSE_WHEEL_CLICK_COUNT', INTEGER), + ('MOUSE_WHEEL_CLICK_COUNT_HORIZONTAL', INTEGER), + ('ID_AUTOSUSPEND', Or((Literal('0'), Literal('1')))), ++ ('ID_AUTOSUSPEND_DELAY_MS', INTEGER), + ('ID_AV_PRODUCTION_CONTROLLER', Or((Literal('0'), Literal('1')))), + ('ID_PERSIST', Or((Literal('0'), Literal('1')))), + ('ID_PDA', Or((Literal('0'), Literal('1')))), +diff --git a/rules.d/60-autosuspend.rules b/rules.d/60-autosuspend.rules +index 332d052caa..ce31a920ed 100644 +--- a/rules.d/60-autosuspend.rules ++++ b/rules.d/60-autosuspend.rules +@@ -15,4 +15,8 @@ ENV{ID_AUTOSUSPEND}=="1", TEST=="power/control", \ + ENV{ID_PERSIST}=="0", TEST=="power/persist", \ + ATTR{power/persist}="0" + ++# Set up an autosuspend delay if hwdb say so ++ENV{ID_AUTOSUSPEND_DELAY_MS}!="", TEST=="power/control", \ ++ ATTR{power/autosuspend_delay_ms}="$env{ID_AUTOSUSPEND_DELAY_MS}" ++ + LABEL="autosuspend_end" diff --git a/SOURCES/0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch b/SOURCES/0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch new file mode 100644 index 0000000..457bf93 --- /dev/null +++ b/SOURCES/0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch @@ -0,0 +1,47 @@ +From fd6e7c8949218df6b61a5b9186aba3f9d1d91f75 Mon Sep 17 00:00:00 2001 +From: Mario Limonciello +Date: Mon, 9 May 2022 20:16:26 -0500 +Subject: [PATCH] Set autosuspend delay for Fibocom LG850-GL + +It has been shown that the autosuspend delay for this device enacted +by modem manager will race with suspend and cause system suspend +failures. + +This occurred in ChromiumOS on a chromebook, but there is no reason +it won't happen in regular notebooks with the same WWAN. To avoid +the failure delay autosuspend to a frequency longer than the polling +rate used by modem manager. + +Link: https://chromium-review.googlesource.com/c/chromiumos/overlays/board-overlays/+/3635003 +Link: https://github.com/freedesktop/ModemManager/blob/43e76bf1bbca8207e37d3fbddfed4bb8578f0170/src/mm-iface-modem.c#L1633 +(cherry picked from commit f32049eda3b06deaae3d6d7d06a9dfd16528c443) + +Related: #2087778 +--- + hwdb.d/60-autosuspend.hwdb | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/60-autosuspend.hwdb b/hwdb.d/60-autosuspend.hwdb +index 323611d000..07f7fa9344 100644 +--- a/hwdb.d/60-autosuspend.hwdb ++++ b/hwdb.d/60-autosuspend.hwdb +@@ -75,13 +75,18 @@ usb:v0627p0001:*QEMU USB Tablet* + ID_AUTOSUSPEND=1 + + ######################################### +-# Sierra Wireless ++# WWAN + ######################################### + + # Sierra Wireless EM7345 4G LTE modem + usb:v1199pA001* + ID_AUTOSUSPEND=1 + ++# Fibocom LG850-GL ++usb:v2CB7p0007* ++ ID_AUTOSUSPEND=1 ++ ID_AUTOSUSPEND_DELAY_MS=7000 ++ + ######################################### + # Wacom + ######################################### diff --git a/SOURCES/0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch b/SOURCES/0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch new file mode 100644 index 0000000..5b228ca --- /dev/null +++ b/SOURCES/0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch @@ -0,0 +1,32 @@ +From bb13a4603d6e25e792836598b7f0aa21e42cd08e Mon Sep 17 00:00:00 2001 +From: Yutsuten +Date: Tue, 10 May 2022 00:01:20 +0900 +Subject: [PATCH] Add HUION Inspiroy H420X to hwdb + +(cherry picked from commit ffa3da1dc20f8f3edb341a7476a82883fe40f3a6) + +Related: #2087778 +--- + hwdb.d/60-evdev.hwdb | 9 +++++++++ + 1 file changed, 9 insertions(+) + +diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb +index a7fbf2ad4d..2d1751b478 100644 +--- a/hwdb.d/60-evdev.hwdb ++++ b/hwdb.d/60-evdev.hwdb +@@ -378,6 +378,15 @@ evdev:name:SynPS/2 Synaptics TouchPad:*svnHP:pnHPENVYx360Convertible15m-cn0xxx:* + EVDEV_ABS_35=1302:5640:36 + EVDEV_ABS_36=1119:4741:61 + ++######################################### ++# HUION ++######################################### ++ ++# HUION Inpiroy H420X ++evdev:input:b0003v256Cp0064* ++ EVDEV_ABS_00=::200 ++ EVDEV_ABS_01=::200 ++ + ######################################### + # Lenovo + ######################################### diff --git a/SOURCES/0317-hwdb-run-update-hwdb-for-v251-rc3.patch b/SOURCES/0317-hwdb-run-update-hwdb-for-v251-rc3.patch new file mode 100644 index 0000000..ac1cd64 --- /dev/null +++ b/SOURCES/0317-hwdb-run-update-hwdb-for-v251-rc3.patch @@ -0,0 +1,8955 @@ +From c6c9674865c39e4595751d6211a3d1a25e190650 Mon Sep 17 00:00:00 2001 +From: Luca Boccassi +Date: Fri, 13 May 2022 17:17:33 +0100 +Subject: [PATCH] hwdb: run 'update-hwdb' for v251-rc3 + +(cherry picked from commit caddab0f04a8ba5f6367a7dc2477c7938134ca8e) + +Related: #2087778 +--- + hwdb.d/20-OUI.hwdb | 221 +- + hwdb.d/20-acpi-vendor.hwdb.patch | 4 +- + hwdb.d/20-pci-vendor-model.hwdb | 294 ++- + hwdb.d/20-usb-vendor-model.hwdb | 18 + + hwdb.d/ma-large.txt | 3558 ++++++++++++++++-------------- + hwdb.d/ma-medium.txt | 534 ++--- + hwdb.d/ma-small.txt | 648 +++--- + hwdb.d/pci.ids | 112 +- + hwdb.d/usb.ids | 10 +- + 9 files changed, 3193 insertions(+), 2206 deletions(-) + +diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb +index ab3afc31b2..d9d17f4b2c 100644 +--- a/hwdb.d/20-OUI.hwdb ++++ b/hwdb.d/20-OUI.hwdb +@@ -7506,7 +7506,7 @@ OUI:0009DE* + ID_OUI_FROM_DATABASE=Samjin Information & Communications Co., Ltd. + + OUI:0009DF* +- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş. ++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S. + + OUI:0009E0* + ID_OUI_FROM_DATABASE=XEMICS S.A. +@@ -39530,6 +39530,9 @@ OUI:00FA3B* + OUI:00FAB6* + ID_OUI_FROM_DATABASE=Kontakt Micro-Location Sp z o.o. + ++OUI:00FBF9* ++ ID_OUI_FROM_DATABASE=Axiado Corporation ++ + OUI:00FC58* + ID_OUI_FROM_DATABASE=WebSilicon Ltd. + +@@ -39698,6 +39701,9 @@ OUI:0417B6* + OUI:04180F* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:041892* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:0418B6* + ID_OUI_FROM_DATABASE=Private + +@@ -39932,6 +39938,9 @@ OUI:0456E5* + OUI:04572F* + ID_OUI_FROM_DATABASE=Sertel Electronics UK Ltd + ++OUI:045747* ++ ID_OUI_FROM_DATABASE=GoPro ++ + OUI:04586F* + ID_OUI_FROM_DATABASE=Sichuan Whayer information industry Co.,LTD + +@@ -40325,6 +40334,9 @@ OUI:04BD97* + OUI:04BDBF* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:04BF1B* ++ ID_OUI_FROM_DATABASE=Dell Inc. ++ + OUI:04BF6D* + ID_OUI_FROM_DATABASE=Zyxel Communications Corporation + +@@ -41288,6 +41300,9 @@ OUI:08184C* + OUI:0819A6* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:081A1E* ++ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD ++ + OUI:081C6E* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + +@@ -44864,6 +44879,9 @@ OUI:14612F* + OUI:146308* + ID_OUI_FROM_DATABASE=JABIL CIRCUIT (SHANGHAI) LTD. + ++OUI:14656A* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:1466B7* + ID_OUI_FROM_DATABASE=Advanced Design Technology Pty Ltd + +@@ -46776,7 +46794,7 @@ OUI:1C234F* + ID_OUI_FROM_DATABASE=EDMI Europe Ltd + + OUI:1C24CD* +- ID_OUI_FROM_DATABASE=Askey Computer Corp. ++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP + + OUI:1C24EB* + ID_OUI_FROM_DATABASE=Burlywood +@@ -46808,6 +46826,9 @@ OUI:1C2E1B* + OUI:1C3008* + ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD + ++OUI:1C3283* ++ ID_OUI_FROM_DATABASE=COMTTI Intelligent Technology(Shenzhen) Co., Ltd. ++ + OUI:1C330E* + ID_OUI_FROM_DATABASE=PernixData + +@@ -52679,15 +52700,30 @@ OUI:303D511* + OUI:303D512* + ID_OUI_FROM_DATABASE=Harman Connected Services Corporation India Pvt. Ltd. + ++OUI:303D513* ++ ID_OUI_FROM_DATABASE=S & A Systems ++ ++OUI:303D514* ++ ID_OUI_FROM_DATABASE=Dspread Technology (Beijing) Inc. ++ + OUI:303D515* + ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd. + + OUI:303D518* + ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam + ++OUI:303D519* ++ ID_OUI_FROM_DATABASE=Annapurna labs ++ + OUI:303D51A* + ID_OUI_FROM_DATABASE=TeraNXT Global India Pvt Ltd. + ++OUI:303D51B* ++ ID_OUI_FROM_DATABASE=Labman Automation ++ ++OUI:303D51D* ++ ID_OUI_FROM_DATABASE=XOR UK Corporation Limited ++ + OUI:303EA7* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -56642,6 +56678,9 @@ OUI:3CA6F6* + OUI:3CA72B* + ID_OUI_FROM_DATABASE=MRV Communications (Networks) LTD + ++OUI:3CA7AE* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:3CA82A* + ID_OUI_FROM_DATABASE=Hewlett Packard + +@@ -58571,6 +58610,9 @@ OUI:44700B* + OUI:447098* + ID_OUI_FROM_DATABASE=MING HONG TECHNOLOGY (SHEN ZHEN) LIMITED + ++OUI:447147* ++ ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co.,Ltd ++ + OUI:4473D6* + ID_OUI_FROM_DATABASE=Logitech + +@@ -59258,6 +59300,9 @@ OUI:481A84* + OUI:481BD2* + ID_OUI_FROM_DATABASE=Intron Scientific co., ltd. + ++OUI:481CB9* ++ ID_OUI_FROM_DATABASE=SZ DJI TECHNOLOGY CO.,LTD ++ + OUI:481D70* + ID_OUI_FROM_DATABASE=Cisco SPVTG + +@@ -59574,7 +59619,7 @@ OUI:486B91* + ID_OUI_FROM_DATABASE=Fleetwood Group Inc. + + OUI:486DBB* +- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş. ++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S. + + OUI:486E70* + ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd. +@@ -59693,6 +59738,9 @@ OUI:4889E7* + OUI:488AD2* + ID_OUI_FROM_DATABASE=MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. + ++OUI:488AE8* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:488B0A* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -60279,7 +60327,7 @@ OUI:4C3488* + ID_OUI_FROM_DATABASE=Intel Corporate + + OUI:4C364E* +- ID_OUI_FROM_DATABASE=Panasonic Corporation Connected Solutions Company ++ ID_OUI_FROM_DATABASE=Panasonic Connect Co., Ltd. + + OUI:4C38D5* + ID_OUI_FROM_DATABASE=MITAC COMPUTING TECHNOLOGY CORPORATION +@@ -60461,6 +60509,9 @@ OUI:4C627B* + OUI:4C6371* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:4C63AD* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:4C63EB* + ID_OUI_FROM_DATABASE=Application Solutions (Electronics and Vision) Ltd + +@@ -61496,6 +61547,9 @@ OUI:503E7C* + OUI:503EAA* + ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD. + ++OUI:503F50* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:503F56* + ID_OUI_FROM_DATABASE=Syncmold Enterprise Corp + +@@ -61635,7 +61689,7 @@ OUI:505DAC* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + + OUI:505FB5* +- ID_OUI_FROM_DATABASE=Askey Computer Corp. ++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP + + OUI:506028* + ID_OUI_FROM_DATABASE=Xirrus Inc. +@@ -61700,6 +61754,9 @@ OUI:506255E* + OUI:506313* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:506391* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:50642B* + ID_OUI_FROM_DATABASE=XIAOMI Electronics,CO.,LTD + +@@ -63539,6 +63596,9 @@ OUI:582F42* + OUI:582FF7* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS + ++OUI:58305B* ++ ID_OUI_FROM_DATABASE=Shanghai Junqian Sensing Technology Co.,LTD ++ + OUI:583112* + ID_OUI_FROM_DATABASE=DRUST + +@@ -64370,6 +64430,9 @@ OUI:5C0339* + OUI:5C045A* + ID_OUI_FROM_DATABASE=Company NA Stage & Light + ++OUI:5C0758* ++ ID_OUI_FROM_DATABASE=Ufispace Co., LTD. ++ + OUI:5C076F* + ID_OUI_FROM_DATABASE=Thought Creator + +@@ -69131,6 +69194,9 @@ OUI:6CB6CA* + OUI:6CB749* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:6CB7E2* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:6CB7F4* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + +@@ -69455,6 +69521,9 @@ OUI:70105C* + OUI:70106F* + ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise + ++OUI:70110E* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:701124* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -69774,7 +69843,7 @@ OUI:705425* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + + OUI:7054B4* +- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş. ++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S. + + OUI:7054D2* + ID_OUI_FROM_DATABASE=PEGATRON CORPORATION +@@ -70157,6 +70226,9 @@ OUI:709BA5* + OUI:709BFC* + ID_OUI_FROM_DATABASE=Bryton Inc. + ++OUI:709C45* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:709C8F* + ID_OUI_FROM_DATABASE=Nero AG + +@@ -83486,6 +83558,9 @@ OUI:749D8F* + OUI:749DDC* + ID_OUI_FROM_DATABASE=2Wire Inc + ++OUI:749E75* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:749EA5* + ID_OUI_FROM_DATABASE=OHSUNG + +@@ -84353,6 +84428,9 @@ OUI:785B64* + OUI:785C28* + ID_OUI_FROM_DATABASE=Prime Motion Inc. + ++OUI:785C5E* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:785C72* + ID_OUI_FROM_DATABASE=Hioso Technology Co., Ltd. + +@@ -86903,6 +86981,9 @@ OUI:80618F* + OUI:806459* + ID_OUI_FROM_DATABASE=Nimbus Inc. + ++OUI:80646F* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:80647A* + ID_OUI_FROM_DATABASE=Ola Sense Inc + +@@ -89553,7 +89634,7 @@ OUI:88DD79* + ID_OUI_FROM_DATABASE=Voltaire + + OUI:88DE7C* +- ID_OUI_FROM_DATABASE=Askey Computer Corp. ++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP + + OUI:88DEA9* + ID_OUI_FROM_DATABASE=Roku, Inc. +@@ -89909,6 +89990,9 @@ OUI:8C1F6401A* + OUI:8C1F6401E* + ID_OUI_FROM_DATABASE=SCIREQ Scientific Respiratory Equipment Inc + ++OUI:8C1F64043* ++ ID_OUI_FROM_DATABASE=AperNet, LLC ++ + OUI:8C1F64045* + ID_OUI_FROM_DATABASE=VEILUX INC. + +@@ -89945,6 +90029,9 @@ OUI:8C1F6408B* + OUI:8C1F6408F* + ID_OUI_FROM_DATABASE=AixControl GmbH + ++OUI:8C1F64098* ++ ID_OUI_FROM_DATABASE=Agvolution GmbH ++ + OUI:8C1F64099* + ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd + +@@ -89993,6 +90080,9 @@ OUI:8C1F640E6* + OUI:8C1F640EA* + ID_OUI_FROM_DATABASE=SmartSky Networks LLC + ++OUI:8C1F640EF* ++ ID_OUI_FROM_DATABASE=DAVE SRL ++ + OUI:8C1F640F0* + ID_OUI_FROM_DATABASE=Xylon + +@@ -90455,6 +90545,9 @@ OUI:8C1F6453F* + OUI:8C1F64542* + ID_OUI_FROM_DATABASE=Landis+Gyr Equipamentos de Medição Ltda + ++OUI:8C1F64544* ++ ID_OUI_FROM_DATABASE=Tinkerbee Innovations Private Limited ++ + OUI:8C1F64549* + ID_OUI_FROM_DATABASE=Brad Technology + +@@ -90506,6 +90599,9 @@ OUI:8C1F645B3* + OUI:8C1F645BC* + ID_OUI_FROM_DATABASE=HEITEC AG + ++OUI:8C1F645CB* ++ ID_OUI_FROM_DATABASE=dinosys ++ + OUI:8C1F645D3* + ID_OUI_FROM_DATABASE=Eloy Water + +@@ -90596,6 +90692,9 @@ OUI:8C1F6467F* + OUI:8C1F64683* + ID_OUI_FROM_DATABASE=SLAT + ++OUI:8C1F64685* ++ ID_OUI_FROM_DATABASE=Sanchar Communication Systems ++ + OUI:8C1F64697* + ID_OUI_FROM_DATABASE=Sontay Ltd. + +@@ -90629,6 +90728,9 @@ OUI:8C1F646CD* + OUI:8C1F646CF* + ID_OUI_FROM_DATABASE=Italora + ++OUI:8C1F646D5* ++ ID_OUI_FROM_DATABASE=HTK Hamburg GmbH ++ + OUI:8C1F646E3* + ID_OUI_FROM_DATABASE=ViewSonic International Corporation + +@@ -90755,6 +90857,9 @@ OUI:8C1F647B8* + OUI:8C1F647B9* + ID_OUI_FROM_DATABASE=Deviceroy + ++OUI:8C1F647BC* ++ ID_OUI_FROM_DATABASE=GO development GmbH ++ + OUI:8C1F647C8* + ID_OUI_FROM_DATABASE=Jacquet Dechaume + +@@ -90770,6 +90875,9 @@ OUI:8C1F647D3* + OUI:8C1F647D6* + ID_OUI_FROM_DATABASE=Algodue Elettronica Srl + ++OUI:8C1F647D8* ++ ID_OUI_FROM_DATABASE=HIROSAWA ELECTRIC Co.,Ltd. ++ + OUI:8C1F647DD* + ID_OUI_FROM_DATABASE=TAKASAKI KYODO COMPUTING CENTER Co.,LTD. + +@@ -90833,6 +90941,9 @@ OUI:8C1F64883* + OUI:8C1F6488D* + ID_OUI_FROM_DATABASE=Pantherun Technologies Pvt Ltd + ++OUI:8C1F64890* ++ ID_OUI_FROM_DATABASE=WonATech Co., Ltd. ++ + OUI:8C1F64892* + ID_OUI_FROM_DATABASE=MDI Industrial + +@@ -90905,6 +91016,9 @@ OUI:8C1F64909* + OUI:8C1F6490E* + ID_OUI_FROM_DATABASE=Xacti Corporation + ++OUI:8C1F6490F* ++ ID_OUI_FROM_DATABASE=BELIMO Automation AG ++ + OUI:8C1F64911* + ID_OUI_FROM_DATABASE=EOLANE + +@@ -90926,6 +91040,9 @@ OUI:8C1F64939* + OUI:8C1F64943* + ID_OUI_FROM_DATABASE=Autark GmbH + ++OUI:8C1F64946* ++ ID_OUI_FROM_DATABASE=UniJet Co., Ltd. ++ + OUI:8C1F64947* + ID_OUI_FROM_DATABASE=LLC TC Vympel + +@@ -91133,6 +91250,9 @@ OUI:8C1F64B0C* + OUI:8C1F64B10* + ID_OUI_FROM_DATABASE=MTU Aero Engines AG + ++OUI:8C1F64B13* ++ ID_OUI_FROM_DATABASE=Abode Systems Inc ++ + OUI:8C1F64B22* + ID_OUI_FROM_DATABASE=BLIGHTER SURVEILLANCE SYSTEMS LTD + +@@ -91250,6 +91370,9 @@ OUI:8C1F64C28* + OUI:8C1F64C2F* + ID_OUI_FROM_DATABASE=Power Electronics Espana, S.L. + ++OUI:8C1F64C35* ++ ID_OUI_FROM_DATABASE=Peter Huber Kaeltemaschinenbau AG ++ + OUI:8C1F64C38* + ID_OUI_FROM_DATABASE=ECO-ADAPT + +@@ -91301,6 +91424,9 @@ OUI:8C1F64CA6* + OUI:8C1F64CAD* + ID_OUI_FROM_DATABASE=General Motors + ++OUI:8C1F64CAF* ++ ID_OUI_FROM_DATABASE=BRS Sistemas Eletrônicos ++ + OUI:8C1F64CBE* + ID_OUI_FROM_DATABASE=Circa Enterprises Inc + +@@ -92831,6 +92957,9 @@ OUI:9023B4* + OUI:9023EC* + ID_OUI_FROM_DATABASE=Availink, Inc. + ++OUI:9025F2* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:90272B* + ID_OUI_FROM_DATABASE=Algorab S.r.l. + +@@ -94289,6 +94418,9 @@ OUI:949FB4* + OUI:94A04E* + ID_OUI_FROM_DATABASE=Bostex Technology Co., LTD + ++OUI:94A07D* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:94A1A2* + ID_OUI_FROM_DATABASE=AMPAK Technology, Inc. + +@@ -95288,6 +95420,9 @@ OUI:986022* + OUI:9860CA* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:986610* ++ ID_OUI_FROM_DATABASE=zte corporation ++ + OUI:9866EA* + ID_OUI_FROM_DATABASE=Industrial Control Communications, Inc. + +@@ -95498,6 +95633,9 @@ OUI:9880BBE* + OUI:9880EE* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:98818A* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:988217* + ID_OUI_FROM_DATABASE=Disruptive Ltd + +@@ -97421,6 +97559,9 @@ OUI:A02D13* + OUI:A02EF3* + ID_OUI_FROM_DATABASE=United Integrated Services Co., Led. + ++OUI:A03131* ++ ID_OUI_FROM_DATABASE=Procenne Digital Security ++ + OUI:A031DB* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -100214,6 +100355,9 @@ OUI:A8A668* + OUI:A8A795* + ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd. + ++OUI:A8AA7C* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:A8ABB5* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -100358,6 +100502,9 @@ OUI:A8DA0C* + OUI:A8DB03* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + ++OUI:A8DC5A* ++ ID_OUI_FROM_DATABASE=Digital Watchdog ++ + OUI:A8DE68* + ID_OUI_FROM_DATABASE=Beijing Wide Technology Co.,Ltd + +@@ -100682,6 +100829,9 @@ OUI:AC2DA9* + OUI:AC2FA8* + ID_OUI_FROM_DATABASE=Humannix Co.,Ltd. + ++OUI:AC3184* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:AC319D* + ID_OUI_FROM_DATABASE=Shenzhen TG-NET Botone Technology Co.,Ltd. + +@@ -101243,6 +101393,9 @@ OUI:ACB566* + OUI:ACB57D* + ID_OUI_FROM_DATABASE=Liteon Technology Corporation + ++OUI:ACB687* ++ ID_OUI_FROM_DATABASE=Arcadyan Corporation ++ + OUI:ACB74F* + ID_OUI_FROM_DATABASE=METEL s.r.o. + +@@ -101939,6 +102092,9 @@ OUI:B0761B* + OUI:B077AC* + ID_OUI_FROM_DATABASE=ARRIS Group, Inc. + ++OUI:B07839* ++ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd. ++ + OUI:B07870* + ID_OUI_FROM_DATABASE=Wi-NEXT, Inc. + +@@ -103340,6 +103496,9 @@ OUI:B4C170* + OUI:B4C26A* + ID_OUI_FROM_DATABASE=Garmin International + ++OUI:B4C2F7* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:B4C44E* + ID_OUI_FROM_DATABASE=VXL eTech Pvt Ltd + +@@ -103653,7 +103812,7 @@ OUI:B81F5E* + ID_OUI_FROM_DATABASE=Apption Labs Limited + + OUI:B8208E* +- ID_OUI_FROM_DATABASE=Panasonic Corporation Connected Solutions Company ++ ID_OUI_FROM_DATABASE=Panasonic Connect Co., Ltd. + + OUI:B820E7* + ID_OUI_FROM_DATABASE=Guangzhou Horizontal Information & Network Integration Co. Ltd +@@ -105899,6 +106058,9 @@ OUI:C06DED* + OUI:C07009* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:C071AA* ++ ID_OUI_FROM_DATABASE=ShenZhen OnMicro Electronics Co.,Ltd. ++ + OUI:C0742B* + ID_OUI_FROM_DATABASE=SHENZHEN XUNLONG SOFTWARE CO.,LIMITED + +@@ -107048,6 +107210,9 @@ OUI:C474F8* + OUI:C475AB* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:C475EA* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:C477AB* + ID_OUI_FROM_DATABASE=Beijing ASU Tech Co.,Ltd + +@@ -108164,6 +108329,9 @@ OUI:C88439* + OUI:C88447* + ID_OUI_FROM_DATABASE=Beautiful Enterprise Co., Ltd + ++OUI:C8848C* ++ ID_OUI_FROM_DATABASE=Ruckus Wireless ++ + OUI:C884A1* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + +@@ -109373,6 +109541,9 @@ OUI:CC9635* + OUI:CC96A0* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:CC96E5* ++ ID_OUI_FROM_DATABASE=Dell Inc. ++ + OUI:CC988B* + ID_OUI_FROM_DATABASE=SONY Visual Products Inc. + +@@ -109481,6 +109652,9 @@ OUI:CCB8A8* + OUI:CCB8F1* + ID_OUI_FROM_DATABASE=EAGLE KINGDOM TECHNOLOGIES LIMITED + ++OUI:CCBA6F* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:CCBBFE* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -109695,7 +109869,7 @@ OUI:CCD39DE* + ID_OUI_FROM_DATABASE=Shanghai tongli information technology co. LTD + + OUI:CCD3C1* +- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş. ++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S. + + OUI:CCD3E2* + ID_OUI_FROM_DATABASE=Jiangsu Yinhe Electronics Co.,Ltd. +@@ -113678,6 +113852,9 @@ OUI:DCA971* + OUI:DCA989* + ID_OUI_FROM_DATABASE=MACANDC + ++OUI:DCAA43* ++ ID_OUI_FROM_DATABASE=Shenzhen Terca Information Technology Co., Ltd. ++ + OUI:DCAD9E* + ID_OUI_FROM_DATABASE=GreenPriz + +@@ -113834,6 +114011,9 @@ OUI:DCDA4F* + OUI:DCDA80* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + ++OUI:DCDB27* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:DCDB70* + ID_OUI_FROM_DATABASE=Tonfunk Systementwicklung und Service GmbH + +@@ -114332,6 +114512,9 @@ OUI:E056F4* + OUI:E0589E* + ID_OUI_FROM_DATABASE=Laerdal Medical + ++OUI:E05A1B* ++ ID_OUI_FROM_DATABASE=Espressif Inc. ++ + OUI:E05A9F0* + ID_OUI_FROM_DATABASE=Annapurna labs + +@@ -116624,6 +116807,9 @@ OUI:E8A1F8* + OUI:E8A245* + ID_OUI_FROM_DATABASE=Juniper Networks + ++OUI:E8A34E* ++ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD ++ + OUI:E8A364* + ID_OUI_FROM_DATABASE=Signal Path International / Peachtree Audio + +@@ -117684,7 +117870,7 @@ OUI:ECBD1D* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + + OUI:ECBE5F* +- ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.Ş. ++ ID_OUI_FROM_DATABASE=Vestel Elektronik San ve Tic. A.S. + + OUI:ECBEDD* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS +@@ -117788,6 +117974,9 @@ OUI:ECE512* + OUI:ECE555* + ID_OUI_FROM_DATABASE=Hirschmann Automation + ++OUI:ECE61D* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:ECE6A2* + ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD + +@@ -119123,6 +119312,9 @@ OUI:F419E2* + OUI:F41BA1* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:F41C71* ++ ID_OUI_FROM_DATABASE=SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD ++ + OUI:F41C95* + ID_OUI_FROM_DATABASE=BEIJING YUNYI TIMES TECHNOLOGY CO,.LTD + +@@ -119828,6 +120020,9 @@ OUI:F4B898* + OUI:F4B8A7* + ID_OUI_FROM_DATABASE=zte corporation + ++OUI:F4BBC7* ++ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd. ++ + OUI:F4BC97* + ID_OUI_FROM_DATABASE=Shenzhen Crave Communication Co., LTD + +@@ -121301,6 +121496,9 @@ OUI:FC0647* + OUI:FC06ED* + ID_OUI_FROM_DATABASE=M2Motive Technology Inc. + ++OUI:FC0736* ++ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. ++ + OUI:FC07A0* + ID_OUI_FROM_DATABASE=LRE Medical GmbH + +@@ -121349,6 +121547,9 @@ OUI:FC1193* + OUI:FC122C* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + ++OUI:FC1263* ++ ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP ++ + OUI:FC1349* + ID_OUI_FROM_DATABASE=Global Apps Corp. + +diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch +index a696119753..35f3430268 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb.patch ++++ b/hwdb.d/20-acpi-vendor.hwdb.patch +@@ -1,5 +1,5 @@ +---- 20-acpi-vendor.hwdb.base 2022-05-05 16:21:43.499198786 +0200 +-+++ 20-acpi-vendor.hwdb 2022-05-05 16:21:43.513198949 +0200 ++--- 20-acpi-vendor.hwdb.base 2022-05-13 17:14:22.098059674 +0100 +++++ 20-acpi-vendor.hwdb 2022-05-13 17:14:22.102059756 +0100 + @@ -3,6 +3,8 @@ + # Data imported from: + # https://uefi.org/uefi-pnp-export +diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb +index cae426479b..926247eefc 100644 +--- a/hwdb.d/20-pci-vendor-model.hwdb ++++ b/hwdb.d/20-pci-vendor-model.hwdb +@@ -122,6 +122,12 @@ pci:v0000018Ad00000106* + pci:v000001DE* + ID_VENDOR_FROM_DATABASE=Oxide Computer Company + ++pci:v000001DEd00000000* ++ ID_MODEL_FROM_DATABASE=Propolis NVMe Controller ++ ++pci:v000001DEd00000001* ++ ID_MODEL_FROM_DATABASE=Propolis xHCI Controller ++ + pci:v00000200* + ID_VENDOR_FROM_DATABASE=Dell (wrong ID) + +@@ -2124,7 +2130,7 @@ pci:v00001000d000000A5sv00001028sd00002140* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i Front) + + pci:v00001000d000000A5sv00001028sd00002141* +- ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H360 MX) ++ ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (PERC H365i MX) + + pci:v00001000d000000A5sv00001028sd00002142* + ID_MODEL_FROM_DATABASE=Fusion-MPT 24GSAS/PCIe SAS40xx (HBA465e Adapter) +@@ -20114,6 +20120,12 @@ pci:v00001054d0000350E* + pci:v00001055* + ID_VENDOR_FROM_DATABASE=Microchip Technology / SMSC + ++pci:v00001055d00007430* ++ ID_MODEL_FROM_DATABASE=LAN7430 ++ ++pci:v00001055d00007431* ++ ID_MODEL_FROM_DATABASE=LAN7431 ++ + pci:v00001055d00009130* + ID_MODEL_FROM_DATABASE=SLC90E66 [Victory66] IDE + +@@ -36945,10 +36957,13 @@ pci:v000010DEd00002296* + ID_MODEL_FROM_DATABASE=Tegra PCIe Endpoint Virtual Network + + pci:v000010DEd00002302* +- ID_MODEL_FROM_DATABASE=GA103 ++ ID_MODEL_FROM_DATABASE=GH100 + + pci:v000010DEd00002321* +- ID_MODEL_FROM_DATABASE=GA103 ++ ID_MODEL_FROM_DATABASE=GH100 ++ ++pci:v000010DEd00002336* ++ ID_MODEL_FROM_DATABASE=GH100 [H100 96GB] + + pci:v000010DEd00002414* + ID_MODEL_FROM_DATABASE=GA103 [GeForce RTX 3060 Ti] +@@ -50946,11 +50961,113 @@ pci:v00001344d00005192* + ID_MODEL_FROM_DATABASE=9200 MAX NVMe SSD + + pci:v00001344d000051A2* +- ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD ++ ID_MODEL_FROM_DATABASE=7300 PRO NVMe SSD + + pci:v00001344d000051A3* ++ ID_MODEL_FROM_DATABASE=7300 MAX NVMe SSD ++ ++pci:v00001344d000051B1* ++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD ++ ++pci:v00001344d000051B1sv00001344sd00004000* ++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (3.84TB U.2) ++ ++pci:v00001344d000051B1sv00001344sd00005000* ++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (7.68TB U.2) ++ ++pci:v00001344d000051B1sv00001344sd00006000* ++ ID_MODEL_FROM_DATABASE=9300 PRO NVMe SSD (15.36TB U.2) ++ ++pci:v00001344d000051B2* + ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD + ++pci:v00001344d000051B2sv00001344sd00004000* ++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (3.2TB U.2) ++ ++pci:v00001344d000051B2sv00001344sd00005000* ++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (6.4 TB U.2) ++ ++pci:v00001344d000051B2sv00001344sd00006000* ++ ID_MODEL_FROM_DATABASE=9300 MAX NVMe SSD (12.8TB U.2) ++ ++pci:v00001344d000051C0* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD ++ ++pci:v00001344d000051C0sv00001344sd00001100* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 480GB) ++ ++pci:v00001344d000051C0sv00001344sd00002000* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 960GB) ++ ++pci:v00001344d000051C0sv00001344sd00002100* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 960GB) ++ ++pci:v00001344d000051C0sv00001344sd00002600* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.S 960GB) ++ ++pci:v00001344d000051C0sv00001344sd00002B00* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 1920GB) ++ ++pci:v00001344d000051C0sv00001344sd00002D00* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.2 1920GB) ++ ++pci:v00001344d000051C0sv00001344sd00003000* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 1920GB) ++ ++pci:v00001344d000051C0sv00001344sd00003E00* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (M.2 3840GB) ++ ++pci:v00001344d000051C0sv00001344sd00003F00* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (E1.S 3840GB) ++ ++pci:v00001344d000051C0sv00001344sd00004000* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 3840GB) ++ ++pci:v00001344d000051C0sv00001344sd00005000* ++ ID_MODEL_FROM_DATABASE=7400 PRO NVMe SSD (U.3 7680GB) ++ ++pci:v00001344d000051C1* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD ++ ++pci:v00001344d000051C1sv00001344sd00001100* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 400GB) ++ ++pci:v00001344d000051C1sv00001344sd00002000* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 800GB) ++ ++pci:v00001344d000051C1sv00001344sd00002100* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 800GB) ++ ++pci:v00001344d000051C1sv00001344sd00002600* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 800GB) ++ ++pci:v00001344d000051C1sv00001344sd00002B00* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 1600GB) ++ ++pci:v00001344d000051C1sv00001344sd00002D00* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 1600GB) ++ ++pci:v00001344d000051C1sv00001344sd00003000* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 1600GB) ++ ++pci:v00001344d000051C1sv00001344sd00003E00* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (M.2 3200GB) ++ ++pci:v00001344d000051C1sv00001344sd00003F00* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (E1.S 3200GB) ++ ++pci:v00001344d000051C1sv00001344sd00004000* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 3200GB) ++ ++pci:v00001344d000051C1sv00001344sd00005000* ++ ID_MODEL_FROM_DATABASE=7400 MAX NVMe SSD (U.3 6400GB) ++ ++pci:v00001344d000051C3* ++ ID_MODEL_FROM_DATABASE=7450 PRO NVMe SSD ++ ++pci:v00001344d000051C4* ++ ID_MODEL_FROM_DATABASE=7450 MAX NVMe SSD ++ + pci:v00001345* + ID_VENDOR_FROM_DATABASE=Arescom Inc + +@@ -55451,6 +55568,12 @@ pci:v00001425d00006089* + pci:v00001425d0000608A* + ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Ethernet Controller + ++pci:v00001425d00006092* ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller ++ ++pci:v00001425d00006092sv000001DEsd0000FFF9* ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6) ++ + pci:v00001425d00006401* + ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller + +@@ -55523,6 +55646,12 @@ pci:v00001425d00006489* + pci:v00001425d0000648A* + ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Ethernet Controller + ++pci:v00001425d00006492* ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller ++ ++pci:v00001425d00006492sv000001DEsd0000FFF9* ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6) ++ + pci:v00001425d00006501* + ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller + +@@ -55595,6 +55724,9 @@ pci:v00001425d00006589* + pci:v00001425d0000658A* + ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Storage Controller + ++pci:v00001425d00006592* ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Storage Controller ++ + pci:v00001425d00006601* + ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller + +@@ -55667,6 +55799,9 @@ pci:v00001425d00006689* + pci:v00001425d0000668A* + ID_MODEL_FROM_DATABASE=T62100-608a Unified Wire Storage Controller + ++pci:v00001425d00006692* ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Storage Controller ++ + pci:v00001425d00006801* + ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller [VF] + +@@ -69047,9 +69182,15 @@ pci:v00001AF4* + pci:v00001AF4d00001000* + ID_MODEL_FROM_DATABASE=Virtio network device + ++pci:v00001AF4d00001000sv000001DEsd0000FFFB* ++ ID_MODEL_FROM_DATABASE=Virtio network device (Propolis Virtio network device) ++ + pci:v00001AF4d00001001* + ID_MODEL_FROM_DATABASE=Virtio block device + ++pci:v00001AF4d00001001sv000001DEsd0000FFFA* ++ ID_MODEL_FROM_DATABASE=Virtio block device (Propolis Virtio block device) ++ + pci:v00001AF4d00001002* + ID_MODEL_FROM_DATABASE=Virtio memory balloon + +@@ -72677,6 +72818,123 @@ pci:v00001F2Fd00001513sv00001F2Fsd00006116* + pci:v00001F2Fd00001513sv00001F2Fsd00006118* + ID_MODEL_FROM_DATABASE=DERA MENG NVMe Controller (KM560 U.2 7.68TB NVMe SSD) + ++pci:v00001F3F* ++ ID_VENDOR_FROM_DATABASE=3SNIC Ltd ++ ++pci:v00001F3Fd00002100* ++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA ++ ++pci:v00001F3Fd00002100sv00001F3Fsd00000120* ++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 32 Ports) ++ ++pci:v00001F3Fd00002100sv00001F3Fsd00000125* ++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 40 Ports) ++ ++pci:v00001F3Fd00002100sv00001F3Fsd00000180* ++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 16 Ports) ++ ++pci:v00001F3Fd00002100sv00001F3Fsd00000185* ++ ID_MODEL_FROM_DATABASE=3SRAID SAS/SATA HBA (HBA 8 Ports) ++ ++pci:v00001F3Fd00002200* ++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller ++ ++pci:v00001F3Fd00002200sv00001F3Fsd00000185* ++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 16 Ports with 2G Cache) ++ ++pci:v00001F3Fd00002200sv00001F3Fsd000001A1* ++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 40 Ports with 2G Cache) ++ ++pci:v00001F3Fd00002200sv00001F3Fsd000001A4* ++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 16 Ports with 4G Cache) ++ ++pci:v00001F3Fd00002200sv00001F3Fsd000001A8* ++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 32 Ports with 4G Cache) ++ ++pci:v00001F3Fd00002200sv00001F3Fsd000001AD* ++ ID_MODEL_FROM_DATABASE=3SRAID RAID controller (RAID Controller 40 Ports with 4G Cache) ++ ++pci:v00001F3Fd00009001* ++ ID_MODEL_FROM_DATABASE=Ethernet VF ++ ++pci:v00001F3Fd00009001sv00001F3Fsd00001000* ++ ID_MODEL_FROM_DATABASE=Ethernet VF ++ ++pci:v00001F3Fd00009002* ++ ID_MODEL_FROM_DATABASE=Ethernet VF Hyper-V ++ ++pci:v00001F3Fd00009002sv00001F3Fsd00001000* ++ ID_MODEL_FROM_DATABASE=Ethernet VF Hyper-V ++ ++pci:v00001F3Fd00009003* ++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF ++ ++pci:v00001F3Fd00009003sv00001F3Fsd00001000* ++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF ++ ++pci:v00001F3Fd00009004* ++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF Hyper-V ++ ++pci:v00001F3Fd00009004sv00001F3Fsd00001000* ++ ID_MODEL_FROM_DATABASE=Ethernet SDI VF Hyper-V ++ ++pci:v00001F3Fd00009008* ++ ID_MODEL_FROM_DATABASE=3SFC VF ++ ++pci:v00001F3Fd00009008sv00001F3Fsd00001000* ++ ID_MODEL_FROM_DATABASE=3SFC VF ++ ++pci:v00001F3Fd00009009* ++ ID_MODEL_FROM_DATABASE=3SFC VF Hyper-V ++ ++pci:v00001F3Fd00009009sv00001F3Fsd00001000* ++ ID_MODEL_FROM_DATABASE=3SFC VF Hyper-V ++ ++pci:v00001F3Fd00009010* ++ ID_MODEL_FROM_DATABASE=3SFC FC Controller ++ ++pci:v00001F3Fd00009010sv00001F3Fsd00000041* ++ ID_MODEL_FROM_DATABASE=3SFC FC Controller (Dual Port 16GE FC to PCIe Gen4 x16 Adapter) ++ ++pci:v00001F3Fd00009010sv00001F3Fsd00000061* ++ ID_MODEL_FROM_DATABASE=3SFC FC Controller (Dual Port 32GE FC to PCIe Gen4 x16 Adapter) ++ ++pci:v00001F3Fd00009020* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter ++ ++pci:v00001F3Fd00009020sv00001F3Fsd00000051* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter (Dual Port 25GE Ethernet Network Adapter) ++ ++pci:v00001F3Fd00009020sv00001F3Fsd00000052* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter (Quad Port 25GE Ethernet Network Adapter) ++ ++pci:v00001F3Fd00009020sv00001F3Fsd000000A1* ++ ID_MODEL_FROM_DATABASE=Ethernet Network Adapter (Dual Port 100GE Ethernet Network Adapter) ++ ++pci:v00001F3Fd00009030* ++ ID_MODEL_FROM_DATABASE=IPU ++ ++pci:v00001F3Fd00009030sv00001F3Fsd00000051* ++ ID_MODEL_FROM_DATABASE=IPU (Dual Port 25GE IPU) ++ ++pci:v00001F3Fd00009031* ++ ID_MODEL_FROM_DATABASE=SDI5.0 ++ ++pci:v00001F3Fd00009031sv00001F3Fsd00000051* ++ ID_MODEL_FROM_DATABASE=SDI5.0 (Dual Port 25GE SDI5.0lite) ++ ++pci:v00001F3Fd00009031sv00001F3Fsd000000A1* ++ ID_MODEL_FROM_DATABASE=SDI5.0 (Dual Port 100GE SDI5.0) ++ ++pci:v00001F3Fd00009032* ++ ID_MODEL_FROM_DATABASE=SDI5.1 ++ ++pci:v00001F3Fd00009032sv00001F3Fsd000000A1* ++ ID_MODEL_FROM_DATABASE=SDI5.1 (Dual Port 100GE SDI5.1) ++ ++pci:v00001FAA* ++ ID_VENDOR_FROM_DATABASE=Hexaflake (Shanghai) Information Technology Co., Ltd. ++ + pci:v00001FAB* + ID_VENDOR_FROM_DATABASE=Unifabrix Ltd. + +@@ -74249,12 +74507,6 @@ pci:v00005168d00000300* + pci:v00005168d00000301* + ID_MODEL_FROM_DATABASE=FlyDVB-T + +-pci:v000051D8* +- ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #2 +- +-pci:v000051D9* +- ID_VENDOR_FROM_DATABASE=Alder Lake-P Serial IO I2C Controller #3 +- + pci:v00005301* + ID_VENDOR_FROM_DATABASE=Alliance Semiconductor Corp. + +@@ -74901,7 +75153,7 @@ pci:v00006766d00003D00* + ID_MODEL_FROM_DATABASE=Arise-GT-10C0 + + pci:v00006766d00003D02* +- ID_MODEL_FROM_DATABASE=Arise 1020 ++ ID_MODEL_FROM_DATABASE=Arise1020 + + pci:v00006766d00003D03* + ID_MODEL_FROM_DATABASE=Arise-GT-1040 +@@ -74913,7 +75165,7 @@ pci:v00006766d00003D40* + ID_MODEL_FROM_DATABASE=Arise-GT-10C0 High Definition Audio Controller + + pci:v00006766d00003D41* +- ID_MODEL_FROM_DATABASE=Arise 1020 High Definition Audio Controller ++ ID_MODEL_FROM_DATABASE=Arise1020 High Definition Audio Controller + + pci:v00006899* + ID_VENDOR_FROM_DATABASE=ZT Systems +@@ -80111,6 +80363,9 @@ pci:v00008086d00001235* + pci:v00008086d00001237* + ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] + ++pci:v00008086d00001237sv000001DEsd0000FFFE* ++ ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] (Propolis Virtual 440FX) ++ + pci:v00008086d00001237sv00001AF4sd00001100* + ID_MODEL_FROM_DATABASE=440FX - 82441FX PMC [Natoma] (Qemu virtual machine) + +@@ -96173,6 +96428,9 @@ pci:v00008086d00006FFE* + pci:v00008086d00007000* + ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] + ++pci:v00008086d00007000sv000001DEsd0000FFFD* ++ ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] (Propolis Virtual PIIX3 ISA Controller) ++ + pci:v00008086d00007000sv00001AF4sd00001100* + ID_MODEL_FROM_DATABASE=82371SB PIIX3 ISA [Natoma/Triton II] (Qemu virtual machine) + +@@ -96224,6 +96482,9 @@ pci:v00008086d00007112sv00001AF4sd00001100* + pci:v00008086d00007113* + ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI + ++pci:v00008086d00007113sv000001DEsd0000FFFC* ++ ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI (Propolis Virtual PIIX4 PM Controller) ++ + pci:v00008086d00007113sv000015ADsd00001976* + ID_MODEL_FROM_DATABASE=82371AB/EB/MB PIIX4 ACPI (Virtual Machine Chipset) + +@@ -96443,6 +96704,15 @@ pci:v00008086d00007AA7* + pci:v00008086d00007AB4* + ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #13 + ++pci:v00008086d00007AB8* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #1 ++ ++pci:v00008086d00007AB9* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #2 ++ ++pci:v00008086d00007ABC* ++ ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #5 ++ + pci:v00008086d00007ABD* + ID_MODEL_FROM_DATABASE=Alder Lake-S PCH PCI Express Root Port #6 + +diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb +index d7e218011a..ee890a8f28 100644 +--- a/hwdb.d/20-usb-vendor-model.hwdb ++++ b/hwdb.d/20-usb-vendor-model.hwdb +@@ -64613,6 +64613,24 @@ usb:v2304p061E* + usb:v2304p2304* + ID_MODEL_FROM_DATABASE=1689 + ++usb:v2309* ++ ID_VENDOR_FROM_DATABASE=TimeLink Technology Co., Ltd ++ ++usb:v2309p1001* ++ ID_MODEL_FROM_DATABASE=Touch Device(hid) ++ ++usb:v2309p1005* ++ ID_MODEL_FROM_DATABASE=Touch Device ++ ++usb:v2309p1006* ++ ID_MODEL_FROM_DATABASE=Touch Device(2) ++ ++usb:v2309p1007* ++ ID_MODEL_FROM_DATABASE=MulTouch Device(hid) ++ ++usb:v2309p1009* ++ ID_MODEL_FROM_DATABASE=Touch Device(hid) ++ + usb:v230D* + ID_VENDOR_FROM_DATABASE=Teracom + +diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt +index aeecb73bbf..8481ff91b9 100644 +--- a/hwdb.d/ma-large.txt ++++ b/hwdb.d/ma-large.txt +@@ -1238,12 +1238,6 @@ A86D5F (base 16) Raisecom Technology CO., LTD + San Jose CA 95134 + US + +-50-5F-B5 (hex) Askey Computer Corp. +-505FB5 (base 16) Askey Computer Corp. +- 10F, NO. 119, JIANKANG RD., ZHONGHE DIST. +- NEW TAIPEI 235 +- TW +- + C4-F0-EC (hex) Fiberhome Telecommunication Technologies Co.,LTD + C4F0EC (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road +@@ -1322,12 +1316,6 @@ D88DC8 (base 16) Atil Technology Co., LTD + Da’an Dist., Taipei City 106 + TW + +-88-DE-7C (hex) Askey Computer Corp. +-88DE7C (base 16) Askey Computer Corp. +- 10F, No.119, JIANKANG RD.,ZHINGHE DIST, +- NEW TAIPEI CITY 23585 +- TW +- + A8-E2-C1 (hex) Texas Instruments + A8E2C1 (base 16) Texas Instruments + 12500 TI Blvd +@@ -2873,12 +2861,6 @@ D0C5D8 (base 16) LATECOERE + Toulouse Cedex 5 31 Haute-Garonne 31079 + FR + +-70-54-B4 (hex) Vestel Elektronik San ve Tic. A.Ş. +-7054B4 (base 16) Vestel Elektronik San ve Tic. A.Ş. +- Organize san +- Manisa Turket 45030 +- TR +- + 20-A6-0C (hex) Xiaomi Communications Co Ltd + 20A60C (base 16) Xiaomi Communications Co Ltd + The Rainbow City of China Resources +@@ -36485,12 +36467,6 @@ B43D08 (base 16) GX International BV + TOYONAKA CITY,OSAKA 560-0035 + JP + +-B8-20-8E (hex) Panasonic Corporation Connected Solutions Company +-B8208E (base 16) Panasonic Corporation Connected Solutions Company +- 4-1-62 Minoshima, Hakata-ku +- Fukuoka-shi Fukuoka 812-8531 +- JP +- + 90-38-0C (hex) Espressif Inc. + 90380C (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area +@@ -37412,12 +37388,6 @@ DC8084 (base 16) Apple, Inc. + Ernakulam KL 686662 + IN + +-E4-DA-DF (hex) Taicang T&W Electronics +-E4DADF (base 16) Taicang T&W Electronics +- 89# Jiang Nan RD +- Suzhou Jiangsu 215412 +- CN +- + 7C-35-F8 (hex) Zhejiang Tmall Technology Co., Ltd. + 7C35F8 (base 16) Zhejiang Tmall Technology Co., Ltd. + No.969 Wenyi West Road, Wuchang Street, Yuhang District +@@ -37442,6 +37412,12 @@ C85895 (base 16) Motorola Mobility LLC, a Lenovo Company + Chicago IL 60654 + US + ++E4-DA-DF (hex) Taicang T&W Electronics ++E4DADF (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 ++ CN ++ + A8-53-7D (hex) Mist Systems, Inc. + A8537D (base 16) Mist Systems, Inc. + 1601 South De Anza Blvd, Suite 248 +@@ -37472,12 +37448,6 @@ E8D322 (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-30-2B-DC (hex) Top-Unum Electronics Co., LTD +-302BDC (base 16) Top-Unum Electronics Co., LTD +- No. 58, Ln. 137, Jianshan Rd., Yingge Dist., +- New Taipei City 239, Taiwan 239 +- CN +- + 8C-15-53 (hex) Beijing Memblaze Technology Co Ltd + 8C1553 (base 16) Beijing Memblaze Technology Co Ltd + Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian +@@ -37526,6 +37496,24 @@ E8EBD3 (base 16) Mellanox Technologies, Inc. + Sunnyvale CA 94085 + US + ++30-2B-DC (hex) Top-Unum Electronics Co., LTD ++302BDC (base 16) Top-Unum Electronics Co., LTD ++ No. 58, Ln. 137, Jianshan Rd., Yingge Dist., ++ New Taipei City 239, Taiwan 239 ++ CN ++ ++90-F7-B2 (hex) New H3C Technologies Co., Ltd ++90F7B2 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++04-E3-1A (hex) Sagemcom Broadband SAS ++04E31A (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ + C0-06-0C (hex) HUAWEI TECHNOLOGIES CO.,LTD + C0060C (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -37544,24 +37532,18 @@ B0A4F0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + DONG GUAN GUANG DONG 523860 + CN + +-90-F7-B2 (hex) New H3C Technologies Co., Ltd +-90F7B2 (base 16) New H3C Technologies Co., Ltd +- 466 Changhe Road, Binjiang District +- Hangzhou Zhejiang 310052 +- CN +- +-04-E3-1A (hex) Sagemcom Broadband SAS +-04E31A (base 16) Sagemcom Broadband SAS +- 250, route de l'Empereur +- Rueil Malmaison Cedex hauts de seine 92848 +- FR +- + 6C-99-9D (hex) Amazon Technologies Inc. + 6C999D (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + ++6C-93-08 (hex) IEEE Registration Authority ++6C9308 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ + 7C-6A-60 (hex) China Mobile Group Device Co.,Ltd. + 7C6A60 (base 16) China Mobile Group Device Co.,Ltd. + 32 Xuanwumen West Street,Xicheng District +@@ -37580,14 +37562,20 @@ B0A4F0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + York YO30 4RY + GB + +-9C-A2-F4 (hex) TP-Link Corporation Limited +-9CA2F4 (base 16) TP-Link Corporation Limited ++D8-E2-DF (hex) Microsoft Corporation ++D8E2DF (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ ++1C-61-B4 (hex) TP-Link Corporation Limited ++1C61B4 (base 16) TP-Link Corporation Limited + Room 901,9/F.New East Ocean Centre, 9 Science Museum Road + Tsim Sha Tsui Kowloon 999077 + HK + +-1C-61-B4 (hex) TP-Link Corporation Limited +-1C61B4 (base 16) TP-Link Corporation Limited ++9C-A2-F4 (hex) TP-Link Corporation Limited ++9CA2F4 (base 16) TP-Link Corporation Limited + Room 901,9/F.New East Ocean Centre, 9 Science Museum Road + Tsim Sha Tsui Kowloon 999077 + HK +@@ -37598,29 +37586,23 @@ B4695F (base 16) TCT mobile ltd + Hui Zhou Guang Dong 516006 + CN + +-D8-E2-DF (hex) Microsoft Corporation +-D8E2DF (base 16) Microsoft Corporation +- One Microsoft Way +- REDMOND WA 98052 +- US +- +-6C-93-08 (hex) IEEE Registration Authority +-6C9308 (base 16) IEEE Registration Authority +- 445 Hoes Lane +- Piscataway NJ 08554 +- US +- + 38-8F-30 (hex) Samsung Electronics Co.,Ltd + 388F30 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong + Gumi Gyeongbuk 730-350 + KR + +-24-06-F2 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-2406F2 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN ++A0-44-66 (hex) Intellics ++A04466 (base 16) Intellics ++ 697, Pangyo-ro, Bundang-gu ++ Seongnam-si Gyeonggi-do 13511 ++ KR ++ ++44-6D-7F (hex) Amazon Technologies Inc. ++446D7F (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno 89507 ++ US + + 84-C6-92 (hex) Texas Instruments + 84C692 (base 16) Texas Instruments +@@ -37640,40 +37622,10 @@ D8E2DF (base 16) Microsoft Corporation + London E14 5EY + GB + +-A0-44-66 (hex) Intellics +-A04466 (base 16) Intellics +- 697, Pangyo-ro, Bundang-gu +- Seongnam-si Gyeonggi-do 13511 +- KR +- +-CC-66-18 (hex) Adtran Inc +-CC6618 (base 16) Adtran Inc +- 901 Explorer Blvd. +- Huntsville AL 35806-2807 +- US +- +-C0-C1-70 (hex) Shenzhen SuperElectron Technology Co.,Ltd. +-C0C170 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. +- 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city +- Shenzhen Guangdong 518000 +- CN +- +-50-42-89 (hex) zte corporation +-504289 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- +-30-8E-7A (hex) Shenzhen iComm Semiconductor CO.,LTD +-308E7A (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-2C-DD-5F (hex) Shenzhen iComm Semiconductor CO.,LTD +-2CDD5F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++24-06-F2 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++2406F2 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 + CN + + C0-6D-ED (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. +@@ -37682,18 +37634,6 @@ C06DED (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. + Hangzhou Zhejiang 310052 + CN + +-44-6D-7F (hex) Amazon Technologies Inc. +-446D7F (base 16) Amazon Technologies Inc. +- P.O Box 8102 +- Reno 89507 +- US +- +-E0-27-6C (hex) Guangzhou Shiyuan Electronic Technology Company Limited +-E0276C (base 16) Guangzhou Shiyuan Electronic Technology Company Limited +- No.6, 4th Yunpu Road, Yunpu industry District +- Guangzhou Guangdong 510530 +- CN +- + 90-93-5A (hex) ARRIS Group, Inc. + 90935A (base 16) ARRIS Group, Inc. + 6450 Sequence Drive +@@ -37712,12 +37652,42 @@ AC8FA9 (base 16) Nokia Solutions and Networks GmbH & Co. KG + Sunnyvale CA 94089 + US + ++C0-C1-70 (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++C0C170 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++50-42-89 (hex) zte corporation ++504289 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++44-29-1E (hex) AltoBeam (China) Inc. ++44291E (base 16) AltoBeam (China) Inc. ++ B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian ++ Beijing Beijing 100083 ++ CN ++ + 24-EB-ED (hex) HUAWEI TECHNOLOGIES CO.,LTD + 24EBED (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + ++30-8E-7A (hex) Shenzhen iComm Semiconductor CO.,LTD ++308E7A (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++2C-DD-5F (hex) Shenzhen iComm Semiconductor CO.,LTD ++2CDD5F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ + AC-51-AB (hex) HUAWEI TECHNOLOGIES CO.,LTD + AC51AB (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -37730,22 +37700,16 @@ AC51AB (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-F8-AD-24 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +-F8AD24 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +- No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. +- Chongqing China 401120 +- CN +- +-A8-C9-8A (hex) New H3C Technologies Co., Ltd +-A8C98A (base 16) New H3C Technologies Co., Ltd +- 466 Changhe Road, Binjiang District +- Hangzhou Zhejiang 310052 +- CN ++CC-66-18 (hex) Adtran Inc ++CC6618 (base 16) Adtran Inc ++ 901 Explorer Blvd. ++ Huntsville AL 35806-2807 ++ US + +-44-29-1E (hex) AltoBeam (China) Inc. +-44291E (base 16) AltoBeam (China) Inc. +- B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian +- Beijing Beijing 100083 ++E0-27-6C (hex) Guangzhou Shiyuan Electronic Technology Company Limited ++E0276C (base 16) Guangzhou Shiyuan Electronic Technology Company Limited ++ No.6, 4th Yunpu Road, Yunpu industry District ++ Guangzhou Guangdong 510530 + CN + + DC-8E-95 (hex) Silicon Laboratories +@@ -37754,12 +37718,6 @@ DC8E95 (base 16) Silicon Laboratories + Austin TX 78701 + US + +-7C-EF-40 (hex) Nextorage Corporation +-7CEF40 (base 16) Nextorage Corporation +- Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku +- Kawasaki City Kanagawa 210-0007 +- JP +- + 28-BE-43 (hex) vivo Mobile Communication Co., Ltd. + 28BE43 (base 16) vivo Mobile Communication Co., Ltd. + No.1, vivo Road, Chang'an +@@ -37772,11 +37730,11 @@ DC8E95 (base 16) Silicon Laboratories + DONG GUAN GUANG DONG 523860 + CN + +-28-74-F5 (hex) Nokia Solutions and Networks GmbH & Co. KG +-2874F5 (base 16) Nokia Solutions and Networks GmbH & Co. KG +- Werinherstrasse 91 +- München Bavaria D-81541 +- DE ++F8-AD-24 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++F8AD24 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN + + B0-1F-8C (hex) Aruba, a Hewlett Packard Enterprise Company + B01F8C (base 16) Aruba, a Hewlett Packard Enterprise Company +@@ -37784,11 +37742,11 @@ B01F8C (base 16) Aruba, a Hewlett Packard Enterprise Company + Santa Clara CA 95054 + US + +-C0-E0-1C (hex) IoT Security Group, SL +-C0E01C (base 16) IoT Security Group, SL +- Calle Pez Dorado, 27, local 2 +- Torremolinos Malaga 29620 +- ES ++A8-C9-8A (hex) New H3C Technologies Co., Ltd ++A8C98A (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN + + 00-26-04 (hex) WorldCast Systems + 002604 (base 16) WorldCast Systems +@@ -37796,23 +37754,11 @@ C0E01C (base 16) IoT Security Group, SL + Mérignac 33700 + FR + +-00-CB-7A (hex) Technicolor CH USA Inc. +-00CB7A (base 16) Technicolor CH USA Inc. +- 5030 Sugarloaf Parkway Bldg 6 +- Lawrenceville GA 30044 +- US +- +-F8-AB-82 (hex) Xiaomi Communications Co Ltd +-F8AB82 (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- +-EC-30-B3 (hex) Xiaomi Communications Co Ltd +-EC30B3 (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN ++7C-EF-40 (hex) Nextorage Corporation ++7CEF40 (base 16) Nextorage Corporation ++ Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku ++ Kawasaki City Kanagawa 210-0007 ++ JP + + 1C-AF-4A (hex) Samsung Electronics Co.,Ltd + 1CAF4A (base 16) Samsung Electronics Co.,Ltd +@@ -37826,17 +37772,17 @@ C8120B (base 16) Samsung Electronics Co.,Ltd + Suwon Gyeonggi-Do 16677 + KR + +-90-2C-FB (hex) CanTops Co,.Ltd. +-902CFB (base 16) CanTops Co,.Ltd. +- A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil +- Yeongtong-gu Suwon-si, Gyonggi-do 1660 +- KR ++28-74-F5 (hex) Nokia Solutions and Networks GmbH & Co. KG ++2874F5 (base 16) Nokia Solutions and Networks GmbH & Co. KG ++ Werinherstrasse 91 ++ München Bavaria D-81541 ++ DE + +-A8-A2-37 (hex) Arcadyan Corporation +-A8A237 (base 16) Arcadyan Corporation +- No.8, Sec.2, Guangfu Rd. +- Hsinchu City Hsinchu 30071 +- TW ++C0-E0-1C (hex) IoT Security Group, SL ++C0E01C (base 16) IoT Security Group, SL ++ Calle Pez Dorado, 27, local 2 ++ Torremolinos Malaga 29620 ++ ES + + 00-00-BD (hex) RYOSEI, Ltd. + 0000BD (base 16) RYOSEI, Ltd. +@@ -37844,29 +37790,35 @@ A8A237 (base 16) Arcadyan Corporation + Amagasaki-shi Hyogo 660-0834 + JP + ++00-CB-7A (hex) Technicolor CH USA Inc. ++00CB7A (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ + AC-CC-FC (hex) Amazon Technologies Inc. + ACCCFC (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + +-08-E6-3B (hex) zte corporation +-08E63B (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN ++90-2C-FB (hex) CanTops Co,.Ltd. ++902CFB (base 16) CanTops Co,.Ltd. ++ A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil ++ Yeongtong-gu Suwon-si, Gyonggi-do 1660 ++ KR + +-88-C1-74 (hex) zte corporation +-88C174 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++F8-AB-82 (hex) Xiaomi Communications Co Ltd ++F8AB82 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 + CN + +-C8-9E-61 (hex) Lyngsoe Systems LTd +-C89E61 (base 16) Lyngsoe Systems LTd +- 101 Simona Dr., Unit 2 +- Bolton Ontario L7E 4E8 +- CA ++EC-30-B3 (hex) Xiaomi Communications Co Ltd ++EC30B3 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN + + 9C-57-BC (hex) eero inc. + 9C57BC (base 16) eero inc. +@@ -37874,12 +37826,6 @@ C89E61 (base 16) Lyngsoe Systems LTd + San Francisco CA 94107 + US + +-2C-82-17 (hex) Apple, Inc. +-2C8217 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- + 14-2D-4D (hex) Apple, Inc. + 142D4D (base 16) Apple, Inc. + 1 Infinite Loop +@@ -37898,6 +37844,12 @@ B8211C (base 16) Apple, Inc. + Cupertino CA 95014 + US + ++B0-3F-64 (hex) Apple, Inc. ++B03F64 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + D4-5A-3F (hex) Juniper Networks + D45A3F (base 16) Juniper Networks + 1133 Innovation Way +@@ -37910,35 +37862,35 @@ E8DC6C (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-48-B4-C3 (hex) Aruba, a Hewlett Packard Enterprise Company +-48B4C3 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 +- US ++A8-A2-37 (hex) Arcadyan Corporation ++A8A237 (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW + +-B0-3F-64 (hex) Apple, Inc. +-B03F64 (base 16) Apple, Inc. ++2C-82-17 (hex) Apple, Inc. ++2C8217 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-68-A7-B4 (hex) Honor Device Co., Ltd. +-68A7B4 (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 ++08-E6-3B (hex) zte corporation ++08E63B (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + +-80-3C-20 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-803C20 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 ++88-C1-74 (hex) zte corporation ++88C174 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + +-A4-DD-58 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-A4DD58 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN ++C8-9E-61 (hex) Lyngsoe Systems LTd ++C89E61 (base 16) Lyngsoe Systems LTd ++ 101 Simona Dr., Unit 2 ++ Bolton Ontario L7E 4E8 ++ CA + + E0-28-B1 (hex) Shenzhen Skyworth Digital Technology CO., Ltd + E028B1 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +@@ -37958,6 +37910,12 @@ C08D51 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + ++48-B4-C3 (hex) Aruba, a Hewlett Packard Enterprise Company ++48B4C3 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ + 6C-15-24 (hex) IEEE Registration Authority + 6C1524 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -37970,12 +37928,6 @@ C08D51 (base 16) Amazon Technologies Inc. + Kanata Ontario K2K 2E6 + CA + +-00-12-93 (hex) ABB Switzerland Ltd. +-001293 (base 16) ABB Switzerland Ltd. +- Via Luserte Sud 9 Quartino +- Quartino 6572 +- CH +- + C0-E9-11 (hex) Private + C0E911 (base 16) Private + +@@ -37991,28 +37943,28 @@ C0E911 (base 16) Private + London SW1Y 4AR + GB + +-24-2C-FE (hex) Zhejiang Tmall Technology Co., Ltd. +-242CFE (base 16) Zhejiang Tmall Technology Co., Ltd. +- No.969 Wenyi West Road, Wuchang Street, Yuhang District +- Hangzhou Zhejiang 310024 ++68-A7-B4 (hex) Honor Device Co., Ltd. ++68A7B4 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 + CN + +-A0-42-D1 (hex) Huawei Device Co., Ltd. +-A042D1 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++80-3C-20 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++803C20 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-2C-DC-78 (hex) Descartes Systems (USA) LLC +-2CDC78 (base 16) Descartes Systems (USA) LLC +- 2030 Powers Ferry Road SE +- Atlanta GA 303339 +- US ++A4-DD-58 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++A4DD58 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN + +-58-87-9F (hex) Huawei Device Co., Ltd. +-58879F (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++24-2C-FE (hex) Zhejiang Tmall Technology Co., Ltd. ++242CFE (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 + CN + + E8-D8-7E (hex) Amazon Technologies Inc. +@@ -38021,47 +37973,59 @@ E8D87E (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + ++00-12-93 (hex) ABB Switzerland Ltd. ++001293 (base 16) ABB Switzerland Ltd. ++ Via Luserte Sud 9 Quartino ++ Quartino 6572 ++ CH ++ + 9C-1F-CA (hex) Hangzhou AlmightyDigit Technology Co., Ltd + 9C1FCA (base 16) Hangzhou AlmightyDigit Technology Co., Ltd + Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District + Hangzhou Zhejiang 310000 + CN + +-84-70-D7 (hex) eero inc. +-8470D7 (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 ++2C-DC-78 (hex) Descartes Systems (USA) LLC ++2CDC78 (base 16) Descartes Systems (USA) LLC ++ 2030 Powers Ferry Road SE ++ Atlanta GA 303339 + US + ++A0-42-D1 (hex) Huawei Device Co., Ltd. ++A042D1 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++58-87-9F (hex) Huawei Device Co., Ltd. ++58879F (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ + E0-6C-4E (hex) Shenzhen TINNO Mobile Technology Corp. + E06C4E (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili + Nanshan District, Shenzhen PRC 518053 + CN + +-58-1D-D8 (hex) Sagemcom Broadband SAS +-581DD8 (base 16) Sagemcom Broadband SAS +- 250, route de l'Empereur +- Rueil Malmaison Cedex hauts de seine 92848 +- FR +- + 80-6A-B0 (hex) Shenzhen TINNO Mobile Technology Corp. + 806AB0 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili + Nanshan District, Shenzhen PRC 518053 + CN + +-F4-B3-B1 (hex) Silicon Laboratories +-F4B3B1 (base 16) Silicon Laboratories +- 400 West Cesar Chavez Street +- Austin TX 78701 ++84-70-D7 (hex) eero inc. ++8470D7 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 + US + +-04-69-8F (hex) Juniper Networks +-04698F (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 +- US ++10-B2-32 (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. ++10B232 (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. ++ No.218 Qianwangang Road ++ Qingdao Shangdong 266510 ++ CN + + 14-9B-F3 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + 149BF3 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +@@ -38075,11 +38039,11 @@ F4B3B1 (base 16) Silicon Laboratories + Wuhan Hubei 430074 + CN + +-10-B2-32 (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. +-10B232 (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. +- No.218 Qianwangang Road +- Qingdao Shangdong 266510 +- CN ++F4-B3-B1 (hex) Silicon Laboratories ++F4B3B1 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US + + B8-50-D8 (hex) Beijing Xiaomi Mobile Software Co., Ltd + B850D8 (base 16) Beijing Xiaomi Mobile Software Co., Ltd +@@ -38087,6 +38051,36 @@ B850D8 (base 16) Beijing Xiaomi Mobile Software Co., Ltd + Beijing Beijing 100085 + CN + ++58-1D-D8 (hex) Sagemcom Broadband SAS ++581DD8 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ ++04-69-8F (hex) Juniper Networks ++04698F (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++5C-53-C3 (hex) Ubee Interactive Co., Limited ++5C53C3 (base 16) Ubee Interactive Co., Limited ++ Flat/RM 1202, 12/F, AT Tower, 180 Electric Road ++ North Point 00000 ++ HK ++ ++AC-5A-F0 (hex) LG Electronics ++AC5AF0 (base 16) LG Electronics ++ 222 LG-ro, JINWI-MYEON ++ Pyeongtaek-si Gyeonggi-do 451-713 ++ KR ++ ++EC-A6-2F (hex) HUAWEI TECHNOLOGIES CO.,LTD ++ECA62F (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ + C0-9F-51 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION + C09F51 (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION + NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China +@@ -38105,11 +38099,17 @@ A0CDF3 (base 16) Murata Manufacturing Co., Ltd. + Nagaokakyo-shi Kyoto 617-8555 + JP + +-B4-8A-0A (hex) Espressif Inc. +-B48A0A (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN ++24-29-34 (hex) Google, Inc. ++242934 (base 16) Google, Inc. ++ 1600 Amphitheatre Parkway ++ Mountain View CA 94043 ++ US ++ ++38-0A-4F (hex) PRACHI ENTERPRISES ++380A4F (base 16) PRACHI ENTERPRISES ++ B-141, 2nd FLOOR SECTOR-6 NOIDA ++ NOIDA UTTARPRADESH 201301 ++ IN + + C8-3A-1B (hex) Toshiba TEC Corporation Inc + C83A1B (base 16) Toshiba TEC Corporation Inc +@@ -38117,23 +38117,29 @@ C83A1B (base 16) Toshiba TEC Corporation Inc + Shinagawa-ku Tokyo 141-8664 + JP + +-EC-A6-2F (hex) HUAWEI TECHNOLOGIES CO.,LTD +-ECA62F (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 ++B4-8A-0A (hex) Espressif Inc. ++B48A0A (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 + CN + +-AC-5A-F0 (hex) LG Electronics +-AC5AF0 (base 16) LG Electronics +- 222 LG-ro, JINWI-MYEON +- Pyeongtaek-si Gyeonggi-do 451-713 ++80-19-70 (hex) Samsung Electronics Co.,Ltd ++801970 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 + KR + +-5C-53-C3 (hex) Ubee Interactive Co., Limited +-5C53C3 (base 16) Ubee Interactive Co., Limited +- Flat/RM 1202, 12/F, AT Tower, 180 Electric Road +- North Point 00000 +- HK ++E0-F7-28 (hex) Amazon Technologies Inc. ++E0F728 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++1C-0E-D3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++1C0ED3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN + + 24-32-AE (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. + 2432AE (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. +@@ -38165,12 +38171,6 @@ AC936A (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + +-1C-0E-D3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-1C0ED3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN +- + 7C-4C-A5 (hex) SKY UK LIMITED + 7C4CA5 (base 16) SKY UK LIMITED + 130 Kings Road +@@ -38195,41 +38195,17 @@ C03E0F (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + +-24-29-34 (hex) Google, Inc. +-242934 (base 16) Google, Inc. +- 1600 Amphitheatre Parkway +- Mountain View CA 94043 +- US +- +-38-0A-4F (hex) PRACHI ENTERPRISES +-380A4F (base 16) PRACHI ENTERPRISES +- B-141, 2nd FLOOR SECTOR-6 NOIDA +- NOIDA UTTARPRADESH 201301 +- IN +- +-80-19-70 (hex) Samsung Electronics Co.,Ltd +-801970 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- +-E0-F7-28 (hex) Amazon Technologies Inc. +-E0F728 (base 16) Amazon Technologies Inc. +- P.O Box 8102 +- Reno NV 89507 +- US +- +-B8-FB-AF (hex) Xiamen IPRT Technology CO.,LTD +-B8FBAF (base 16) Xiamen IPRT Technology CO.,LTD +- 3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China. +- xiamen fujian 361000 +- CN ++D0-58-FC (hex) SKY UK LIMITED ++D058FC (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB + +-34-85-18 (hex) Espressif Inc. +-348518 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN ++90-02-18 (hex) SKY UK LIMITED ++900218 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB + + D4-DA-CD (hex) SKY UK LIMITED + D4DACD (base 16) SKY UK LIMITED +@@ -38255,6 +38231,66 @@ B04530 (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + ++A4-AE-11 (hex) Hon Hai Precision Industry Co., Ltd. ++A4AE11 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++7C-DE-78 (hex) New H3C Technologies Co., Ltd ++7CDE78 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++3C-E0-64 (hex) Texas Instruments ++3CE064 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++E0-92-8F (hex) Texas Instruments ++E0928F (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++CC-03-7B (hex) Texas Instruments ++CC037B (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++58-1C-F8 (hex) Intel Corporate ++581CF8 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++AC-19-8E (hex) Intel Corporate ++AC198E (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++C8-5E-A9 (hex) Intel Corporate ++C85EA9 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++B8-FB-AF (hex) Xiamen IPRT Technology CO.,LTD ++B8FBAF (base 16) Xiamen IPRT Technology CO.,LTD ++ 3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China. ++ xiamen fujian 361000 ++ CN ++ ++34-85-18 (hex) Espressif Inc. ++348518 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ + EC-E6-A2 (hex) Fiberhome Telecommunication Technologies Co.,LTD + ECE6A2 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road +@@ -38273,24 +38309,12 @@ E02E0B (base 16) Intel Corporate + Kulim Kedah 09000 + MY + +-A4-AE-11 (hex) Hon Hai Precision Industry Co., Ltd. +-A4AE11 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 ++CC-29-BD (hex) zte corporation ++CC29BD (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + +-D0-58-FC (hex) SKY UK LIMITED +-D058FC (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- +-90-02-18 (hex) SKY UK LIMITED +-900218 (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + 38-5C-FB (hex) Silicon Laboratories + 385CFB (base 16) Silicon Laboratories + 400 West Cesar Chavez Street +@@ -38303,65 +38327,23 @@ C43D1A (base 16) Intel Corporate + Kulim Kedah 09000 + MY + +-BC-F8-8B (hex) zte corporation +-BCF88B (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- + 68-53-9D (hex) EM Microelectronic + 68539D (base 16) EM Microelectronic + Rue des Sors 3 + Marin-Epagnier Neuchatel 2074 + CH + +-E4-65-64 (hex) SHENZHEN KTC TECHNOLOGY CO.,LTD +-E46564 (base 16) SHENZHEN KTC TECHNOLOGY CO.,LTD +- Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China +- SHEN ZHEN GUANG DONG 518100 +- CN +- + C8-BF-4C (hex) Beijing Xiaomi Mobile Software Co., Ltd + C8BF4C (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District + Beijing Beijing 100085 + CN + +-58-1C-F8 (hex) Intel Corporate +-581CF8 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-AC-19-8E (hex) Intel Corporate +-AC198E (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-C8-5E-A9 (hex) Intel Corporate +-C85EA9 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-3C-E0-64 (hex) Texas Instruments +-3CE064 (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- +-E0-92-8F (hex) Texas Instruments +-E0928F (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- +-CC-03-7B (hex) Texas Instruments +-CC037B (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US ++E4-65-64 (hex) SHENZHEN KTC TECHNOLOGY CO.,LTD ++E46564 (base 16) SHENZHEN KTC TECHNOLOGY CO.,LTD ++ Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China ++ SHEN ZHEN GUANG DONG 518100 ++ CN + + E0-51-D8 (hex) China Dragon Technology Limited + E051D8 (base 16) China Dragon Technology Limited +@@ -38369,17 +38351,17 @@ E051D8 (base 16) China Dragon Technology Limited + Shenzhen Guangdong 518104 + CN + +-CC-29-BD (hex) zte corporation +-CC29BD (base 16) zte corporation ++BC-F8-8B (hex) zte corporation ++BCF88B (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +-7C-DE-78 (hex) New H3C Technologies Co., Ltd +-7CDE78 (base 16) New H3C Technologies Co., Ltd +- 466 Changhe Road, Binjiang District +- Hangzhou Zhejiang 310052 +- CN ++5C-60-BA (hex) HP Inc. ++5C60BA (base 16) HP Inc. ++ 10300 Energy Dr ++ Spring TX 77389 ++ US + + E0-EF-02 (hex) Chengdu Quanjing Intelligent Technology Co.,Ltd + E0EF02 (base 16) Chengdu Quanjing Intelligent Technology Co.,Ltd +@@ -38393,18 +38375,6 @@ E0EF02 (base 16) Chengdu Quanjing Intelligent Technology Co.,Ltd + Hong Kong Hong Kong 999077 + HK + +-20-9C-B4 (hex) Aruba, a Hewlett Packard Enterprise Company +-209CB4 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 +- US +- +-E8-CC-8C (hex) Chengdu Jiarui Hualian Communication Technology Co +-E8CC8C (base 16) Chengdu Jiarui Hualian Communication Technology Co +- 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province +- Chengdu Sichuan 610000 +- CN +- + A8-AB-B5 (hex) Apple, Inc. + A8ABB5 (base 16) Apple, Inc. + 1 Infinite Loop +@@ -38423,11 +38393,29 @@ A8ABB5 (base 16) Apple, Inc. + Kanata Ontario K2K 2E6 + CA + +-B0-67-B5 (hex) Apple, Inc. +-B067B5 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US ++74-80-3F (hex) Renesas Electronics (Penang) Sdn. Bhd. ++74803F (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY ++ ++04-43-FD (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++0443FD (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++A4-89-7E (hex) Guangzhou Yuhong Technology Co.,Ltd. ++A4897E (base 16) Guangzhou Yuhong Technology Co.,Ltd. ++ Room 402, No. 11 Software Road, Tianhe District, Guangzhou ++ Guangzhou Guangdong 510640 ++ CN ++ ++E8-CC-8C (hex) Chengdu Jiarui Hualian Communication Technology Co ++E8CC8C (base 16) Chengdu Jiarui Hualian Communication Technology Co ++ 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province ++ Chengdu Sichuan 610000 ++ CN + + 5C-52-84 (hex) Apple, Inc. + 5C5284 (base 16) Apple, Inc. +@@ -38447,17 +38435,11 @@ C0956D (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-04-43-FD (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-0443FD (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN +- +-74-80-3F (hex) Renesas Electronics (Penang) Sdn. Bhd. +-74803F (base 16) Renesas Electronics (Penang) Sdn. Bhd. +- Phase 3, Bayan Lepas FIZ +- Bayan Lepas Penang 11900 +- MY ++20-9C-B4 (hex) Aruba, a Hewlett Packard Enterprise Company ++209CB4 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US + + EC-A1-38 (hex) Amazon Technologies Inc. + ECA138 (base 16) Amazon Technologies Inc. +@@ -38465,24 +38447,90 @@ ECA138 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-5C-60-BA (hex) HP Inc. +-5C60BA (base 16) HP Inc. +- 10300 Energy Dr +- Spring TX 77389 ++B0-67-B5 (hex) Apple, Inc. ++B067B5 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 + US + +-A4-89-7E (hex) Guangzhou Yuhong Technology Co.,Ltd. +-A4897E (base 16) Guangzhou Yuhong Technology Co.,Ltd. +- Room 402, No. 11 Software Road, Tianhe District, Guangzhou +- Guangzhou Guangdong 510640 +- CN +- + 90-0A-62 (hex) Inventus Power Eletronica do Brasil LTDA + 900A62 (base 16) Inventus Power Eletronica do Brasil LTDA + Av Buriti, 4285 Distrito Industrial + Manaus Amazonas 69075000 + BR + ++70-54-B4 (hex) Vestel Elektronik San ve Tic. A.S. ++7054B4 (base 16) Vestel Elektronik San ve Tic. A.S. ++ Organize san ++ Manisa Turket 45030 ++ TR ++ ++04-BF-1B (hex) Dell Inc. ++04BF1B (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US ++ ++08-1A-1E (hex) Shenzhen iComm Semiconductor CO.,LTD ++081A1E (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++50-5F-B5 (hex) ASKEY COMPUTER CORP ++505FB5 (base 16) ASKEY COMPUTER CORP ++ 10F, NO. 119, JIANKANG RD., ZHONGHE DIST. ++ NEW TAIPEI 235 ++ TW ++ ++88-DE-7C (hex) ASKEY COMPUTER CORP ++88DE7C (base 16) ASKEY COMPUTER CORP ++ 10F, No.119, JIANKANG RD.,ZHINGHE DIST, ++ NEW TAIPEI CITY 23585 ++ TW ++ ++AC-31-84 (hex) Huawei Device Co., Ltd. ++AC3184 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++50-3F-50 (hex) Huawei Device Co., Ltd. ++503F50 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++48-1C-B9 (hex) SZ DJI TECHNOLOGY CO.,LTD ++481CB9 (base 16) SZ DJI TECHNOLOGY CO.,LTD ++ 6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd ++ shenzhen guangdong 518057 ++ CN ++ ++B8-20-8E (hex) Panasonic Connect Co., Ltd. ++B8208E (base 16) Panasonic Connect Co., Ltd. ++ 4-1-62 Minoshima, Hakata-ku ++ Fukuoka-shi Fukuoka 812-8531 ++ JP ++ ++3C-A7-AE (hex) zte corporation ++3CA7AE (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++80-64-6F (hex) Espressif Inc. ++80646F (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++04-57-47 (hex) GoPro ++045747 (base 16) GoPro ++ 3000 Clearview Way ++ San Mateo CA 94402 ++ US ++ + 9C-FF-C2 (hex) AVI Systems GmbH + 9CFFC2 (base 16) AVI Systems GmbH + Dr. Franz Wilhelmstraße 2A +@@ -40073,12 +40121,6 @@ B8A175 (base 16) Roku, Inc. + Saratoga CA 95070 + US + +-CC-D3-C1 (hex) Vestel Elektronik San ve Tic. A.Ş. +-CCD3C1 (base 16) Vestel Elektronik San ve Tic. A.Ş. +- Organize san +- Manisa Turket 45030 +- TR +- + 0C-D0-F8 (hex) Cisco Systems, Inc + 0CD0F8 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -40235,12 +40277,6 @@ A45046 (base 16) Xiaomi Communications Co Ltd + NO.68, Qinghe Middle Street Haidian District, Beijing 100085 + CN + +-1C-24-CD (hex) Askey Computer Corp. +-1C24CD (base 16) Askey Computer Corp. +- 10F, No.119, JIANKANG RD.,ZHINGHE DIST, +- NEW TAIPEI CITY 23585 +- TW +- + 00-7C-2D (hex) Samsung Electronics Co.,Ltd + 007C2D (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu +@@ -40616,12 +40652,6 @@ E43493 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dania Beach FL 33004 + US + +-4C-36-4E (hex) Panasonic Corporation Connected Solutions Company +-4C364E (base 16) Panasonic Corporation Connected Solutions Company +- 4-1-62 Minoshima, Hakata-ku +- Fukuoka-shi Fukuoka 812-8531 +- JP +- + BC-A5-8B (hex) Samsung Electronics Co.,Ltd + BCA58B (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -72272,12 +72302,6 @@ AC78D1 (base 16) Juniper Networks + Sunnyvale CA 94089 + US + +-EC-BE-5F (hex) Vestel Elektronik San ve Tic. A.Ş. +-ECBE5F (base 16) Vestel Elektronik San ve Tic. A.Ş. +- Organize san +- Manisa Turket 45030 +- TR +- + A4-42-3B (hex) Intel Corporate + A4423B (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -75428,24 +75452,6 @@ D850A1 (base 16) Hunan Danuo Technology Co.,LTD + Hong Kong Hong Kong 999077 + HK + +-7C-6C-F0 (hex) Shenzhen TINNO Mobile Technology Corp. +-7C6CF0 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- +-00-C3-0A (hex) Xiaomi Communications Co Ltd +-00C30A (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- +-88-52-EB (hex) Xiaomi Communications Co Ltd +-8852EB (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- + B4-28-75 (hex) Futecho Solutions Private Limited + B42875 (base 16) Futecho Solutions Private Limited + 504, Commercial Complex, Savitri Cinema Compound, GK2 +@@ -75464,6 +75470,24 @@ B42875 (base 16) Futecho Solutions Private Limited + San Francisco CA 94107 + US + ++00-C3-0A (hex) Xiaomi Communications Co Ltd ++00C30A (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++88-52-EB (hex) Xiaomi Communications Co Ltd ++8852EB (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++7C-6C-F0 (hex) Shenzhen TINNO Mobile Technology Corp. ++7C6CF0 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen ++ Shenzhen guangdong 518053 ++ CN ++ + 00-A0-A2 (hex) B810 S.R.L. + 00A0A2 (base 16) B810 S.R.L. + Via E. Lazzaretti 2/1 +@@ -75536,12 +75560,6 @@ DC9A7D (base 16) HISENSE VISUAL TECHNOLOGY CO.,LTD + Dongguan 523808 + CN + +-30-CB-36 (hex) Belden Singapore Pte. Ltd. +-30CB36 (base 16) Belden Singapore Pte. Ltd. +- 151 Lorong Chuan #05-01 New Tech Park Singapore +- Singapore 556741 +- SG +- + B8-3F-D2 (hex) Mellanox Technologies, Inc. + B83FD2 (base 16) Mellanox Technologies, Inc. + 350 Oakmead Parkway, Suite 100 +@@ -75554,6 +75572,12 @@ B83FD2 (base 16) Mellanox Technologies, Inc. + Chiyoda-ku Tokyo 100-0004 + JP + ++30-CB-36 (hex) Belden Singapore Pte. Ltd. ++30CB36 (base 16) Belden Singapore Pte. Ltd. ++ 151 Lorong Chuan #05-01 New Tech Park Singapore ++ Singapore 556741 ++ SG ++ + 8C-17-59 (hex) Intel Corporate + 8C1759 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -75566,29 +75590,11 @@ B83FD2 (base 16) Mellanox Technologies, Inc. + San Jose CA 95131 + US + +-6C-A4-01 (hex) essensys plc +-6CA401 (base 16) essensys plc +- Aldgate Tower, Leman Street +- London E1 8FA +- GB +- +-34-92-C2 (hex) Square Route Co., Ltd. +-3492C2 (base 16) Square Route Co., Ltd. +- Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku +- Tokyo Tokyo 108-0075 +- JP +- +-34-BD-20 (hex) Hangzhou Hikrobot Technology Co., Ltd. +-34BD20 (base 16) Hangzhou Hikrobot Technology Co., Ltd. +- Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang +- Hangzhou 310052 +- CN +- +-64-C2-69 (hex) eero inc. +-64C269 (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 +- US ++BC-6E-6D (hex) EM Microelectronic ++BC6E6D (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH + + B0-4A-6A (hex) Samsung Electronics Co.,Ltd + B04A6A (base 16) Samsung Electronics Co.,Ltd +@@ -75608,30 +75614,48 @@ A8798D (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + ++34-92-C2 (hex) Square Route Co., Ltd. ++3492C2 (base 16) Square Route Co., Ltd. ++ Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku ++ Tokyo Tokyo 108-0075 ++ JP ++ + 28-3D-C2 (hex) Samsung Electronics Co.,Ltd + 283DC2 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong + Gumi Gyeongbuk 730-350 + KR + +-BC-6E-6D (hex) EM Microelectronic +-BC6E6D (base 16) EM Microelectronic +- Rue des Sors 3 +- Marin-Epagnier Neuchatel 2074 +- CH +- + 00-D4-9E (hex) Intel Corporate + 00D49E (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + ++6C-A4-01 (hex) essensys plc ++6CA401 (base 16) essensys plc ++ Aldgate Tower, Leman Street ++ London E1 8FA ++ GB ++ + CC-F3-05 (hex) SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD + CCF305 (base 16) SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD + Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District + Shenzhen Guangdong 518126 + CN + ++34-BD-20 (hex) Hangzhou Hikrobot Technology Co., Ltd. ++34BD20 (base 16) Hangzhou Hikrobot Technology Co., Ltd. ++ Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang ++ Hangzhou 310052 ++ CN ++ ++64-C2-69 (hex) eero inc. ++64C269 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ + AC-2A-A1 (hex) Cisco Systems, Inc + AC2AA1 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -75650,16 +75674,34 @@ F8E94F (base 16) Cisco Systems, Inc + Kulim Kedah 09000 + MY + +-E0-6C-C5 (hex) Huawei Device Co., Ltd. +-E06CC5 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++B8-D6-1A (hex) Espressif Inc. ++B8D61A (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 + CN + +-30-96-3B (hex) Huawei Device Co., Ltd. +-30963B (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++BC-F4-D4 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++BCF4D4 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++D8-9C-8E (hex) Comcast Cable Corporation ++D89C8E (base 16) Comcast Cable Corporation ++ 1800 Arch Street ++ Philadelphia PA 19103 ++ US ++ ++74-56-3C (hex) GIGA-BYTE TECHNOLOGY CO.,LTD. ++74563C (base 16) GIGA-BYTE TECHNOLOGY CO.,LTD. ++ Pin-Jen City, Taoyuan, Taiwan, R.O.C. ++ Pin-Jen Taoyuan 324 ++ TW ++ ++EC-55-1C (hex) HUAWEI TECHNOLOGIES CO.,LTD ++EC551C (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + + 8C-6B-DB (hex) Huawei Device Co., Ltd. +@@ -75686,6 +75728,24 @@ E06CC5 (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + ++E0-6C-C5 (hex) Huawei Device Co., Ltd. ++E06CC5 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++30-96-3B (hex) Huawei Device Co., Ltd. ++30963B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD ++90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ + 98-59-7A (hex) Intel Corporate + 98597A (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -75698,11 +75758,11 @@ E06CC5 (base 16) Huawei Device Co., Ltd. + Kulim Kedah 09000 + MY + +-B8-D6-1A (hex) Espressif Inc. +-B8D61A (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN ++B4-83-51 (hex) Intel Corporate ++B48351 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + + 00-25-CA (hex) Laird Connectivity + 0025CA (base 16) Laird Connectivity +@@ -75710,66 +75770,18 @@ B8D61A (base 16) Espressif Inc. + Cedarburg WI 53012 + US + +-90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD +-90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-74-56-3C (hex) GIGA-BYTE TECHNOLOGY CO.,LTD. +-74563C (base 16) GIGA-BYTE TECHNOLOGY CO.,LTD. +- Pin-Jen City, Taoyuan, Taiwan, R.O.C. +- Pin-Jen Taoyuan 324 +- TW +- +-D8-9C-8E (hex) Comcast Cable Corporation +-D89C8E (base 16) Comcast Cable Corporation +- 1800 Arch Street +- Philadelphia PA 19103 +- US +- + 04-B9-7D (hex) AiVIS Co., Itd. + 04B97D (base 16) AiVIS Co., Itd. + 112, Dumipo-ro, Jung-gu + Incheon Incheon 22394 + KR + +-BC-F4-D4 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +-BCF4D4 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +- B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China +- Nanning Guangxi 530007 +- CN +- + C4-C0-63 (hex) New H3C Technologies Co., Ltd + C4C063 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District + Hangzhou Zhejiang 310052 + CN + +-EC-55-1C (hex) HUAWEI TECHNOLOGIES CO.,LTD +-EC551C (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- +-E0-79-8D (hex) Silicon Laboratories +-E0798D (base 16) Silicon Laboratories +- 400 West Cesar Chavez Street +- Austin TX 78701 +- US +- +-B4-83-51 (hex) Intel Corporate +-B48351 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-34-AD-61 (hex) CELESTICA INC. +-34AD61 (base 16) CELESTICA INC. +- 1900-5140 Yonge Street PO Box 42 +- Toronto Ontario M2N 6L7 +- CA +- + 54-43-B2 (hex) Espressif Inc. + 5443B2 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area +@@ -75782,12 +75794,18 @@ C0DD8A (base 16) Facebook Technologies, LLC + Menlo Park CA 94025 + US + +-AC-D3-1D (hex) Cisco Meraki +-ACD31D (base 16) Cisco Meraki +- 500 Terry A. Francois Blvd +- San Francisco 94158 ++E0-79-8D (hex) Silicon Laboratories ++E0798D (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 + US + ++34-AD-61 (hex) CELESTICA INC. ++34AD61 (base 16) CELESTICA INC. ++ 1900-5140 Yonge Street PO Box 42 ++ Toronto Ontario M2N 6L7 ++ CA ++ + 10-96-1A (hex) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. + 10961A (base 16) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. + 9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT +@@ -75800,18 +75818,6 @@ BCE9E2 (base 16) Brocade Communications Systems LLC + San Jose CA 95131 + US + +-00-18-48 (hex) Vecima Networks Inc. +-001848 (base 16) Vecima Networks Inc. +- 150 Cardinal Place +- Saskatoon SK S7L 6H7 +- CA +- +-2C-55-3C (hex) Vecima Networks Inc. +-2C553C (base 16) Vecima Networks Inc. +- 150 Cardinal Place +- Saskatoon SK S7L 6H7 +- CA +- + AC-BF-71 (hex) Bose Corporation + ACBF71 (base 16) Bose Corporation + The Mountain +@@ -75824,6 +75830,12 @@ ACBF71 (base 16) Bose Corporation + Piscataway NJ 08554 + US + ++AC-D3-1D (hex) Cisco Meraki ++ACD31D (base 16) Cisco Meraki ++ 500 Terry A. Francois Blvd ++ San Francisco 94158 ++ US ++ + 74-84-69 (hex) Nintendo Co.,Ltd + 748469 (base 16) Nintendo Co.,Ltd + 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU +@@ -75866,6 +75878,18 @@ B41974 (base 16) Apple, Inc. + Shenzhen Guangdong 518117 + CN + ++00-18-48 (hex) Vecima Networks Inc. ++001848 (base 16) Vecima Networks Inc. ++ 150 Cardinal Place ++ Saskatoon SK S7L 6H7 ++ CA ++ ++2C-55-3C (hex) Vecima Networks Inc. ++2C553C (base 16) Vecima Networks Inc. ++ 150 Cardinal Place ++ Saskatoon SK S7L 6H7 ++ CA ++ + 60-95-BD (hex) Apple, Inc. + 6095BD (base 16) Apple, Inc. + 1 Infinite Loop +@@ -75914,30 +75938,24 @@ D0989C (base 16) ConMet + Vancouver WA 98661 + US + +-1C-A4-10 (hex) Amlogic, Inc. +-1CA410 (base 16) Amlogic, Inc. +- 2518 Mission College Blvd, Suite 120 +- Santa Clara CA 95054 +- US +- + 24-26-D6 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 2426D6 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-70-A6-BD (hex) Honor Device Co., Ltd. +-70A6BD (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 +- CN +- + EC-81-9C (hex) HUAWEI TECHNOLOGIES CO.,LTD + EC819C (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + ++1C-A4-10 (hex) Amlogic, Inc. ++1CA410 (base 16) Amlogic, Inc. ++ 2518 Mission College Blvd, Suite 120 ++ Santa Clara CA 95054 ++ US ++ + 20-0B-16 (hex) Texas Instruments + 200B16 (base 16) Texas Instruments + 12500 TI Blvd +@@ -75962,23 +75980,23 @@ F85548 (base 16) Texas Instruments + Dallas TX 75243 + US + ++70-A6-BD (hex) Honor Device Co., Ltd. ++70A6BD (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ + 4C-9E-6C (hex) BROADEX TECHNOLOGIES CO.LTD + 4C9E6C (base 16) BROADEX TECHNOLOGIES CO.LTD + NO.306 YATAI ROAD + JIAXING ZHEJIANG 314006 + CN + +-AC-A3-2F (hex) Solidigm Technology +-ACA32F (base 16) Solidigm Technology +- 1921 Corporate Center Circle, Suite 3B +- Longmont 80501 +- US +- +-AC-71-2E (hex) Fortinet, Inc. +-AC712E (base 16) Fortinet, Inc. +- 899 Kifer Road +- Sunnyvale 94086 +- US ++54-2F-04 (hex) Shanghai Longcheer Technology Co., Ltd. ++542F04 (base 16) Shanghai Longcheer Technology Co., Ltd. ++ Bldg 1,No.401,Caobao RD,Xuhui Dist ++ Shanghai 200233 ++ CN + + E4-B6-33 (hex) Wuxi Stars Microsystem Technology Co., Ltd + E4B633 (base 16) Wuxi Stars Microsystem Technology Co., Ltd +@@ -75998,16 +76016,10 @@ E4B633 (base 16) Wuxi Stars Microsystem Technology Co., Ltd + Dongguan Guangdong 523808 + CN + +-98-D9-3D (hex) Demant Enterprise A/S +-98D93D (base 16) Demant Enterprise A/S +- Kongebakken 9 +- Smorum 2765 +- DK +- +-B4-A6-78 (hex) Zhejiang Tmall Technology Co., Ltd. +-B4A678 (base 16) Zhejiang Tmall Technology Co., Ltd. +- No.969 Wenyi West Road, Wuchang Street, Yuhang District +- Hangzhou Zhejiang 310024 ++54-E1-5B (hex) Huawei Device Co., Ltd. ++54E15B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + + AC-C4-BD (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +@@ -76016,17 +76028,11 @@ ACC4BD (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + DONG GUAN GUANG DONG 523860 + CN + +-54-E1-5B (hex) Huawei Device Co., Ltd. +-54E15B (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-54-2F-04 (hex) Shanghai Longcheer Technology Co., Ltd. +-542F04 (base 16) Shanghai Longcheer Technology Co., Ltd. +- Bldg 1,No.401,Caobao RD,Xuhui Dist +- Shanghai 200233 +- CN ++AC-A3-2F (hex) Solidigm Technology ++ACA32F (base 16) Solidigm Technology ++ 1921 Corporate Center Circle, Suite 3B ++ Longmont 80501 ++ US + + C4-A1-0E (hex) IEEE Registration Authority + C4A10E (base 16) IEEE Registration Authority +@@ -76034,6 +76040,12 @@ C4A10E (base 16) IEEE Registration Authority + Piscataway NJ 08554 + US + ++AC-71-2E (hex) Fortinet, Inc. ++AC712E (base 16) Fortinet, Inc. ++ 899 Kifer Road ++ Sunnyvale 94086 ++ US ++ + 0C-EC-84 (hex) Shenzhen TINNO Mobile Technology Corp. + 0CEC84 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili +@@ -76064,6 +76076,18 @@ B43939 (base 16) Shenzhen TINNO Mobile Technology Corp. + HongKong 999077 + HK + ++98-D9-3D (hex) Demant Enterprise A/S ++98D93D (base 16) Demant Enterprise A/S ++ Kongebakken 9 ++ Smorum 2765 ++ DK ++ ++B4-A6-78 (hex) Zhejiang Tmall Technology Co., Ltd. ++B4A678 (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 ++ CN ++ + 88-F2-BD (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. + 88F2BD (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. + Midea Global Innovation Center,Beijiao Town,Shunde +@@ -76082,12 +76106,6 @@ A0F895 (base 16) Shenzhen TINNO Mobile Technology Corp. + NEW DELHI DELHI 110015 + IN + +-70-AC-08 (hex) Silicon Laboratories +-70AC08 (base 16) Silicon Laboratories +- 400 West Cesar Chavez Street +- Austin TX 78701 +- US +- + 2C-07-F6 (hex) SKG Health Technologies Co., Ltd. + 2C07F6 (base 16) SKG Health Technologies Co., Ltd. + 23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China +@@ -76106,24 +76124,6 @@ A47EFA (base 16) Withings + Issy-les-Moulineaux 92130 + FR + +-3C-26-E4 (hex) Cisco Systems, Inc +-3C26E4 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-38-91-B7 (hex) Cisco Systems, Inc +-3891B7 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-34-5D-A8 (hex) Cisco Systems, Inc +-345DA8 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- + 78-91-DE (hex) Guangdong ACIGA Science&Technology Co.,Ltd + 7891DE (base 16) Guangdong ACIGA Science&Technology Co.,Ltd + L203 Biguiyuan International Club, Beijiao Town, Shunde District +@@ -76136,6 +76136,12 @@ E0806B (base 16) Xiaomi Communications Co Ltd + Beijing Haidian District 100085 + CN + ++70-AC-08 (hex) Silicon Laboratories ++70AC08 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ + 70-50-E7 (hex) IEEE Registration Authority + 7050E7 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -76160,6 +76166,24 @@ B0E45C (base 16) Samsung Electronics Co.,Ltd + Suwon Gyeonggi-Do 16677 + KR + ++3C-26-E4 (hex) Cisco Systems, Inc ++3C26E4 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++38-91-B7 (hex) Cisco Systems, Inc ++3891B7 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++34-5D-A8 (hex) Cisco Systems, Inc ++345DA8 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ + BC-4C-A0 (hex) HUAWEI TECHNOLOGIES CO.,LTD + BC4CA0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -76172,18 +76196,6 @@ BC4CA0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-C4-12-EC (hex) HUAWEI TECHNOLOGIES CO.,LTD +-C412EC (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- +-6C-C2-42 (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-6CC242 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 +- CN +- + 68-7F-F0 (hex) TP-Link Corporation Limited + 687FF0 (base 16) TP-Link Corporation Limited + Room 901,9/F.New East Ocean Centre, 9 Science Museum Road +@@ -76202,6 +76214,18 @@ DC360C (base 16) Hitron Technologies. Inc + Bayan Lepas Penang 11900 + MY + ++C4-12-EC (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C412EC (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++60-CF-69 (hex) meerecompany ++60CF69 (base 16) meerecompany ++ 69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of Korea ++ Hwaseong-si 18630 ++ KR ++ + 4C-62-7B (hex) SmartCow AI Technologies Taiwan Ltd. + 4C627B (base 16) SmartCow AI Technologies Taiwan Ltd. + 16F., No. 102, Songlong Rd., Xinyi Dist., +@@ -76220,6 +76244,18 @@ F82B7F (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + ++40-C3-BC (hex) Huawei Device Co., Ltd. ++40C3BC (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++34-FE-1C (hex) CHOUNG HWA TECH CO.,LTD ++34FE1C (base 16) CHOUNG HWA TECH CO.,LTD ++ #31 Jangja-ro, Namdong-gu ++ Incheon-si 21532 ++ KR ++ + D8-68-A0 (hex) Samsung Electronics Co.,Ltd + D868A0 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -76232,10 +76268,10 @@ D868A0 (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-40-C3-BC (hex) Huawei Device Co., Ltd. +-40C3BC (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++6C-C2-42 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++6CC242 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 + CN + + 28-53-E0 (hex) Sintela Ltd +@@ -76244,78 +76280,66 @@ D868A0 (base 16) Samsung Electronics Co.,Ltd + Pill Bristol BS20 0DH + GB + +-60-CF-69 (hex) meerecompany +-60CF69 (base 16) meerecompany +- 69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of Korea +- Hwaseong-si 18630 +- KR +- +-34-FE-1C (hex) CHOUNG HWA TECH CO.,LTD +-34FE1C (base 16) CHOUNG HWA TECH CO.,LTD +- #31 Jangja-ro, Namdong-gu +- Incheon-si 21532 +- KR +- + F4-93-9F (hex) Hon Hai Precision Industry Co., Ltd. + F4939F (base 16) Hon Hai Precision Industry Co., Ltd. + GuangDongShenZhen + ShenZhen GuangDong 518109 + CN + +-A4-AE-12 (hex) Hon Hai Precision Industry Co., Ltd. +-A4AE12 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 ++AC-4E-65 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++AC4E65 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 + CN + +-38-F0-C8 (hex) Logitech +-38F0C8 (base 16) Logitech +- 7700 Gateway Blvd +- Newark CA 94560 +- US +- + BC-5D-A3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD + BC5DA3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD + No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County + Chengdu Sichuan 611330 + CN + +-80-75-1F (hex) SKY UK LIMITED +-80751F (base 16) SKY UK LIMITED ++80-72-15 (hex) SKY UK LIMITED ++807215 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-C0-A3-6E (hex) SKY UK LIMITED +-C0A36E (base 16) SKY UK LIMITED ++B0-3E-51 (hex) SKY UK LIMITED ++B03E51 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-00-A3-88 (hex) SKY UK LIMITED +-00A388 (base 16) SKY UK LIMITED ++80-75-1F (hex) SKY UK LIMITED ++80751F (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-AC-4E-65 (hex) Fiberhome Telecommunication Technologies Co.,LTD +-AC4E65 (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 ++A4-AE-12 (hex) Hon Hai Precision Industry Co., Ltd. ++A4AE12 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 + CN + +-80-72-15 (hex) SKY UK LIMITED +-807215 (base 16) SKY UK LIMITED ++C0-A3-6E (hex) SKY UK LIMITED ++C0A36E (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-B0-3E-51 (hex) SKY UK LIMITED +-B03E51 (base 16) SKY UK LIMITED ++00-A3-88 (hex) SKY UK LIMITED ++00A388 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + ++38-F0-C8 (hex) Logitech ++38F0C8 (base 16) Logitech ++ 7700 Gateway Blvd ++ Newark CA 94560 ++ US ++ + 1C-EF-03 (hex) Guangzhou V-SOLUTION Electronic Technology Co., Ltd. + 1CEF03 (base 16) Guangzhou V-SOLUTION Electronic Technology Co., Ltd. + Room 601,Originality Building B2, NO.162 Science Avenue,Science Town +@@ -76328,12 +76352,6 @@ B03E51 (base 16) SKY UK LIMITED + KYOTO KYOTO 601-8501 + JP + +-54-45-38 (hex) Texas Instruments +-544538 (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- + 74-13-EA (hex) Intel Corporate + 7413EA (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -76358,53 +76376,35 @@ B0DCEF (base 16) Intel Corporate + Kulim Kedah 09000 + MY + +-2C-A7-74 (hex) Texas Instruments +-2CA774 (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- +-DC-F3-1C (hex) Texas Instruments +-DCF31C (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- + 28-BC-05 (hex) BLU Products Inc + 28BC05 (base 16) BLU Products Inc + 10814 NW 33rd Street + Miami FL 33172 + US + ++2C-A7-74 (hex) Texas Instruments ++2CA774 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ + 18-4E-03 (hex) HMD Global Oy + 184E03 (base 16) HMD Global Oy + Bertel Jungin aukio 9 + Espoo 02600 + FI + +-40-22-D8 (hex) Espressif Inc. +-4022D8 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- + E0-08-71 (hex) Dongguan Liesheng Electronic Co., Ltd. + E00871 (base 16) Dongguan Liesheng Electronic Co., Ltd. + F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci + dongguan guangdong 523000 + CN + +-90-65-60 (hex) EM Microelectronic +-906560 (base 16) EM Microelectronic +- Rue des Sors 3 +- Marin-Epagnier Neuchatel 2074 +- CH +- +-A0-FB-83 (hex) Honor Device Co., Ltd. +-A0FB83 (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 +- CN ++9C-95-6E (hex) Microchip Technology Inc. ++9C956E (base 16) Microchip Technology Inc. ++ 2355 W. Chandler Blvd. ++ Chandler AZ 85224 ++ US + + DC-0B-09 (hex) Cisco Systems, Inc + DC0B09 (base 16) Cisco Systems, Inc +@@ -76418,17 +76418,17 @@ DC0B09 (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-88-0A-A3 (hex) Juniper Networks +-880AA3 (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 ++DC-F3-1C (hex) Texas Instruments ++DCF31C (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 + US + +-04-D9-C8 (hex) Hon Hai Precision Industry Co., Ltd. +-04D9C8 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN ++54-45-38 (hex) Texas Instruments ++544538 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US + + 78-C2-13 (hex) Sagemcom Broadband SAS + 78C213 (base 16) Sagemcom Broadband SAS +@@ -76436,6 +76436,12 @@ DC0B09 (base 16) Cisco Systems, Inc + Rueil Malmaison Cedex hauts de seine 92848 + FR + ++40-22-D8 (hex) Espressif Inc. ++4022D8 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ + A0-36-BC (hex) ASUSTek COMPUTER INC. + A036BC (base 16) ASUSTek COMPUTER INC. + 15,Li-Te Rd., Peitou, Taipei 112, Taiwan +@@ -76448,29 +76454,23 @@ A036BC (base 16) ASUSTek COMPUTER INC. + Cranbrook British Columbia V1C 2L9 + CA + +-9C-95-6E (hex) Microchip Technology Inc. +-9C956E (base 16) Microchip Technology Inc. +- 2355 W. Chandler Blvd. +- Chandler AZ 85224 +- US +- + 84-0B-BB (hex) MitraStar Technology Corp. + 840BBB (base 16) MitraStar Technology Corp. + No. 6, Innovation Road II, + Hsinchu 300 + TW + +-70-B3-06 (hex) Apple, Inc. +-70B306 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US ++04-D9-C8 (hex) Hon Hai Precision Industry Co., Ltd. ++04D9C8 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN + +-B8-49-6D (hex) Apple, Inc. +-B8496D (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US ++A0-FB-83 (hex) Honor Device Co., Ltd. ++A0FB83 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN + + 9C-92-4F (hex) Apple, Inc. + 9C924F (base 16) Apple, Inc. +@@ -76490,12 +76490,96 @@ F0D793 (base 16) Apple, Inc. + Cupertino CA 95014 + US + ++70-B3-06 (hex) Apple, Inc. ++70B306 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++B8-49-6D (hex) Apple, Inc. ++B8496D (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++90-65-60 (hex) EM Microelectronic ++906560 (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ ++88-0A-A3 (hex) Juniper Networks ++880AA3 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ + 30-3D-51 (hex) IEEE Registration Authority + 303D51 (base 16) IEEE Registration Authority + 445 Hoes Lane + Piscataway NJ 08554 + US + ++CC-D3-C1 (hex) Vestel Elektronik San ve Tic. A.S. ++CCD3C1 (base 16) Vestel Elektronik San ve Tic. A.S. ++ Organize san ++ Manisa Turket 45030 ++ TR ++ ++EC-BE-5F (hex) Vestel Elektronik San ve Tic. A.S. ++ECBE5F (base 16) Vestel Elektronik San ve Tic. A.S. ++ Organize san ++ Manisa Turket 45030 ++ TR ++ ++F4-BB-C7 (hex) vivo Mobile Communication Co., Ltd. ++F4BBC7 (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++4C-36-4E (hex) Panasonic Connect Co., Ltd. ++4C364E (base 16) Panasonic Connect Co., Ltd. ++ 4-1-62 Minoshima, Hakata-ku ++ Fukuoka-shi Fukuoka 812-8531 ++ JP ++ ++98-66-10 (hex) zte corporation ++986610 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++44-71-47 (hex) Beijing Xiaomi Electronics Co.,Ltd ++447147 (base 16) Beijing Xiaomi Electronics Co.,Ltd ++ Xiaomi Campus ++ Beijing Beijing 100085 ++ CN ++ ++A8-DC-5A (hex) Digital Watchdog ++A8DC5A (base 16) Digital Watchdog ++ 16220 Bloomfield Ave ++ Cerritos CA 90703 ++ US ++ ++1C-24-CD (hex) ASKEY COMPUTER CORP ++1C24CD (base 16) ASKEY COMPUTER CORP ++ 10F, No.119, JIANKANG RD.,ZHINGHE DIST, ++ NEW TAIPEI CITY 23585 ++ TW ++ ++DC-AA-43 (hex) Shenzhen Terca Information Technology Co., Ltd. ++DCAA43 (base 16) Shenzhen Terca Information Technology Co., Ltd. ++ Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen ++ SHENZHEN GUANGDONG 518000 ++ CN ++ ++00-FB-F9 (hex) Axiado Corporation ++00FBF9 (base 16) Axiado Corporation ++ 2610 Orchard Parkway, Suite 300 ++ San Jose CA 95134 ++ US ++ + 84-80-94 (hex) Meter, Inc. + 848094 (base 16) Meter, Inc. + 148 Townsend St +@@ -79160,12 +79244,6 @@ A4EA8E (base 16) Extreme Networks, Inc. + San Jose CA 94568 + US + +-00-09-DF (hex) Vestel Elektronik San ve Tic. A.Ş. +-0009DF (base 16) Vestel Elektronik San ve Tic. A.Ş. +- Organize san +- Manisa Turket 45030 +- TR +- + F4-03-2F (hex) Reduxio Systems + F4032F (base 16) Reduxio Systems + 2 Granit St +@@ -113789,18 +113867,6 @@ B4B742 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-60-BE-B4 (hex) S-Bluetech co., limited +-60BEB4 (base 16) S-Bluetech co., limited +- Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu +- Shenzhen Guangdong 518000 +- CN +- +-90-DF-7D (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +-90DF7D (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +- No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. +- Chongqing China 401120 +- CN +- + 50-C1-F0 (hex) NXP Semiconductor (Tianjin) LTD. + 50C1F0 (base 16) NXP Semiconductor (Tianjin) LTD. + No.15 Xinghua Avenue, Xiqing Economic Development Area +@@ -113813,6 +113879,24 @@ F4848D (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Shenzhen Guangdong 518057 + CN + ++58-11-22 (hex) ASUSTek COMPUTER INC. ++581122 (base 16) ASUSTek COMPUTER INC. ++ 15,Li-Te Rd., Peitou, Taipei 112, Taiwan ++ Taipei Taiwan 112 ++ TW ++ ++60-BE-B4 (hex) S-Bluetech co., limited ++60BEB4 (base 16) S-Bluetech co., limited ++ Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu ++ Shenzhen Guangdong 518000 ++ CN ++ ++90-DF-7D (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++90DF7D (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ + A8-54-A2 (hex) Heimgard Technologies AS + A854A2 (base 16) Heimgard Technologies AS + Dronning Mauds gate 15 +@@ -113837,11 +113921,11 @@ B87EE5 (base 16) Intelbras + São José Santa Catarina 88104800 + BR + +-58-11-22 (hex) ASUSTek COMPUTER INC. +-581122 (base 16) ASUSTek COMPUTER INC. +- 15,Li-Te Rd., Peitou, Taipei 112, Taiwan +- Taipei Taiwan 112 +- TW ++94-AB-FE (hex) Nokia ++94ABFE (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA + + 74-69-4A (hex) Sichuan Tianyi Comheart Telecom Co.,LTD + 74694A (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +@@ -113855,12 +113939,6 @@ B87EE5 (base 16) Intelbras + shenzhen 518000 + CN + +-94-AB-FE (hex) Nokia +-94ABFE (base 16) Nokia +- 600 March Road +- Kanata Ontario K2K 2E6 +- CA +- + 98-A9-2D (hex) New H3C Technologies Co., Ltd + 98A92D (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District +@@ -113885,6 +113963,18 @@ B87EE5 (base 16) Intelbras + Austin TX 78759 + US + ++E0-03-6B (hex) Samsung Electronics Co.,Ltd ++E0036B (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++18-69-D4 (hex) Samsung Electronics Co.,Ltd ++1869D4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ + D4-F0-EA (hex) Beijing Xiaomi Mobile Software Co., Ltd + D4F0EA (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District +@@ -113897,12 +113987,6 @@ D4F0EA (base 16) Beijing Xiaomi Mobile Software Co., Ltd + Suzhou 215021 + CN + +-E0-03-6B (hex) Samsung Electronics Co.,Ltd +-E0036B (base 16) Samsung Electronics Co.,Ltd +- 129, Samsung-ro, Youngtongl-Gu +- Suwon Gyeonggi-Do 16677 +- KR +- + 80-69-1A (hex) Belkin International Inc. + 80691A (base 16) Belkin International Inc. + 12045 East Waterfront Drive +@@ -113957,6 +114041,18 @@ E046EE (base 16) NETGEAR + San Jose CA 95134 + US + ++DC-BE-49 (hex) ITEL MOBILE LIMITED ++DCBE49 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK ++ ++9C-95-61 (hex) Hui Zhou Gaoshengda Technology Co.,LTD ++9C9561 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD ++ No.75,Zhongkai High-Tech Development District,Huizhou ++ Hui Zhou Guangdong 516006 ++ CN ++ + 9C-4F-5F (hex) Google, Inc. + 9C4F5F (base 16) Google, Inc. + 15 rue Castel +@@ -113975,36 +114071,24 @@ A02942 (base 16) Intel Corporate + Hsichu Taiwan 300 + TW + +-04-63-D0 (hex) Huawei Device Co., Ltd. +-0463D0 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- + F0-D4-15 (hex) Intel Corporate + F0D415 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +-18-69-D4 (hex) Samsung Electronics Co.,Ltd +-1869D4 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR ++D4-D8-53 (hex) Intel Corporate ++D4D853 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + +-9C-95-61 (hex) Hui Zhou Gaoshengda Technology Co.,LTD +-9C9561 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD +- No.75,Zhongkai High-Tech Development District,Huizhou +- Hui Zhou Guangdong 516006 ++04-63-D0 (hex) Huawei Device Co., Ltd. ++0463D0 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + +-DC-BE-49 (hex) ITEL MOBILE LIMITED +-DCBE49 (base 16) ITEL MOBILE LIMITED +- RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K +- Hong Kong KOWLOON 999077 +- HK +- + 14-44-8F (hex) Edgecore Networks Corporation + 14448F (base 16) Edgecore Networks Corporation + 1 Creation RD 3. +@@ -114017,6 +114101,18 @@ DCBE49 (base 16) ITEL MOBILE LIMITED + Reno NV 89507 + US + ++C0-ED-E5 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++C0EDE5 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++10-A5-62 (hex) Iton Technology Corp. ++10A562 (base 16) Iton Technology Corp. ++ Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District ++ Shenzhen Guangdong 518116 ++ CN ++ + D4-A3-EB (hex) Shenzhen iComm Semiconductor CO.,LTD + D4A3EB (base 16) Shenzhen iComm Semiconductor CO.,LTD + Room 601,Block B ,Digital Building,Garden City +@@ -114047,12 +114143,6 @@ B89FCC (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Kanata Ontario K2K 2E6 + CA + +-D4-D8-53 (hex) Intel Corporate +-D4D853 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- + 8C-76-3F (hex) ARRIS Group, Inc. + 8C763F (base 16) ARRIS Group, Inc. + 6450 Sequence Drive +@@ -114071,18 +114161,6 @@ C0A938 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-C0-ED-E5 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +-C0EDE5 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +- NO.18 HAIBIN ROAD, +- DONG GUAN GUANG DONG 523860 +- CN +- +-10-A5-62 (hex) Iton Technology Corp. +-10A562 (base 16) Iton Technology Corp. +- Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District +- Shenzhen Guangdong 518116 +- CN +- + 5C-24-E2 (hex) Suzhou Denbom Electronic S&T Co., Ltd + 5C24E2 (base 16) Suzhou Denbom Electronic S&T Co., Ltd + 3F,Building 2, No.415,Changyang Street +@@ -114119,12 +114197,6 @@ BCC746 (base 16) Hon Hai Precision IND.CO.,LTD + New Taipei City Banqiao Dist. 220871 + TW + +-64-FD-96 (hex) Sagemcom Broadband SAS +-64FD96 (base 16) Sagemcom Broadband SAS +- 250, route de l'Empereur +- Rueil Malmaison Cedex hauts de seine 92848 +- FR +- + FC-B9-7E (hex) GE Appliances + FCB97E (base 16) GE Appliances + 4000 Buechel Bank Road +@@ -114143,6 +114215,12 @@ FCB97E (base 16) GE Appliances + Beijing 100089 + CN + ++64-FD-96 (hex) Sagemcom Broadband SAS ++64FD96 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ + C8-EB-EC (hex) Shenzhen YOUHUA Technology Co., Ltd + C8EBEC (base 16) Shenzhen YOUHUA Technology Co., Ltd + Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District +@@ -114155,6 +114233,24 @@ C8EBEC (base 16) Shenzhen YOUHUA Technology Co., Ltd + New Taipei City Taiwan 235 + TW + ++94-C5-A6 (hex) ITEL MOBILE LIMITED ++94C5A6 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK ++ ++7C-EC-B1 (hex) Apple, Inc. ++7CECB1 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++5C-E9-1E (hex) Apple, Inc. ++5CE91E (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + E0-D7-38 (hex) WireStar Networks + E0D738 (base 16) WireStar Networks + PO Box 10966 +@@ -114173,29 +114269,23 @@ E0D738 (base 16) WireStar Networks + SHANGHAI 201114 + CN + +-7C-EC-B1 (hex) Apple, Inc. +-7CECB1 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- +-5C-E9-1E (hex) Apple, Inc. +-5CE91E (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- + A8-B0-AE (hex) BizLink Special Cables Germany GmbH + A8B0AE (base 16) BizLink Special Cables Germany GmbH + Eschstrasse 1 + Friesoythe 26169 + DE + +-94-C5-A6 (hex) ITEL MOBILE LIMITED +-94C5A6 (base 16) ITEL MOBILE LIMITED +- RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K +- Hong Kong KOWLOON 999077 +- HK ++F0-B6-61 (hex) eero inc. ++F0B661 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ ++E0-6A-05 (hex) Shenzhen YOUHUA Technology Co., Ltd ++E06A05 (base 16) Shenzhen YOUHUA Technology Co., Ltd ++ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District ++ Shenzhen Guangdong 518055 ++ CN + + 48-57-D2 (hex) Broadcom Limited + 4857D2 (base 16) Broadcom Limited +@@ -114221,12 +114311,6 @@ D834EE (base 16) SHURE INCORPORATED + NILES IL 60714 + US + +-F0-B6-61 (hex) eero inc. +-F0B661 (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 +- US +- + 04-25-F0 (hex) Nokia + 0425F0 (base 16) Nokia + 600 March Road +@@ -114239,10 +114323,16 @@ F0B661 (base 16) eero inc. + Kyoto 619-0237 + JP + +-E0-6A-05 (hex) Shenzhen YOUHUA Technology Co., Ltd +-E06A05 (base 16) Shenzhen YOUHUA Technology Co., Ltd +- Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District +- Shenzhen Guangdong 518055 ++40-3B-7B (hex) Huawei Device Co., Ltd. ++403B7B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++08-30-CE (hex) Fiberhome Telecommunication Technologies Co.,LTD ++0830CE (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 + CN + + 90-CD-1F (hex) Quectel Wireless Solutions Co.,Ltd. +@@ -114275,18 +114365,6 @@ E06A05 (base 16) Shenzhen YOUHUA Technology Co., Ltd + Rueil Malmaison Cedex hauts de seine 92848 + FR + +-40-3B-7B (hex) Huawei Device Co., Ltd. +-403B7B (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-08-30-CE (hex) Fiberhome Telecommunication Technologies Co.,LTD +-0830CE (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 +- CN +- + B0-A2-E7 (hex) Shenzhen TINNO Mobile Technology Corp. + B0A2E7 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili +@@ -114305,12 +114383,24 @@ BC4101 (base 16) Shenzhen TINNO Mobile Technology Corp. + Nanshan District, Shenzhen PRC 518053 + CN + ++18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp. ++18D61C (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ + 74-97-79 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + 749779 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China + Nanning Guangxi 530007 + CN + ++34-CF-6C (hex) Hangzhou Taili wireless communication equipment Co.,Ltd ++34CF6C (base 16) Hangzhou Taili wireless communication equipment Co.,Ltd ++ Room 1901, No.258, Zhonghe Middle Road, Shangcheng District, Hangzhou ++ Hangzhou Zhejiang 310003 ++ CN ++ + F8-CD-C8 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD + F8CDC8 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD + No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +@@ -114323,16 +114413,10 @@ B0285B (base 16) JUHUA Technology Inc. + Shenzhen City Guangdong Province 518117 + CN + +-18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp. +-18D61C (base 16) Shenzhen TINNO Mobile Technology Corp. +- Building, No.33, Xiandong Rd, Xili +- Nanshan District, Shenzhen PRC 518053 +- CN +- +-34-CF-6C (hex) Hangzhou Taili wireless communication equipment Co.,Ltd +-34CF6C (base 16) Hangzhou Taili wireless communication equipment Co.,Ltd +- Room 1901, No.258, Zhonghe Middle Road, Shangcheng District, Hangzhou +- Hangzhou Zhejiang 310003 ++C8-24-96 (hex) Jiangsu Yinhe Electronics Co.,Ltd. ++C82496 (base 16) Jiangsu Yinhe Electronics Co.,Ltd. ++ No.188 Nanhuan Road, TangQiao Town ++ Zhangjiagang Jiangsu 215611 + CN + + E0-F6-78 (hex) Fiberhome Telecommunication Technologies Co.,LTD +@@ -114341,17 +114425,29 @@ E0F678 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + Wuhan Hubei 430074 + CN + ++40-22-30 (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++402230 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++14-5B-B9 (hex) ConMet ++145BB9 (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US ++ + 28-F7-D6 (hex) Fiberhome Telecommunication Technologies Co.,LTD + 28F7D6 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road + Wuhan Hubei 430074 + CN + +-C8-24-96 (hex) Jiangsu Yinhe Electronics Co.,Ltd. +-C82496 (base 16) Jiangsu Yinhe Electronics Co.,Ltd. +- No.188 Nanhuan Road, TangQiao Town +- Zhangjiagang Jiangsu 215611 +- CN ++B8-B4-09 (hex) Samsung Electronics Co.,Ltd ++B8B409 (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR + + 24-18-C0 (hex) E. Wehrle GmbH + 2418C0 (base 16) E. Wehrle GmbH +@@ -114359,12 +114455,6 @@ C82496 (base 16) Jiangsu Yinhe Electronics Co.,Ltd. + 78120 Furtwangen Baden-Württemberg 78120 + DE + +-14-5B-B9 (hex) ConMet +-145BB9 (base 16) ConMet +- 5701 SE Columbia Way +- Vancouver WA 98661 +- US +- + AC-83-F0 (hex) Cobalt Digital Inc. + AC83F0 (base 16) Cobalt Digital Inc. + 2506 Galen Drive +@@ -114377,6 +114467,12 @@ AC15A2 (base 16) TP-Link Corporation Limited + Tsim Sha Tsui Kowloon 999077 + HK + ++AC-DF-9F (hex) Arcadyan Corporation ++ACDF9F (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW ++ + B8-59-C8 (hex) 70mai Co.,Ltd. + B859C8 (base 16) 70mai Co.,Ltd. + Room 2220, building 2, No. 588, Zixing road +@@ -114389,23 +114485,11 @@ A8E207 (base 16) GOIP Global Services Pvt. Ltd. + Noida Uttar Pradesh 201301 + IN + +-40-22-30 (hex) Shenzhen SuperElectron Technology Co.,Ltd. +-402230 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. +- 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city +- Shenzhen Guangdong 518000 +- CN +- +-B8-B4-09 (hex) Samsung Electronics Co.,Ltd +-B8B409 (base 16) Samsung Electronics Co.,Ltd +- 129, Samsung-ro, Youngtongl-Gu +- Suwon Gyeonggi-Do 16677 +- KR +- +-AC-DF-9F (hex) Arcadyan Corporation +-ACDF9F (base 16) Arcadyan Corporation +- No.8, Sec.2, Guangfu Rd. +- Hsinchu City Hsinchu 30071 +- TW ++74-E7-98 (hex) Juniper Networks ++74E798 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US + + D4-E2-2F (hex) Roku, Inc + D4E22F (base 16) Roku, Inc +@@ -114443,18 +114527,6 @@ C43CB0 (base 16) SHENZHEN BILIAN ELECTRONIC CO.,LTD + Mianyang Sichuan 622650 + CN + +-D8-7E-6F (hex) CASCINATION AG +-D87E6F (base 16) CASCINATION AG +- Steigerhubelstrasse 3 +- Bern Bern 3008 +- CH +- +-04-4F-7A (hex) China Mobile Group Device Co.,Ltd. +-044F7A (base 16) China Mobile Group Device Co.,Ltd. +- 32 Xuanwumen West Street,Xicheng District +- Beijing 100053 +- CN +- + 40-5E-F6 (hex) Samsung Electronics Co.,Ltd + 405EF6 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -114479,23 +114551,29 @@ D87E6F (base 16) CASCINATION AG + Reno NV 89507 + US + ++04-4F-7A (hex) China Mobile Group Device Co.,Ltd. ++044F7A (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ + C0-4E-30 (hex) Espressif Inc. + C04E30 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +-74-E7-98 (hex) Juniper Networks +-74E798 (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 +- US ++AC-60-6F (hex) Nokia Shanghai Bell Co., Ltd. ++AC606F (base 16) Nokia Shanghai Bell Co., Ltd. ++ No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai ++ Shanghai 201206 ++ CN + +-E0-16-B1 (hex) Advanced Design Technology co.,ltd. +-E016B1 (base 16) Advanced Design Technology co.,ltd. +- 1-1-3 Kotobukicho#10F Mitsukikotobukichobiru +- Fucyu-city Tokyo 1830056 +- JP ++D8-7E-6F (hex) CASCINATION AG ++D87E6F (base 16) CASCINATION AG ++ Steigerhubelstrasse 3 ++ Bern Bern 3008 ++ CH + + 54-31-D4 (hex) TGW Mechanics GmbH + 5431D4 (base 16) TGW Mechanics GmbH +@@ -114509,44 +114587,50 @@ E016B1 (base 16) Advanced Design Technology co.,ltd. + Wuhan Hubei 430206 + CN + +-C0-69-11 (hex) Arista Networks +-C06911 (base 16) Arista Networks +- 5453 Great America Parkway +- Santa Clara CA 95054 +- US +- +-E4-B5-55 (hex) Huawei Device Co., Ltd. +-E4B555 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-24-A7-DC (hex) SKY UK LIMITED +-24A7DC (base 16) SKY UK LIMITED ++00-19-FB (hex) SKY UK LIMITED ++0019FB (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-38-A6-CE (hex) SKY UK LIMITED +-38A6CE (base 16) SKY UK LIMITED ++78-3E-53 (hex) SKY UK LIMITED ++783E53 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-AC-60-6F (hex) Nokia Shanghai Bell Co., Ltd. +-AC606F (base 16) Nokia Shanghai Bell Co., Ltd. +- No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai +- Shanghai 201206 +- CN +- +-00-19-FB (hex) SKY UK LIMITED +-0019FB (base 16) SKY UK LIMITED ++24-A7-DC (hex) SKY UK LIMITED ++24A7DC (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-78-3E-53 (hex) SKY UK LIMITED +-783E53 (base 16) SKY UK LIMITED ++E0-16-B1 (hex) Advanced Design Technology co.,ltd. ++E016B1 (base 16) Advanced Design Technology co.,ltd. ++ 1-1-3 Kotobukicho#10F Mitsukikotobukichobiru ++ Fucyu-city Tokyo 1830056 ++ JP ++ ++E4-B5-55 (hex) Huawei Device Co., Ltd. ++E4B555 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++C0-69-11 (hex) Arista Networks ++C06911 (base 16) Arista Networks ++ 5453 Great America Parkway ++ Santa Clara CA 95054 ++ US ++ ++2C-93-FB (hex) Sercomm France Sarl ++2C93FB (base 16) Sercomm France Sarl ++ 2/4 Rue Maurice Hartmann 92370 Issy Les Moulineaux France ++ Moulineaux 92370 ++ FR ++ ++38-A6-CE (hex) SKY UK LIMITED ++38A6CE (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB +@@ -114635,11 +114719,11 @@ BC69CB (base 16) Panasonic Electric Works Networks Co., Ltd. + Kulim Kedah 09000 + MY + +-2C-93-FB (hex) Sercomm France Sarl +-2C93FB (base 16) Sercomm France Sarl +- 2/4 Rue Maurice Hartmann 92370 Issy Les Moulineaux France +- Moulineaux 92370 +- FR ++58-2B-0A (hex) Texas Instruments ++582B0A (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US + + B4-46-6B (hex) REALTIMEID AS + B4466B (base 16) REALTIMEID AS +@@ -114647,12 +114731,6 @@ B4466B (base 16) REALTIMEID AS + Snåsa 7760 + NO + +-90-6A-EB (hex) Microsoft Corporation +-906AEB (base 16) Microsoft Corporation +- One Microsoft Way +- REDMOND WA 98052 +- US +- + C4-EB-39 (hex) Sagemcom Broadband SAS + C4EB39 (base 16) Sagemcom Broadband SAS + 250, route de l'Empereur +@@ -114665,17 +114743,11 @@ C4EB39 (base 16) Sagemcom Broadband SAS + Taipei City 10690 + TW + +-08-9D-F4 (hex) Intel Corporate +-089DF4 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-DC-46-28 (hex) Intel Corporate +-DC4628 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++F0-C1-CE (hex) GoodWe Technologies CO., Ltd ++F0C1CE (base 16) GoodWe Technologies CO., Ltd ++ No.90 Zijin Rd.,New District,Suzhou,215011,China ++ Suzhou JiangSu 215011 ++ CN + + 0C-91-92 (hex) Intel Corporate + 0C9192 (base 16) Intel Corporate +@@ -114695,23 +114767,23 @@ DC4628 (base 16) Intel Corporate + Shenzhen 518000 + CN + +-F0-C1-CE (hex) GoodWe Technologies CO., Ltd +-F0C1CE (base 16) GoodWe Technologies CO., Ltd +- No.90 Zijin Rd.,New District,Suzhou,215011,China +- Suzhou JiangSu 215011 +- CN ++08-9D-F4 (hex) Intel Corporate ++089DF4 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + +-58-2B-0A (hex) Texas Instruments +-582B0A (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US ++DC-46-28 (hex) Intel Corporate ++DC4628 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + +-D8-E8-44 (hex) zte corporation +-D8E844 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN ++90-6A-EB (hex) Microsoft Corporation ++906AEB (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US + + E4-6A-35 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + E46A35 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +@@ -114737,6 +114809,18 @@ E838A0 (base 16) Vizio, Inc + Irvine CA 92618 + US + ++EC-C0-7A (hex) Laird Connectivity ++ECC07A (base 16) Laird Connectivity ++ 3F.-1, No.145, Xianzheng 9th Rd., ++ Zhubei 30251 ++ TW ++ ++68-B9-C2 (hex) Earda Technologies co Ltd ++68B9C2 (base 16) Earda Technologies co Ltd ++ Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District ++ Guangzhou Guangdong 511455 ++ CN ++ + C8-1E-C2 (hex) ITEL MOBILE LIMITED + C81EC2 (base 16) ITEL MOBILE LIMITED + RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K +@@ -114749,10 +114833,10 @@ C81EC2 (base 16) ITEL MOBILE LIMITED + Hui Zhou Guangdong 516025 + CN + +-68-B9-C2 (hex) Earda Technologies co Ltd +-68B9C2 (base 16) Earda Technologies co Ltd +- Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District +- Guangzhou Guangdong 511455 ++D8-E8-44 (hex) zte corporation ++D8E844 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + + 68-83-CB (hex) Apple, Inc. +@@ -114761,18 +114845,66 @@ C81EC2 (base 16) ITEL MOBILE LIMITED + Cupertino CA 95014 + US + +-EC-C0-7A (hex) Laird Connectivity +-ECC07A (base 16) Laird Connectivity +- 3F.-1, No.145, Xianzheng 9th Rd., +- Zhubei 30251 ++FC-12-63 (hex) ASKEY COMPUTER CORP ++FC1263 (base 16) ASKEY COMPUTER CORP ++ 10F,No.119,JIANKANG RD,ZHONGHE DIST ++ NEW TAIPEI TAIWAN 23585 + TW + ++58-30-5B (hex) Shanghai Junqian Sensing Technology Co.,LTD ++58305B (base 16) Shanghai Junqian Sensing Technology Co.,LTD ++ Room 602,Building 1,NO.760,Xinjunhuan Road, Caohejing High-Tech Park,Minhang District, ++ Shanghai Shanghai 201114 ++ CN ++ ++C0-71-AA (hex) ShenZhen OnMicro Electronics Co.,Ltd. ++C071AA (base 16) ShenZhen OnMicro Electronics Co.,Ltd. ++ Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District ++ Shenzhen GuangDong 518057 ++ CN ++ + 9C-05-91 (hex) Mellanox Technologies, Inc. + 9C0591 (base 16) Mellanox Technologies, Inc. + 350 Oakmead Parkway, Suite 100 + Sunnyvale CA 94085 + US + ++70-9C-45 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++709C45 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++00-09-DF (hex) Vestel Elektronik San ve Tic. A.S. ++0009DF (base 16) Vestel Elektronik San ve Tic. A.S. ++ Organize san ++ Manisa Turket 45030 ++ TR ++ ++A0-31-31 (hex) Procenne Digital Security ++A03131 (base 16) Procenne Digital Security ++ Eski Buyukdere Cd. No:7/12 Maslak ++ Istanbul Sariyer 34398 ++ TR ++ ++FC-07-36 (hex) Huawei Device Co., Ltd. ++FC0736 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++94-A0-7D (hex) Huawei Device Co., Ltd. ++94A07D (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++5C-07-58 (hex) Ufispace Co., LTD. ++5C0758 (base 16) Ufispace Co., LTD. ++ 9F., No. 81 Jhongcheng Rd., Tucheng Dist., ++ New Taipei 23674 ++ TW ++ + F8-D0-27 (hex) Seiko Epson Corporation + F8D027 (base 16) Seiko Epson Corporation + 2070 Kotobuki Koaka +@@ -152054,10 +152186,10 @@ B4E265 (base 16) Shenzhen SDMC Technology Co.,LTD + Shenzhen GUANGDONG 518027 + CN + +-EC-7C-5C (hex) Juniper Networks +-EC7C5C (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 ++CC-60-C8 (hex) Microsoft Corporation ++CC60C8 (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 + US + + 00-EB-D8 (hex) MERCUSYS TECHNOLOGIES CO., LTD. +@@ -152066,12 +152198,6 @@ EC7C5C (base 16) Juniper Networks + Shenzhen Guangdong 518057 + CN + +-CC-60-C8 (hex) Microsoft Corporation +-CC60C8 (base 16) Microsoft Corporation +- One Microsoft Way +- REDMOND WA 98052 +- US +- + 6C-8D-77 (hex) Cisco Systems, Inc + 6C8D77 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -152090,6 +152216,12 @@ B417A8 (base 16) Facebook Technologies, LLC + Menlo Park CA 94025 + US + ++EC-7C-5C (hex) Juniper Networks ++EC7C5C (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ + 10-54-D2 (hex) IEEE Registration Authority + 1054D2 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -152108,12 +152240,6 @@ C4DF39 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Chongqing China 401120 + CN + +-10-63-4B (hex) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. +-10634B (base 16) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. +- 3/F, Building R1-B, High-Tech Industrial Park, Nanshan District +- Shenzhen Guangdong 518057 +- CN +- + 80-97-33 (hex) Shenzhen Elebao Technology Co., Ltd + 809733 (base 16) Shenzhen Elebao Technology Co., Ltd + F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District +@@ -152150,18 +152276,6 @@ D8365F (base 16) Intelbras + Moscow\ 117335 + RU + +-E8-4D-EC (hex) Xerox Corporation +-E84DEC (base 16) Xerox Corporation +- 800 Phillips Rd +- Webster NY 14450 +- US +- +-C8-B8-2F (hex) eero inc. +-C8B82F (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 +- US +- + 54-78-C9 (hex) AMPAK Technology,Inc. + 5478C9 (base 16) AMPAK Technology,Inc. + 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, +@@ -152186,60 +152300,54 @@ FC101A (base 16) Palo Alto Networks + Rueil Malmaison Cedex hauts de seine 92848 + FR + +-B8-5D-C3 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-B85DC3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 ++10-63-4B (hex) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++10634B (base 16) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++ 3/F, Building R1-B, High-Tech Industrial Park, Nanshan District ++ Shenzhen Guangdong 518057 + CN + ++E8-4D-EC (hex) Xerox Corporation ++E84DEC (base 16) Xerox Corporation ++ 800 Phillips Rd ++ Webster NY 14450 ++ US ++ ++C8-B8-2F (hex) eero inc. ++C8B82F (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ + B4-3A-E2 (hex) HUAWEI TECHNOLOGIES CO.,LTD + B43AE2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-D0-A4-6F (hex) China Dragon Technology Limited +-D0A46F (base 16) China Dragon Technology Limited +- B4 Bldg.Haoshan 1st Industry Park, +- Shenzhen Guangdong 518104 +- CN +- + F0-C8-B5 (hex) HUAWEI TECHNOLOGIES CO.,LTD + F0C8B5 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-2C-60-CD (hex) NR ELECTRIC CO., LTD +-2C60CD (base 16) NR ELECTRIC CO., LTD +- 69,Suyuan Avenue +- Nanjing Jiangsu 211102 +- CN +- +-8C-1E-80 (hex) Cisco Systems, Inc +-8C1E80 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-A4-1E-E1 (hex) Taicang T&W Electronics +-A41EE1 (base 16) Taicang T&W Electronics +- 89# Jiang Nan RD +- Suzhou Jiangsu 215412 ++B8-5D-C3 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++B85DC3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-E8-FB-1C (hex) AzureWave Technology Inc. +-E8FB1C (base 16) AzureWave Technology Inc. +- 8F., No. 94, Baozhong Rd. +- New Taipei City Taiwan 231 +- TW +- + B4-A7-C6 (hex) SERVERCOM (INDIA) PRIVATE LIMITED + B4A7C6 (base 16) SERVERCOM (INDIA) PRIVATE LIMITED + E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI + NEW DELHI NA + IN + ++D0-A4-6F (hex) China Dragon Technology Limited ++D0A46F (base 16) China Dragon Technology Limited ++ B4 Bldg.Haoshan 1st Industry Park, ++ Shenzhen Guangdong 518104 ++ CN ++ + 1C-76-F2 (hex) Samsung Electronics Co.,Ltd + 1C76F2 (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu +@@ -152258,6 +152366,12 @@ B4A7C6 (base 16) SERVERCOM (INDIA) PRIVATE LIMITED + Gumi Gyeongbuk 730-350 + KR + ++2C-60-CD (hex) NR ELECTRIC CO., LTD ++2C60CD (base 16) NR ELECTRIC CO., LTD ++ 69,Suyuan Avenue ++ Nanjing Jiangsu 211102 ++ CN ++ + 28-6B-35 (hex) Intel Corporate + 286B35 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -152270,6 +152384,18 @@ B4A7C6 (base 16) SERVERCOM (INDIA) PRIVATE LIMITED + Piscataway NJ 08554 + US + ++A4-1E-E1 (hex) Taicang T&W Electronics ++A41EE1 (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 ++ CN ++ ++E8-FB-1C (hex) AzureWave Technology Inc. ++E8FB1C (base 16) AzureWave Technology Inc. ++ 8F., No. 94, Baozhong Rd. ++ New Taipei City Taiwan 231 ++ TW ++ + C0-EE-40 (hex) Laird Connectivity + C0EE40 (base 16) Laird Connectivity + 50 South Main St +@@ -152282,72 +152408,12 @@ A47D9F (base 16) Shenzhen iComm Semiconductor CO.,LTD + Shenzhen No.1079 Nanhai Road,Nanshan District 518067 + CN + +-84-EA-97 (hex) Shenzhen iComm Semiconductor CO.,LTD +-84EA97 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-14-B2-E5 (hex) Shenzhen iComm Semiconductor CO.,LTD +-14B2E5 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-E0-CB-56 (hex) Shenzhen iComm Semiconductor CO.,LTD +-E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- + 30-04-5C (hex) Shenzhen SuperElectron Technology Co.,Ltd. + 30045C (base 16) Shenzhen SuperElectron Technology Co.,Ltd. + 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city + Shenzhen Guangdong 518000 + CN + +-90-79-CF (hex) zte corporation +-9079CF (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- +-88-8F-A4 (hex) Huawei Device Co., Ltd. +-888FA4 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-3C-82-C0 (hex) Technicolor CH USA Inc. +-3C82C0 (base 16) Technicolor CH USA Inc. +- 5030 Sugarloaf Parkway Bldg 6 +- Lawrenceville GA 30044 +- US +- +-C4-DE-E2 (hex) Espressif Inc. +-C4DEE2 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- +-68-B6-B3 (hex) Espressif Inc. +-68B6B3 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- +-FC-A0-5A (hex) Oray.com co., LTD. +-FCA05A (base 16) Oray.com co., LTD. +- 8008Rm, building No.1 GuoDing d. Yangpu District +- Shanghai Shanghai 200433 +- CN +- +-90-48-6C (hex) Ring LLC +-90486C (base 16) Ring LLC +- 1523 26th St +- Santa Monica CA 90404 +- US +- + 3C-46-45 (hex) Shanghai Infinity Wireless Technologies Co.,Ltd. + 3C4645 (base 16) Shanghai Infinity Wireless Technologies Co.,Ltd. + Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai +@@ -152372,12 +152438,30 @@ A4F933 (base 16) Intel Corporate + Kulim Kedah 09000 + MY + ++88-8F-A4 (hex) Huawei Device Co., Ltd. ++888FA4 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ + 50-68-AC (hex) Huawei Device Co., Ltd. + 5068AC (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + ++90-79-CF (hex) zte corporation ++9079CF (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++8C-1E-80 (hex) Cisco Systems, Inc ++8C1E80 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ + 50-39-2F (hex) INGRAM MICRO SERVICES + 50392F (base 16) INGRAM MICRO SERVICES + 100 CHEMIN DE BAILLOT +@@ -152402,11 +152486,53 @@ FC8417 (base 16) Honor Device Co., Ltd. + San Diego CA 92121 + US + +-AC-B5-66 (hex) Renesas Electronics (Penang) Sdn. Bhd. +-ACB566 (base 16) Renesas Electronics (Penang) Sdn. Bhd. +- Phase 3, Bayan Lepas FIZ +- Bayan Lepas Penang 11900 +- MY ++C4-DE-E2 (hex) Espressif Inc. ++C4DEE2 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++68-B6-B3 (hex) Espressif Inc. ++68B6B3 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++FC-A0-5A (hex) Oray.com co., LTD. ++FCA05A (base 16) Oray.com co., LTD. ++ 8008Rm, building No.1 GuoDing d. Yangpu District ++ Shanghai Shanghai 200433 ++ CN ++ ++84-EA-97 (hex) Shenzhen iComm Semiconductor CO.,LTD ++84EA97 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++14-B2-E5 (hex) Shenzhen iComm Semiconductor CO.,LTD ++14B2E5 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++E0-CB-56 (hex) Shenzhen iComm Semiconductor CO.,LTD ++E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++90-48-6C (hex) Ring LLC ++90486C (base 16) Ring LLC ++ 1523 26th St ++ Santa Monica CA 90404 ++ US ++ ++3C-82-C0 (hex) Technicolor CH USA Inc. ++3C82C0 (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US + + 10-24-07 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 102407 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +@@ -152426,12 +152552,6 @@ D021AC (base 16) Yohana + Palo Alto CA 94304 + US + +-38-1F-26 (hex) IEEE Registration Authority +-381F26 (base 16) IEEE Registration Authority +- 445 Hoes Lane +- Piscataway NJ 08554 +- US +- + 7C-E1-52 (hex) THE GOODYEAR TIRE & RUBBER COMPANY + 7CE152 (base 16) THE GOODYEAR TIRE & RUBBER COMPANY + 200 Innovation Way +@@ -152450,17 +152570,17 @@ D021AC (base 16) Yohana + Mérignac 33700 + FR + +-50-E6-36 (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH +-50E636 (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH +- Alt-Moabit 95 +- Berlin Berlin 10559 +- DE ++AC-B5-66 (hex) Renesas Electronics (Penang) Sdn. Bhd. ++ACB566 (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY + +-78-20-BD (hex) Polysense (Beijing) Technologies Co. Ltd +-7820BD (base 16) Polysense (Beijing) Technologies Co. Ltd +- 9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist. +- Beijing 100085 +- CN ++38-1F-26 (hex) IEEE Registration Authority ++381F26 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US + + EC-21-25 (hex) Toshiba Corp. + EC2125 (base 16) Toshiba Corp. +@@ -152468,17 +152588,35 @@ EC2125 (base 16) Toshiba Corp. + Tokyo 105-8001 + JP + ++00-E5-F1 (hex) BUFFALO.INC ++00E5F1 (base 16) BUFFALO.INC ++ AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku ++ Nagoya Aichi Pref. 460-8315 ++ JP ++ ++34-EE-2A (hex) ConMet ++34EE2A (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US ++ ++50-E6-36 (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH ++50E636 (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH ++ Alt-Moabit 95 ++ Berlin Berlin 10559 ++ DE ++ + 68-4E-05 (hex) HUNAN FN-LINK TECHNOLOGY LIMITED + 684E05 (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED + No.8, Litong Road, Liuyan Economic & Tec + Changsha HUNAN 410329 + CN + +-04-99-BB (hex) Apple, Inc. +-0499BB (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US ++78-20-BD (hex) Polysense (Beijing) Technologies Co. Ltd ++7820BD (base 16) Polysense (Beijing) Technologies Co. Ltd ++ 9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist. ++ Beijing 100085 ++ CN + + F0-4D-D4 (hex) Sagemcom Broadband SAS + F04DD4 (base 16) Sagemcom Broadband SAS +@@ -152486,11 +152624,17 @@ F04DD4 (base 16) Sagemcom Broadband SAS + Rueil Malmaison Cedex hauts de seine 92848 + FR + +-00-E5-F1 (hex) BUFFALO.INC +-00E5F1 (base 16) BUFFALO.INC +- AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku +- Nagoya Aichi Pref. 460-8315 +- JP ++AC-29-29 (hex) Infinix mobility limited ++AC2929 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ ++5C-1B-F4 (hex) Apple, Inc. ++5C1BF4 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US + + A8-51-AB (hex) Apple, Inc. + A851AB (base 16) Apple, Inc. +@@ -152498,17 +152642,35 @@ A851AB (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-5C-1B-F4 (hex) Apple, Inc. +-5C1BF4 (base 16) Apple, Inc. ++3C-CE-0D (hex) Shenzhen juduoping Technology Co.,Ltd ++3CCE0D (base 16) Shenzhen juduoping Technology Co.,Ltd ++ Baoan Xin'an Streat ++ Shenzhen 002052 ++ CN ++ ++04-99-BB (hex) Apple, Inc. ++0499BB (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-34-EE-2A (hex) ConMet +-34EE2A (base 16) ConMet +- 5701 SE Columbia Way +- Vancouver WA 98661 +- US ++60-E9-AA (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++60E9AA (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++24-0F-5E (hex) Shenzhen z-router Technology Co., Ltd ++240F5E (base 16) Shenzhen z-router Technology Co., Ltd ++ 406,Block A,Taojindi Building ,Tenglong Road,Longhua New District, ++ Shenzhen GuangDong 518000 ++ CN ++ ++E8-3A-4B (hex) China Mobile Group Device Co.,Ltd. ++E83A4B (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN + + 78-66-9D (hex) Hui Zhou Gaoshengda Technology Co.,LTD + 78669D (base 16) Hui Zhou Gaoshengda Technology Co.,LTD +@@ -152522,30 +152684,30 @@ A851AB (base 16) Apple, Inc. + Delft 2628 XJ + NL + +-90-49-92 (hex) YSTen Technology Co.,Ltd +-904992 (base 16) YSTen Technology Co.,Ltd +- Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing. +- Beijing 100101 +- CN +- +-AC-29-29 (hex) Infinix mobility limited +-AC2929 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- +-3C-CE-0D (hex) Shenzhen juduoping Technology Co.,Ltd +-3CCE0D (base 16) Shenzhen juduoping Technology Co.,Ltd +- Baoan Xin'an Streat +- Shenzhen 002052 +- CN +- + 00-0E-DD (hex) SHURE INCORPORATED + 000EDD (base 16) SHURE INCORPORATED + 5800 W. TOUHY AVE. + NILES IL 60714 + US + ++6C-97-6D (hex) Motorola Mobility LLC, a Lenovo Company ++6C976D (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ ++64-11-A4 (hex) Motorola Mobility LLC, a Lenovo Company ++6411A4 (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ ++90-49-92 (hex) YSTen Technology Co.,Ltd ++904992 (base 16) YSTen Technology Co.,Ltd ++ Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing. ++ Beijing 100101 ++ CN ++ + 18-FD-74 (hex) Routerboard.com + 18FD74 (base 16) Routerboard.com + Mikrotikls SIA +@@ -152576,42 +152738,6 @@ E4902A (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-E8-3A-4B (hex) China Mobile Group Device Co.,Ltd. +-E83A4B (base 16) China Mobile Group Device Co.,Ltd. +- 32 Xuanwumen West Street,Xicheng District +- Beijing 100053 +- CN +- +-60-E9-AA (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +-60E9AA (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +- B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China +- Nanning Guangxi 530007 +- CN +- +-24-0F-5E (hex) Shenzhen z-router Technology Co., Ltd +-240F5E (base 16) Shenzhen z-router Technology Co., Ltd +- 406,Block A,Taojindi Building ,Tenglong Road,Longhua New District, +- Shenzhen GuangDong 518000 +- CN +- +-6C-97-6D (hex) Motorola Mobility LLC, a Lenovo Company +-6C976D (base 16) Motorola Mobility LLC, a Lenovo Company +- 222 West Merchandise Mart Plaza +- Chicago IL 60654 +- US +- +-64-11-A4 (hex) Motorola Mobility LLC, a Lenovo Company +-6411A4 (base 16) Motorola Mobility LLC, a Lenovo Company +- 222 West Merchandise Mart Plaza +- Chicago IL 60654 +- US +- +-10-F0-68 (hex) Ruckus Wireless +-10F068 (base 16) Ruckus Wireless +- 350 West Java Drive +- Sunnyvale CA 94089 +- US +- + F0-87-7F (hex) Magnetar Technology Shenzhen Co., LTD. + F0877F (base 16) Magnetar Technology Shenzhen Co., LTD. + Room211, Building1, No.26 Puzai Road, Pingdi Longgang +@@ -152630,10 +152756,10 @@ C8D6B7 (base 16) Solidigm Technology + Longmont CO 80501 + US + +-60-5B-30 (hex) Dell Inc. +-605B30 (base 16) Dell Inc. +- One Dell Way +- Round Rock TX 78682 ++10-F0-68 (hex) Ruckus Wireless ++10F068 (base 16) Ruckus Wireless ++ 350 West Java Drive ++ Sunnyvale CA 94089 + US + + 44-3C-9C (hex) Pintsch GmbH +@@ -152642,6 +152768,18 @@ C8D6B7 (base 16) Solidigm Technology + Dinslaken 46537 + DE + ++20-64-DE (hex) Sunitec Enterprise Co.,Ltd ++2064DE (base 16) Sunitec Enterprise Co.,Ltd ++ 3F.,No.98-1,Mincyuan Rd.Sindian City ++ Taipei County 231 231141 ++ CN ++ ++A4-0F-98 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++A40F98 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ + D8-80-DC (hex) Huawei Device Co., Ltd. + D880DC (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -152672,12 +152810,6 @@ F46C68 (base 16) Wistron Neweb Corporation + shenzhen guangdong 518057 + CN + +-20-64-DE (hex) Sunitec Enterprise Co.,Ltd +-2064DE (base 16) Sunitec Enterprise Co.,Ltd +- 3F.,No.98-1,Mincyuan Rd.Sindian City +- Taipei County 231 231141 +- CN +- + 74-B7-25 (hex) Huawei Device Co., Ltd. + 74B725 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -152690,12 +152822,6 @@ F46C68 (base 16) Wistron Neweb Corporation + Dongguan Guangdong 523808 + CN + +-A4-0F-98 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +-A40F98 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +- NO.18 HAIBIN ROAD, +- DONG GUAN GUANG DONG 523860 +- CN +- + BC-44-34 (hex) Shenzhen TINNO Mobile Technology Corp. + BC4434 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili +@@ -152708,6 +152834,12 @@ BC4434 (base 16) Shenzhen TINNO Mobile Technology Corp. + Minato-ku Tokyo 108-0075 + JP + ++60-5B-30 (hex) Dell Inc. ++605B30 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US ++ + 34-AC-11 (hex) China Mobile Group Device Co.,Ltd. + 34AC11 (base 16) China Mobile Group Device Co.,Ltd. + 32 Xuanwumen West Street,Xicheng District +@@ -152780,6 +152912,24 @@ DC71DD (base 16) AX Technologies + Singapore 556741 + SG + ++3C-69-D1 (hex) ADC Automotive Distance Control System GmbH ++3C69D1 (base 16) ADC Automotive Distance Control System GmbH ++ Peter-Dornier Strasse 10 ++ Lindau Bavaria 88131 ++ DE ++ ++04-BA-D6 (hex) D-Link Corporation ++04BAD6 (base 16) D-Link Corporation ++ No.289, Sinhu 3rd Rd., Neihu District, ++ Taipei City 114 ++ TW ++ ++30-3F-5D (hex) PT HAN SUNG ELECTORONICS INDONESIA ++303F5D (base 16) PT HAN SUNG ELECTORONICS INDONESIA ++ JL.PALEM 1 BLOK DS-6 ++ KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN BEKASI JAWA BARAT 17550 ++ ID ++ + 30-7F-10 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + 307F10 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, +@@ -152804,35 +152954,23 @@ B0FBDD (base 16) Shenzhen SuperElectron Technology Co.,Ltd. + Shenzhen Guangdong 518000 + CN + +-3C-69-D1 (hex) ADC Automotive Distance Control System GmbH +-3C69D1 (base 16) ADC Automotive Distance Control System GmbH +- Peter-Dornier Strasse 10 +- Lindau Bavaria 88131 +- DE +- + E0-9C-8D (hex) Seakeeper, Inc. + E09C8D (base 16) Seakeeper, Inc. + 45310 Abell House Lane Suite 350 + California MD 20619 + US + +-04-BA-D6 (hex) D-Link Corporation +-04BAD6 (base 16) D-Link Corporation +- No.289, Sinhu 3rd Rd., Neihu District, +- Taipei City 114 +- TW +- + 34-3A-20 (hex) Aruba, a Hewlett Packard Enterprise Company + 343A20 (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 + US + +-30-3F-5D (hex) PT HAN SUNG ELECTORONICS INDONESIA +-303F5D (base 16) PT HAN SUNG ELECTORONICS INDONESIA +- JL.PALEM 1 BLOK DS-6 +- KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN BEKASI JAWA BARAT 17550 +- ID ++7C-0C-92 (hex) Suzhou Mobydata Smart System Co.,Ltd. ++7C0C92 (base 16) Suzhou Mobydata Smart System Co.,Ltd. ++ 3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China ++ Suzhou Jingsu 215000 ++ CN + + 18-E9-1D (hex) HUAWEI TECHNOLOGIES CO.,LTD + 18E91D (base 16) HUAWEI TECHNOLOGIES CO.,LTD +@@ -152852,6 +152990,12 @@ F46ADD (base 16) Liteon Technology Corporation + New Taipei City Taiwan 23585 + TW + ++98-D7-42 (hex) Samsung Electronics Co.,Ltd ++98D742 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ + C8-2A-F1 (hex) TCT mobile ltd + C82AF1 (base 16) TCT mobile ltd + No.86 hechang 7th road, zhongkai, Hi-Tech District +@@ -152870,60 +153014,12 @@ A842E3 (base 16) Espressif Inc. + Shanghai Shanghai 201203 + CN + +-7C-0C-92 (hex) Suzhou Mobydata Smart System Co.,Ltd. +-7C0C92 (base 16) Suzhou Mobydata Smart System Co.,Ltd. +- 3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China +- Suzhou Jingsu 215000 +- CN +- + 04-26-05 (hex) Bosch Building Automation GmbH + 042605 (base 16) Bosch Building Automation GmbH + Kapellenweg 42 + Verl 33415 + DE + +-3C-FE-AC (hex) Cisco Systems, Inc +-3CFEAC (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-04-A7-41 (hex) Cisco Systems, Inc +-04A741 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-A0-88-9D (hex) Huawei Device Co., Ltd. +-A0889D (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-98-D7-42 (hex) Samsung Electronics Co.,Ltd +-98D742 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- +-D4-9B-74 (hex) Kinetic Technologies +-D49B74 (base 16) Kinetic Technologies +- 6399 San Ignacio Ave #250 +- San Jose CA 95119 +- US +- +-40-F8-DF (hex) CANON INC. +-40F8DF (base 16) CANON INC. +- 30-2 Shimomaruko 3-chome, +- Ohta-ku Tokyo 146-8501 +- JP +- +-20-47-ED (hex) SKY UK LIMITED +-2047ED (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- + A0-BD-CD (hex) SKY UK LIMITED + A0BDCD (base 16) SKY UK LIMITED + 130 Kings Road +@@ -152960,6 +153056,42 @@ A0BDCD (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + ++3C-FE-AC (hex) Cisco Systems, Inc ++3CFEAC (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++04-A7-41 (hex) Cisco Systems, Inc ++04A741 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++A0-88-9D (hex) Huawei Device Co., Ltd. ++A0889D (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++D4-9B-74 (hex) Kinetic Technologies ++D49B74 (base 16) Kinetic Technologies ++ 6399 San Ignacio Ave #250 ++ San Jose CA 95119 ++ US ++ ++20-47-ED (hex) SKY UK LIMITED ++2047ED (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++40-F8-DF (hex) CANON INC. ++40F8DF (base 16) CANON INC. ++ 30-2 Shimomaruko 3-chome, ++ Ohta-ku Tokyo 146-8501 ++ JP ++ + F4-6B-8C (hex) Hon Hai Precision Industry Co., Ltd. + F46B8C (base 16) Hon Hai Precision Industry Co., Ltd. + GuangDongShenZhen +@@ -152972,6 +153104,12 @@ F46B8C (base 16) Hon Hai Precision Industry Co., Ltd. + Calamba Lot 1 + PH + ++F4-3B-D8 (hex) Intel Corporate ++F43BD8 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + 7C-67-AB (hex) Roku, Inc + 7C67AB (base 16) Roku, Inc + 1155 Coleman Ave +@@ -152984,18 +153122,6 @@ F46B8C (base 16) Hon Hai Precision Industry Co., Ltd. + Piscataway NJ 08554 + US + +-F4-3B-D8 (hex) Intel Corporate +-F43BD8 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-C8-4B-D6 (hex) Dell Inc. +-C84BD6 (base 16) Dell Inc. +- One Dell Way +- Round Rock TX 78682 +- US +- + E0-86-14 (hex) Novatel Wireless Solutions, Inc. + E08614 (base 16) Novatel Wireless Solutions, Inc. + 9710 Scranton Rd., Suite 200 +@@ -153008,6 +153134,18 @@ A8DE68 (base 16) Beijing Wide Technology Co.,Ltd + Beijing Beijing 100000 + CN + ++3C-4E-56 (hex) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++3C4E56 (base 16) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++ Unit East Block22-24/F,Skyworth semiconductor design Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China ++ SHENZHEN GUANGDONG 518057 ++ CN ++ ++C8-4B-D6 (hex) Dell Inc. ++C84BD6 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US ++ + 6C-30-2A (hex) Texas Instruments + 6C302A (base 16) Texas Instruments + 12500 TI Blvd +@@ -153020,6 +153158,12 @@ A8DE68 (base 16) Beijing Wide Technology Co.,Ltd + Dallas TX 75243 + US + ++08-B6-1F (hex) Espressif Inc. ++08B61F (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ + 94-4E-5B (hex) Ubee Interactive Co., Limited + 944E5B (base 16) Ubee Interactive Co., Limited + Flat/RM 1202, 12/F, AT Tower, 180 Electric Road +@@ -153056,16 +153200,10 @@ FC6179 (base 16) IEEE Registration Authority + Piscataway NJ 08554 + US + +-3C-4E-56 (hex) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD +-3C4E56 (base 16) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD +- Unit East Block22-24/F,Skyworth semiconductor design Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China +- SHENZHEN GUANGDONG 518057 +- CN +- +-08-B6-1F (hex) Espressif Inc. +-08B61F (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 ++4C-72-74 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd ++4C7274 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd ++ Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China ++ ShenZHEN GuangDong 518104 + CN + + 98-A2-C0 (hex) Cisco Systems, Inc +@@ -153080,12 +153218,6 @@ EC74D7 (base 16) Grandstream Networks Inc + boston MA 02215 + US + +-4C-72-74 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd +-4C7274 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd +- Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China +- ShenZHEN GuangDong 518104 +- CN +- + 30-63-71 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd + 306371 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd + Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China +@@ -153104,6 +153236,24 @@ EC74D7 (base 16) Grandstream Networks Inc + shenzhen guangdong 518057 + CN + ++5C-3E-1B (hex) Apple, Inc. ++5C3E1B (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++7C-2A-CA (hex) Apple, Inc. ++7C2ACA (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++28-8E-EC (hex) Apple, Inc. ++288EEC (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + A0-8C-F2 (hex) YINUOLINK CO.,LTD + A08CF2 (base 16) YINUOLINK CO.,LTD + 3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an +@@ -153128,24 +153278,84 @@ F4931C (base 16) Universal Electronics, Inc. + Santa Ana CA 92707 + US + +-5C-3E-1B (hex) Apple, Inc. +-5C3E1B (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 ++C8-84-8C (hex) Ruckus Wireless ++C8848C (base 16) Ruckus Wireless ++ 350 West Java Drive ++ Sunnyvale CA 94089 + US + +-7C-2A-CA (hex) Apple, Inc. +-7C2ACA (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US ++B0-78-39 (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. ++B07839 (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. ++ Midea Global Innovation Center,Beijiao Town,Shunde ++ Foshan Guangdong 528311 ++ CN + +-28-8E-EC (hex) Apple, Inc. +-288EEC (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 ++74-9E-75 (hex) Aruba, a Hewlett Packard Enterprise Company ++749E75 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 + US + ++E0-5A-1B (hex) Espressif Inc. ++E05A1B (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++48-8A-E8 (hex) vivo Mobile Communication Co., Ltd. ++488AE8 (base 16) vivo Mobile Communication Co., Ltd. ++ No.1, vivo Road, Chang'an ++ Dongguan Guangdong 523860 ++ CN ++ ++CC-BA-6F (hex) HUAWEI TECHNOLOGIES CO.,LTD ++CCBA6F (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++78-5C-5E (hex) HUAWEI TECHNOLOGIES CO.,LTD ++785C5E (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++98-81-8A (hex) Huawei Device Co., Ltd. ++98818A (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++A8-AA-7C (hex) Huawei Device Co., Ltd. ++A8AA7C (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++B4-C2-F7 (hex) Huawei Device Co., Ltd. ++B4C2F7 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++1C-32-83 (hex) COMTTI Intelligent Technology(Shenzhen) Co., Ltd. ++1C3283 (base 16) COMTTI Intelligent Technology(Shenzhen) Co., Ltd. ++ Building 7/6 building 6 room 307, Area A, Baoan Internet Industrial Base, Mabu Community, Xixiang Street, Baoan District, ++ Shenzhen Guangdong 518000 ++ CN ++ ++F4-1C-71 (hex) SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD ++F41C71 (base 16) SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD ++ 17/F,Block 1A,Software Industry Base, XueFu Road,Nanshan District, ++ Shenzhen GuangDong 518100 ++ CN ++ ++70-11-0E (hex) zte corporation ++70110E (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ + 7C-8A-E1 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD. + 7C8AE1 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD. + NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE +@@ -159575,12 +159785,6 @@ FC9114 (base 16) Technicolor CH USA Inc. + Lawrenceville GA 30044 + US + +-48-6D-BB (hex) Vestel Elektronik San ve Tic. A.Ş. +-486DBB (base 16) Vestel Elektronik San ve Tic. A.Ş. +- Organize san +- Manisa Turket 45030 +- TR +- + 00-2A-10 (hex) Cisco Systems, Inc + 002A10 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -190325,6 +190529,18 @@ BC6193 (base 16) Xiaomi Communications Co Ltd + Beijing Haidian District 100085 + CN + ++94-7F-D8 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++947FD8 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ ++C8-54-A4 (hex) Infinix mobility limited ++C854A4 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ + EC-71-DB (hex) Reolink Innovation Limited + EC71DB (base 16) Reolink Innovation Limited + 705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET +@@ -190343,12 +190559,6 @@ F8E57E (base 16) Cisco Systems, Inc + Seoul Seocho-Gu #137-902 + KR + +-94-7F-D8 (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-947FD8 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 +- CN +- + 38-5B-44 (hex) Silicon Laboratories + 385B44 (base 16) Silicon Laboratories + 400 West Cesar Chavez Street +@@ -190391,6 +190601,12 @@ EC6073 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Shenzhen Guangdong 518057 + CN + ++74-DD-CB (hex) China Leadshine Technology Co.,Ltd ++74DDCB (base 16) China Leadshine Technology Co.,Ltd ++ 9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan? ++ SHENZHEN 518000 ++ CN ++ + 10-4D-15 (hex) Viaanix Inc + 104D15 (base 16) Viaanix Inc + 434 N Main St. +@@ -190403,18 +190619,6 @@ EC6073 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Shenzhen Nanshan District 518000 + CN + +-C8-54-A4 (hex) Infinix mobility limited +-C854A4 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- +-A0-09-2E (hex) zte corporation +-A0092E (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- + B0-AF-F7 (hex) Shenzhen Yipingfang Network Technology Co., Ltd. + B0AFF7 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. + 21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China +@@ -190433,12 +190637,18 @@ B0AFF7 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. + Changsha HUNAN 410329 + CN + +-74-DD-CB (hex) China Leadshine Technology Co.,Ltd +-74DDCB (base 16) China Leadshine Technology Co.,Ltd +- 9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan? +- SHENZHEN 518000 ++A0-09-2E (hex) zte corporation ++A0092E (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + ++14-75-5B (hex) Intel Corporate ++14755B (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + A8-B1-3B (hex) HP Inc. + A8B13B (base 16) HP Inc. + 10300 Energy Dr +@@ -190457,6 +190667,12 @@ C43875 (base 16) Sonos, Inc. + Reno NV 89507 + US + ++20-89-8A (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++20898A (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ + DC-A9-56 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + DCA956 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, +@@ -190475,24 +190691,12 @@ BCD206 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-20-89-8A (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-20898A (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 ++CC-82-7F (hex) Advantech Technology (CHINA) Co., Ltd. ++CC827F (base 16) Advantech Technology (CHINA) Co., Ltd. ++ No.666, Han-Pu Rd. Yu-Shan ++ Kun-Shan Jiang Su 215316 + CN + +-14-75-5B (hex) Intel Corporate +-14755B (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-F4-E2-04 (hex) COYOTE SYSTEM +-F4E204 (base 16) COYOTE SYSTEM +- 1, rue Royale +- Saint-Cloud 92210 +- FR +- + F8-4E-58 (hex) Samsung Electronics Co.,Ltd + F84E58 (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu +@@ -190505,11 +190709,29 @@ B47064 (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-CC-82-7F (hex) Advantech Technology (CHINA) Co., Ltd. +-CC827F (base 16) Advantech Technology (CHINA) Co., Ltd. +- No.666, Han-Pu Rd. Yu-Shan +- Kun-Shan Jiang Su 215316 +- CN ++4C-2E-5E (hex) Samsung Electronics Co.,Ltd ++4C2E5E (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++64-5D-F4 (hex) Samsung Electronics Co.,Ltd ++645DF4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++D8-10-68 (hex) Murata Manufacturing Co., Ltd. ++D81068 (base 16) Murata Manufacturing Co., Ltd. ++ 1-10-1, Higashikotari ++ Nagaokakyo-shi Kyoto 617-8555 ++ JP ++ ++5C-04-5A (hex) Company NA Stage & Light ++5C045A (base 16) Company NA Stage & Light ++ Lambertu 9 ++ M?rupe LV-2167 ++ LV + + 88-3F-0C (hex) system a.v. co., ltd. + 883F0C (base 16) system a.v. co., ltd. +@@ -190529,17 +190751,11 @@ C8BE35 (base 16) Extreme Networks, Inc. + Kulim Kedah 09000 + MY + +-D8-10-68 (hex) Murata Manufacturing Co., Ltd. +-D81068 (base 16) Murata Manufacturing Co., Ltd. +- 1-10-1, Higashikotari +- Nagaokakyo-shi Kyoto 617-8555 +- JP +- +-5C-04-5A (hex) Company NA Stage & Light +-5C045A (base 16) Company NA Stage & Light +- Lambertu 9 +- M?rupe LV-2167 +- LV ++F4-E2-04 (hex) COYOTE SYSTEM ++F4E204 (base 16) COYOTE SYSTEM ++ 1, rue Royale ++ Saint-Cloud 92210 ++ FR + + 58-C3-56 (hex) EM Microelectronic + 58C356 (base 16) EM Microelectronic +@@ -190565,17 +190781,11 @@ CCDD58 (base 16) Robert Bosch GmbH + Stuttgart 70499 + DE + +-4C-2E-5E (hex) Samsung Electronics Co.,Ltd +-4C2E5E (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- +-64-5D-F4 (hex) Samsung Electronics Co.,Ltd +-645DF4 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR ++D4-E0-53 (hex) Aruba, a Hewlett Packard Enterprise Company ++D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US + + 88-FC-5D (hex) Cisco Systems, Inc + 88FC5D (base 16) Cisco Systems, Inc +@@ -190607,11 +190817,11 @@ F4C88A (base 16) Intel Corporate + Beijing 100053 + CN + +-D4-E0-53 (hex) Aruba, a Hewlett Packard Enterprise Company +-D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 +- US ++50-28-4A (hex) Intel Corporate ++50284A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + + 5C-A4-F4 (hex) zte corporation + 5CA4F4 (base 16) zte corporation +@@ -190625,11 +190835,11 @@ D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company + kakuda-City Miyagi-Pref 981-1595 + JP + +-50-28-4A (hex) Intel Corporate +-50284A (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++24-6C-60 (hex) Huawei Device Co., Ltd. ++246C60 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN + + 98-C9-7C (hex) Shenzhen iComm Semiconductor CO.,LTD + 98C97C (base 16) Shenzhen iComm Semiconductor CO.,LTD +@@ -190637,11 +190847,11 @@ D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company + Shenzhen No.1079 Nanhai Road,Nanshan District 518067 + CN + +-24-6C-60 (hex) Huawei Device Co., Ltd. +-246C60 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN ++30-3E-A7 (hex) Intel Corporate ++303EA7 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + + 28-A3-31 (hex) Sierra Wireless + 28A331 (base 16) Sierra Wireless +@@ -190649,12 +190859,6 @@ D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company + Richmond BC V6V 3A4 + CA + +-18-34-AF (hex) Kaonmedia CO., LTD. +-1834AF (base 16) Kaonmedia CO., LTD. +- 884-3, Seongnam-daero, Bundang-gu +- Seongnam-si Gyeonggi-do 13517 +- KR +- + EC-62-60 (hex) Espressif Inc. + EC6260 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area +@@ -190667,23 +190871,23 @@ B06E72 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Chongqing China 401120 + CN + +-30-3E-A7 (hex) Intel Corporate +-303EA7 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- + 60-7D-09 (hex) Luxshare Precision Industry Co., Ltd + 607D09 (base 16) Luxshare Precision Industry Co., Ltd + 2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District + Shenzhen City Guangdong Province 518100 + CN + +-CC-3E-79 (hex) ARRIS Group, Inc. +-CC3E79 (base 16) ARRIS Group, Inc. +- 6450 Sequence Drive +- San Diego CA 92121 +- US ++18-34-AF (hex) Kaonmedia CO., LTD. ++1834AF (base 16) Kaonmedia CO., LTD. ++ 884-3, Seongnam-daero, Bundang-gu ++ Seongnam-si Gyeonggi-do 13517 ++ KR ++ ++28-82-7C (hex) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++28827C (base 16) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++ No.17 Longmen Road ++ Changzhou JiangSu 213164 ++ CN + + 28-F5-D1 (hex) ARRIS Group, Inc. + 28F5D1 (base 16) ARRIS Group, Inc. +@@ -190697,12 +190901,6 @@ CC3E79 (base 16) ARRIS Group, Inc. + San Diego CA 92121 + US + +-28-82-7C (hex) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch +-28827C (base 16) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch +- No.17 Longmen Road +- Changzhou JiangSu 213164 +- CN +- + 90-D4-73 (hex) vivo Mobile Communication Co., Ltd. + 90D473 (base 16) vivo Mobile Communication Co., Ltd. + No.1, vivo Road, Chang'an +@@ -190715,6 +190913,30 @@ CC3E79 (base 16) ARRIS Group, Inc. + Dongguan 523808 + CN + ++CC-3E-79 (hex) ARRIS Group, Inc. ++CC3E79 (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US ++ ++00-16-A3 (hex) INGETEAM ++0016A3 (base 16) INGETEAM ++ Parque Tecnologico de Bizkaia, Edificio 110 ++ Zamudio Bizkaia 48170 ++ ES ++ ++F0-6C-5D (hex) Xiaomi Communications Co Ltd ++F06C5D (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++24-CF-24 (hex) Beijing Xiaomi Mobile Software Co., Ltd ++24CF24 (base 16) Beijing Xiaomi Mobile Software Co., Ltd ++ The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District ++ Beijing Beijing 100085 ++ CN ++ + C8-F0-9E (hex) Espressif Inc. + C8F09E (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area +@@ -190733,16 +190955,16 @@ DC5475 (base 16) Espressif Inc. + San Francisco 94158 + US + +-00-16-A3 (hex) INGETEAM +-0016A3 (base 16) INGETEAM +- Parque Tecnologico de Bizkaia, Edificio 110 +- Zamudio Bizkaia 48170 +- ES ++28-6F-40 (hex) Tonly Technology Co. Ltd ++286F40 (base 16) Tonly Technology Co. Ltd ++ Section 37, Zhongkai Hi-Tech Development Zone ++ Huizhou Guangdong 516006 ++ CN + +-24-CF-24 (hex) Beijing Xiaomi Mobile Software Co., Ltd +-24CF24 (base 16) Beijing Xiaomi Mobile Software Co., Ltd +- The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District +- Beijing Beijing 100085 ++0C-86-C7 (hex) Jabil Circuit (Guangzhou) Limited ++0C86C7 (base 16) Jabil Circuit (Guangzhou) Limited ++ Huangpu 128, JunCheng Road ++ GuangZhou Guangdong 510530 + CN + + 1C-0D-7D (hex) Apple, Inc. +@@ -190763,48 +190985,6 @@ DC5475 (base 16) Espressif Inc. + Cupertino CA 95014 + US + +-F0-6C-5D (hex) Xiaomi Communications Co Ltd +-F06C5D (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- +-40-B0-2F (hex) Miele & Cie. KG +-40B02F (base 16) Miele & Cie. KG +- Carl-Miele-Straße 29 +- Gütersloh 33332 +- DE +- +-18-66-F0 (hex) Jupiter Systems +-1866F0 (base 16) Jupiter Systems +- 31015 Huntwood Ave +- Hayward CA 94544-7007 +- US +- +-74-60-4C (hex) RØDE +-74604C (base 16) RØDE +- 107 Carnarvon St +- Silverwater NSW 2128 +- AU +- +-28-6F-40 (hex) Tonly Technology Co. Ltd +-286F40 (base 16) Tonly Technology Co. Ltd +- Section 37, Zhongkai Hi-Tech Development Zone +- Huizhou Guangdong 516006 +- CN +- +-BC-C7-DA (hex) Earda Technologies co Ltd +-BCC7DA (base 16) Earda Technologies co Ltd +- Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District +- Guangzhou Guangdong 511455 +- CN +- +-0C-86-C7 (hex) Jabil Circuit (Guangzhou) Limited +-0C86C7 (base 16) Jabil Circuit (Guangzhou) Limited +- Huangpu 128, JunCheng Road +- GuangZhou Guangdong 510530 +- CN +- + 14-94-6C (hex) Apple, Inc. + 14946C (base 16) Apple, Inc. + 1 Infinite Loop +@@ -190817,11 +190997,17 @@ BCC7DA (base 16) Earda Technologies co Ltd + Piscataway NJ 08554 + US + +-58-00-32 (hex) Genexis B.V. +-580032 (base 16) Genexis B.V. +- Lodewijkstraat 1A +- Eindhoven 5652AC +- NL ++74-60-4C (hex) RØDE ++74604C (base 16) RØDE ++ 107 Carnarvon St ++ Silverwater NSW 2128 ++ AU ++ ++40-B0-2F (hex) Miele & Cie. KG ++40B02F (base 16) Miele & Cie. KG ++ Carl-Miele-Straße 29 ++ Gütersloh 33332 ++ DE + + B4-7D-76 (hex) KNS Group LLC + B47D76 (base 16) KNS Group LLC +@@ -190835,18 +191021,6 @@ C0AD97 (base 16) TECNO MOBILE LIMITED + Hong Kong Hong Kong 999077 + HK + +-B0-38-E2 (hex) Wanan Hongsheng Electronic Co.Ltd +-B038E2 (base 16) Wanan Hongsheng Electronic Co.Ltd +- 1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province +- Wanan China/jiangxi 343800 +- CN +- +-4C-53-69 (hex) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd +-4C5369 (base 16) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd +- No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China +- ChongQing ChongQing 400025 +- CN +- + 70-A9-83 (hex) Cisco Systems, Inc + 70A983 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -190859,22 +191033,16 @@ BCFAEB (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-74-76-7D (hex) shenzhen kexint technology co.,ltd +-74767D (base 16) shenzhen kexint technology co.,ltd +- 5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City +- shenzhen guangdong 518000 +- CN +- +-E0-48-D8 (hex) Guangzhi Wulian Technology(Guangzhou) Co., Ltd +-E048D8 (base 16) Guangzhi Wulian Technology(Guangzhou) Co., Ltd +- Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, +- Guangzhou 510623 +- CN ++18-66-F0 (hex) Jupiter Systems ++1866F0 (base 16) Jupiter Systems ++ 31015 Huntwood Ave ++ Hayward CA 94544-7007 ++ US + +-F8-E4-A4 (hex) Fiberhome Telecommunication Technologies Co.,LTD +-F8E4A4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 ++BC-C7-DA (hex) Earda Technologies co Ltd ++BCC7DA (base 16) Earda Technologies co Ltd ++ Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District ++ Guangzhou Guangdong 511455 + CN + + 84-85-53 (hex) Biznes Systema Telecom, LLC +@@ -190883,6 +191051,12 @@ F8E4A4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + Moscow 121087 + RU + ++58-00-32 (hex) Genexis B.V. ++580032 (base 16) Genexis B.V. ++ Lodewijkstraat 1A ++ Eindhoven 5652AC ++ NL ++ + D8-88-63 (hex) HUAWEI TECHNOLOGIES CO.,LTD + D88863 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -190901,6 +191075,36 @@ C03E50 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + ++4C-53-69 (hex) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++4C5369 (base 16) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++ No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China ++ ChongQing ChongQing 400025 ++ CN ++ ++74-76-7D (hex) shenzhen kexint technology co.,ltd ++74767D (base 16) shenzhen kexint technology co.,ltd ++ 5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City ++ shenzhen guangdong 518000 ++ CN ++ ++B0-38-E2 (hex) Wanan Hongsheng Electronic Co.Ltd ++B038E2 (base 16) Wanan Hongsheng Electronic Co.Ltd ++ 1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province ++ Wanan China/jiangxi 343800 ++ CN ++ ++E0-48-D8 (hex) Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++E048D8 (base 16) Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++ Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, ++ Guangzhou 510623 ++ CN ++ ++F8-E4-A4 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++F8E4A4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ + A0-C9-8B (hex) Nokia Solutions and Networks GmbH & Co. KG + A0C98B (base 16) Nokia Solutions and Networks GmbH & Co. KG + Werinherstrasse 91 +@@ -190913,18 +191117,6 @@ A0C98B (base 16) Nokia Solutions and Networks GmbH & Co. KG + Dongguan Guangdong 523808 + CN + +-4C-9D-22 (hex) ACES Co.,Ltd +-4C9D22 (base 16) ACES Co.,Ltd +- TianGong Avenue #916, Tianfu New Area +- ChengDu Sichuan Province 610000 +- CN +- +-88-C9-E8 (hex) Sony Corporation +-88C9E8 (base 16) Sony Corporation +- Sony City Osaki 2-10-1 +- Shinagawa-ku Tokyo 141-8610 +- JP +- + B8-F0-B9 (hex) zte corporation + B8F0B9 (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +@@ -190937,22 +191129,28 @@ B8F0B9 (base 16) zte corporation + Gwangju Gwangsan-gu 506-731 + KR + +-D4-43-0E (hex) Zhejiang Dahua Technology Co., Ltd. +-D4430E (base 16) Zhejiang Dahua Technology Co., Ltd. +- No.1199,Waterfront Road +- Hangzhou Zhejiang 310053 ++4C-9D-22 (hex) ACES Co.,Ltd ++4C9D22 (base 16) ACES Co.,Ltd ++ TianGong Avenue #916, Tianfu New Area ++ ChengDu Sichuan Province 610000 + CN + ++88-C9-E8 (hex) Sony Corporation ++88C9E8 (base 16) Sony Corporation ++ Sony City Osaki 2-10-1 ++ Shinagawa-ku Tokyo 141-8610 ++ JP ++ + 00-73-8D (hex) Shenzhen TINNO Mobile Technology Corp. + 00738D (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili + Nanshan District, Shenzhen PRC 518053 + CN + +-44-D3-AD (hex) Shenzhen TINNO Mobile Technology Corp. +-44D3AD (base 16) Shenzhen TINNO Mobile Technology Corp. +- Building, No.33, Xiandong Rd, Xili +- Nanshan District, Shenzhen PRC 518053 ++D4-43-0E (hex) Zhejiang Dahua Technology Co., Ltd. ++D4430E (base 16) Zhejiang Dahua Technology Co., Ltd. ++ No.1199,Waterfront Road ++ Hangzhou Zhejiang 310053 + CN + + F8-5E-0B (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +@@ -190961,12 +191159,36 @@ F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Chongqing China 401120 + CN + ++44-D3-AD (hex) Shenzhen TINNO Mobile Technology Corp. ++44D3AD (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ + 94-D3-31 (hex) Xiaomi Communications Co Ltd + 94D331 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + ++34-DD-04 (hex) Minut AB ++34DD04 (base 16) Minut AB ++ Baltzarsgatan 23 ++ Malmö 21136 ++ SE ++ ++60-1E-98 (hex) Axevast Technology ++601E98 (base 16) Axevast Technology ++ 5F., No. 20, Guanqian Road, Zhongzheng District ++ Taipei City 100007 ++ TW ++ ++A8-F7-D9 (hex) Mist Systems, Inc. ++A8F7D9 (base 16) Mist Systems, Inc. ++ 1601 South De Anza Blvd, Suite 248 ++ Cupertino CA 95014 ++ US ++ + 5C-8C-30 (hex) Taicang T&W Electronics + 5C8C30 (base 16) Taicang T&W Electronics + 89# Jiang Nan RD +@@ -190985,18 +191207,6 @@ F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + San Jose CA 94568 + US + +-34-DD-04 (hex) Minut AB +-34DD04 (base 16) Minut AB +- Baltzarsgatan 23 +- Malmö 21136 +- SE +- +-E8-AC-23 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-E8AC23 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- + 68-D9-27 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 68D927 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -191033,17 +191243,11 @@ E8AC23 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Shanghai 200233 + CN + +-60-1E-98 (hex) Axevast Technology +-601E98 (base 16) Axevast Technology +- 5F., No. 20, Guanqian Road, Zhongzheng District +- Taipei City 100007 +- TW +- +-A8-F7-D9 (hex) Mist Systems, Inc. +-A8F7D9 (base 16) Mist Systems, Inc. +- 1601 South De Anza Blvd, Suite 248 +- Cupertino CA 95014 +- US ++E8-AC-23 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++E8AC23 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN + + 2C-3B-70 (hex) AzureWave Technology Inc. + 2C3B70 (base 16) AzureWave Technology Inc. +@@ -191069,6 +191273,12 @@ F4227A (base 16) Guangdong Seneasy Intelligent Technology Co., Ltd. + Piscataway NJ 08554 + US + ++DC-8D-B7 (hex) ATW TECHNOLOGY, INC. ++DC8DB7 (base 16) ATW TECHNOLOGY, INC. ++ 1F, No.236 Ba’ai Street, Shulin District ++ New Taipei City 23845 ++ TW ++ + A4-75-B9 (hex) Samsung Electronics Co.,Ltd + A475B9 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -191081,18 +191291,18 @@ A475B9 (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-6C-60-D0 (hex) Huawei Device Co., Ltd. +-6C60D0 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- + 1C-F8-D0 (hex) Samsung Electronics Co.,Ltd + 1CF8D0 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong + Gumi Gyeongbuk 730-350 + KR + ++6C-60-D0 (hex) Huawei Device Co., Ltd. ++6C60D0 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ + 64-0E-6A (hex) SECO-LARM USA Inc + 640E6A (base 16) SECO-LARM USA Inc + 16842 Millikan +@@ -191105,12 +191315,6 @@ A475B9 (base 16) Samsung Electronics Co.,Ltd + San Jose CA 95110 + US + +-DC-8D-B7 (hex) ATW TECHNOLOGY, INC. +-DC8DB7 (base 16) ATW TECHNOLOGY, INC. +- 1F, No.236 Ba’ai Street, Shulin District +- New Taipei City 23845 +- TW +- + 70-20-84 (hex) Hon Hai Precision Industry Co., Ltd. + 702084 (base 16) Hon Hai Precision Industry Co., Ltd. + GuangDongShenZhen +@@ -191123,12 +191327,6 @@ DC8DB7 (base 16) ATW TECHNOLOGY, INC. + ShenZhen GuangDong 518109 + CN + +-1C-A0-B8 (hex) Hon Hai Precision Industry Co., Ltd. +-1CA0B8 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- + 18-AA-1E (hex) Shenzhen Skyworth Digital Technology CO., Ltd + 18AA1E (base 16) Shenzhen Skyworth Digital Technology CO., Ltd + 4F,Block A, Skyworth?Building, +@@ -191147,6 +191345,18 @@ D452EE (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + ++1C-A0-B8 (hex) Hon Hai Precision Industry Co., Ltd. ++1CA0B8 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ ++E8-EF-05 (hex) MIND TECH INTERNATIONAL LIMITED ++E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED ++ FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK ++ Hong Kong 999077 ++ HK ++ + 90-21-06 (hex) SKY UK LIMITED + 902106 (base 16) SKY UK LIMITED + 130 Kings Road +@@ -191165,11 +191375,17 @@ F08756 (base 16) Zyxel Communications Corporation + Hsichu Taiwan 300 + TW + +-E8-EF-05 (hex) MIND TECH INTERNATIONAL LIMITED +-E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED +- FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK +- Hong Kong 999077 +- HK ++18-C3-00 (hex) Nokia ++18C300 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++D4-4D-77 (hex) Nokia ++D44D77 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA + + 48-27-E2 (hex) Espressif Inc. + 4827E2 (base 16) Espressif Inc. +@@ -191177,6 +191393,12 @@ E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED + Shanghai Shanghai 201203 + CN + ++F4-6D-3F (hex) Intel Corporate ++F46D3F (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + 58-B3-8F (hex) New H3C Technologies Co., Ltd + 58B38F (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District +@@ -191189,30 +191411,12 @@ E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED + Zhenjiang Jiangsu 212003 + CN + +-F4-6D-3F (hex) Intel Corporate +-F46D3F (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- + 6C-72-4A (hex) Onkyo Technology K.K. + 6C724A (base 16) Onkyo Technology K.K. + Lux Building (5th floor),1-1-41 Kawamata + Higashiosaka City Osaka 577-0063 + JP + +-18-C3-00 (hex) Nokia +-18C300 (base 16) Nokia +- 600 March Road +- Kanata Ontario K2K 2E6 +- CA +- +-D4-4D-77 (hex) Nokia +-D44D77 (base 16) Nokia +- 600 March Road +- Kanata Ontario K2K 2E6 +- CA +- + DC-05-39 (hex) Cisco Systems, Inc + DC0539 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -191225,6 +191429,18 @@ DC0539 (base 16) Cisco Systems, Inc + East Greenwich RI 02818 + US + ++E0-F3-18 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++E0F318 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++C4-64-F2 (hex) Infinix mobility limited ++C464F2 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ + B0-1F-47 (hex) Heights Telecom T ltd + B01F47 (base 16) Heights Telecom T ltd + Moshe Lerer 15 +@@ -191279,30 +191495,12 @@ BC1541 (base 16) Nokia + Kanata Ontario K2K 2E6 + CA + +-E0-F3-18 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-E0F318 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN +- +-C4-64-F2 (hex) Infinix mobility limited +-C464F2 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- + 94-6D-AE (hex) Mellanox Technologies, Inc. + 946DAE (base 16) Mellanox Technologies, Inc. + 350 Oakmead Parkway, Suite 100 + Sunnyvale CA 94085 + US + +-40-FD-F3 (hex) AMPAK Technology,Inc. +-40FDF3 (base 16) AMPAK Technology,Inc. +- 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, +- Hsinchu Hsinchu,Taiwan R.O.C. 30352 +- TW +- + E4-A6-34 (hex) Universal Electronics, Inc. + E4A634 (base 16) Universal Electronics, Inc. + 201 E. Sandpointe Ave +@@ -191315,8 +191513,92 @@ E4A634 (base 16) Universal Electronics, Inc. + Racho Santa MArgarita CA 92688 + US + ++50-63-91 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++506391 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++E8-A3-4E (hex) HUAWEI TECHNOLOGIES CO.,LTD ++E8A34E (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++04-18-92 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++041892 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++14-65-6A (hex) HUAWEI TECHNOLOGIES CO.,LTD ++14656A (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++AC-B6-87 (hex) Arcadyan Corporation ++ACB687 (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW ++ ++6C-B7-E2 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++6CB7E2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++C4-75-EA (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C475EA (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++90-25-F2 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++9025F2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ + 38-7C-76 (hex) Universal Global Scientific Industrial Co., Ltd. + 387C76 (base 16) Universal Global Scientific Industrial Co., Ltd. + 141, Lane 351, Taiping Road, Sec.1,Tsao Tuen + Nan-Tou Taiwan 54261 + TW ++ ++40-FD-F3 (hex) AMPAK Technology,Inc. ++40FDF3 (base 16) AMPAK Technology,Inc. ++ 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, ++ Hsinchu Hsinchu,Taiwan R.O.C. 30352 ++ TW ++ ++EC-E6-1D (hex) Huawei Device Co., Ltd. ++ECE61D (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++48-6D-BB (hex) Vestel Elektronik San ve Tic. A.S. ++486DBB (base 16) Vestel Elektronik San ve Tic. A.S. ++ Organize san ++ Manisa Turket 45030 ++ TR ++ ++4C-63-AD (hex) Huawei Device Co., Ltd. ++4C63AD (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++DC-DB-27 (hex) Huawei Device Co., Ltd. ++DCDB27 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++CC-96-E5 (hex) Dell Inc. ++CC96E5 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US +diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt +index 18806ccc14..3ff16ce0bf 100644 +--- a/hwdb.d/ma-medium.txt ++++ b/hwdb.d/ma-medium.txt +@@ -4856,12 +4856,6 @@ C00000-CFFFFF (base 16) Shenzhen Micro&Nano Perception Computing Technology + Tokyo Minato 108-0023 + JP + +-0C-86-29 (hex) HONGKONG SAINT TECH INDUSTRIAL LIMITED +-900000-9FFFFF (base 16) HONGKONG SAINT TECH INDUSTRIAL LIMITED +- RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK +- HONGKONG 999077 +- CN +- + 0C-86-29 (hex) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD + D00000-DFFFFF (base 16) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD + 27 Shucun West Road, Haidian District, +@@ -4874,6 +4868,12 @@ D00000-DFFFFF (base 16) BEIJING BEIBIANZHIDA TECHNOLOGY CO.,LTD + ShenZhen GuangDong 518055 + CN + ++0C-86-29 (hex) HONGKONG SAINT TECH INDUSTRIAL LIMITED ++900000-9FFFFF (base 16) HONGKONG SAINT TECH INDUSTRIAL LIMITED ++ RM 1904A 19/F LUCKY COMMERCIAL CENTRE NO.103 DES VOEUX ROAD WEST HK ++ HONGKONG 999077 ++ CN ++ + 0C-86-29 (hex) Akribis Systems + B00000-BFFFFF (base 16) Akribis Systems + Block 5012 Techplace II, #01-05 Ang Mo Kio Avenue 5 +@@ -4892,12 +4892,6 @@ B00000-BFFFFF (base 16) Akribis Systems + Rydalmere NSW 2116 + AU + +-6C-93-08 (hex) WATERFORD CONSULTANTS LLC +-100000-1FFFFF (base 16) WATERFORD CONSULTANTS LLC +- 7430 NEW TECHNOLOGY WAY, Suite 150 +- FREDERICK 21703 +- US +- + 50-FF-99 (hex) COYOTE SYSTEM + 100000-1FFFFF (base 16) COYOTE SYSTEM + 24 quai Gallieni +@@ -4916,10 +4910,10 @@ B00000-BFFFFF (base 16) Akribis Systems + Kunshan Jiangsu 215324 + CN + +-38-1F-26 (hex) Avon Protection +-800000-8FFFFF (base 16) Avon Protection +- 503 8th Street +- Cadillac MI 49601 ++6C-93-08 (hex) WATERFORD CONSULTANTS LLC ++100000-1FFFFF (base 16) WATERFORD CONSULTANTS LLC ++ 7430 NEW TECHNOLOGY WAY, Suite 150 ++ FREDERICK 21703 + US + + 30-43-D7 (hex) DIGICITI Technology Co.,Ltd +@@ -4934,6 +4928,18 @@ B00000-BFFFFF (base 16) Akribis Systems + Suzhou 215021 + CN + ++38-1F-26 (hex) Avon Protection ++800000-8FFFFF (base 16) Avon Protection ++ 503 8th Street ++ Cadillac MI 49601 ++ US ++ ++18-A5-9C (hex) Thermia AB ++500000-5FFFFF (base 16) Thermia AB ++ Snickaregatan 1 ++ Arvika 67134 ++ SE ++ + 38-1F-26 (hex) SMS Evoko Group AB + 900000-9FFFFF (base 16) SMS Evoko Group AB + Hastholmsvagen 32 +@@ -4946,12 +4952,6 @@ B00000-BFFFFF (base 16) CAL-COMP INDUSTRIA E COMERCIO DE ELETRONICOS E INFO + MANAUS AMAZONAS 69041-025 + BR + +-18-A5-9C (hex) Thermia AB +-500000-5FFFFF (base 16) Thermia AB +- Snickaregatan 1 +- Arvika 67134 +- SE +- + 18-A5-9C (hex) BlueEyes Technology + C00000-CFFFFF (base 16) BlueEyes Technology + 7F-3, No.200, Sec. 4, Wenxin Rd., +@@ -4970,18 +4970,6 @@ E00000-EFFFFF (base 16) Globe Tracker ApS + kobenhavn State / Province* 1401 + DK + +-C4-A1-0E (hex) HYOSUNG HEAVY INDUSTRIES +-000000-0FFFFF (base 16) HYOSUNG HEAVY INDUSTRIES +- 119, Mapo-daero (Gongdeok-dong), Mapo-gu +- Seoul 04144 +- KR +- +-C4-A1-0E (hex) Consolinno Energy GmbH +-300000-3FFFFF (base 16) Consolinno Energy GmbH +- Franz-Mayer-Straße 1 +- Regensburg Bayern 93053 +- DE +- + C4-A1-0E (hex) Connectlab SRL + D00000-DFFFFF (base 16) Connectlab SRL + via donatello 30 +@@ -4994,6 +4982,18 @@ C4-A1-0E (hex) BARTEC PIXAVI AS + SANDNES Rogaland 4313 + NO + ++C4-A1-0E (hex) HYOSUNG HEAVY INDUSTRIES ++000000-0FFFFF (base 16) HYOSUNG HEAVY INDUSTRIES ++ 119, Mapo-daero (Gongdeok-dong), Mapo-gu ++ Seoul 04144 ++ KR ++ ++C4-A1-0E (hex) Consolinno Energy GmbH ++300000-3FFFFF (base 16) Consolinno Energy GmbH ++ Franz-Mayer-Straße 1 ++ Regensburg Bayern 93053 ++ DE ++ + C4-A1-0E (hex) Ayla Networks (Shenzhen) Co., Ltd. + 800000-8FFFFF (base 16) Ayla Networks (Shenzhen) Co., Ltd. + Room 1501, Building B, Innovation Building, No.198 Daxin Road, Majialong Community ,Nantou Street,Nanshan District, +@@ -5012,12 +5012,6 @@ E00000-EFFFFF (base 16) KFBIO (KONFOONG BIOINFORMATION TECH CO.,LTD) + Ningbo ZheJiang Province, P.R.C. 315400 + CN + +-80-7B-85 (hex) SCALA Digital Technology(Ningbo) CO, LTD +-C00000-CFFFFF (base 16) SCALA Digital Technology(Ningbo) CO, LTD +- 7 Hong Da Road, Hong Tang Industrial Park Zone A +- Ningbo Zhejiang 315040 +- CN +- + 80-02-F4 (hex) Baicells Technologies Co., Ltd + B00000-BFFFFF (base 16) Baicells Technologies Co., Ltd + 10-11F,AL, No.1 Zhongguancun, Haidian +@@ -5030,6 +5024,12 @@ B00000-BFFFFF (base 16) Baicells Technologies Co., Ltd + Suwon-si Gyeonggi-do 16371 + KR + ++80-7B-85 (hex) SCALA Digital Technology(Ningbo) CO, LTD ++C00000-CFFFFF (base 16) SCALA Digital Technology(Ningbo) CO, LTD ++ 7 Hong Da Road, Hong Tang Industrial Park Zone A ++ Ningbo Zhejiang 315040 ++ CN ++ + 8C-51-09 (hex) Heliox Automotive B.V. + 500000-5FFFFF (base 16) Heliox Automotive B.V. + De Waal 24 +@@ -5042,6 +5042,12 @@ B00000-BFFFFF (base 16) Baicells Technologies Co., Ltd + Norcross GA 30093 + US + ++0C-7F-ED (hex) Annapurna labs ++A00000-AFFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ + FC-61-79 (hex) Qisda Corporation + 500000-5FFFFF (base 16) Qisda Corporation + No. 157, Shanying Rd., Gueishan Dist., Taoyuan City 33341, Taiwan +@@ -5054,12 +5060,6 @@ FC-61-79 (hex) Qisda Corporation + Foshan 528000 + CN + +-0C-7F-ED (hex) Annapurna labs +-A00000-AFFFFF (base 16) Annapurna labs +- Matam Scientific Industries Center, Building 8.2 +- Mail box 15123 Haifa 3508409 +- IL +- + FC-61-79 (hex) Shenzhen Xmitech Electronic Co.,Ltd + C00000-CFFFFF (base 16) Shenzhen Xmitech Electronic Co.,Ltd + Room 8B1888, Block AB, New Energy Building, No.2239, Nanhai Avenue, Nanguang Community, Nanshan Street, Nanshan District, Shenzhen +@@ -5072,6 +5072,12 @@ C00000-CFFFFF (base 16) Shenzhen Xmitech Electronic Co.,Ltd + Shenzhen Guangdong 518052 + CN + ++30-3D-51 (hex) Labman Automation ++B00000-BFFFFF (base 16) Labman Automation ++ Labman Automation LtdSeamer Hill ++ Stokesley North Yorkshire TS9 5NQ ++ GB ++ + 4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD + 400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD + Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district +@@ -9644,23 +9650,17 @@ D00000-DFFFFF (base 16) Shenzhen Vitalitim Technology Co., Ltd + Guangzhou 511400 + CN + +-10-54-D2 (hex) Bamboo Dynamics Corporation., Ltd. +-900000-9FFFFF (base 16) Bamboo Dynamics Corporation., Ltd. +- No.146, Sec. 1,Donxing Rd. +- Zhubei City, Hsinchu County Taiwan 302058 +- TW +- + 10-54-D2 (hex) Raylogic Control Systems Private Limited + 400000-4FFFFF (base 16) Raylogic Control Systems Private Limited + Unit 6, 3rd floor, HILIFE, PM Road, Santacruz West + Mumbai Maharashtra 400054 + IN + +-10-54-D2 (hex) Sybersense +-500000-5FFFFF (base 16) Sybersense +- Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK +- Hong Kong 999077 +- CN ++10-54-D2 (hex) Bamboo Dynamics Corporation., Ltd. ++900000-9FFFFF (base 16) Bamboo Dynamics Corporation., Ltd. ++ No.146, Sec. 1,Donxing Rd. ++ Zhubei City, Hsinchu County Taiwan 302058 ++ TW + + 10-54-D2 (hex) SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD + 700000-7FFFFF (base 16) SHENZHEN CARSAFE TECHNOLOGY DEVELOPMENT CO.,LTD +@@ -9686,6 +9686,12 @@ D00000-DFFFFF (base 16) Shenzhen Vitalitim Technology Co., Ltd + Edison NJ 08837 + US + ++10-54-D2 (hex) Sybersense ++500000-5FFFFF (base 16) Sybersense ++ Unit 10, 16F, Hi-Tech Industrial Centre, Block A, 5-21 Pat Tin Par Street, Tsuen Wan NT, HK ++ Hong Kong 999077 ++ CN ++ + 0C-86-29 (hex) MyGregor Ltd + 800000-8FFFFF (base 16) MyGregor Ltd + 11A, Carnegie str. +@@ -9698,18 +9704,18 @@ D00000-DFFFFF (base 16) Annapurna labs + Mail box 15123 Haifa 3508409 + IL + +-6C-93-08 (hex) Shenzhen DOOGEE Hengtong Technology CO., LTD +-900000-9FFFFF (base 16) Shenzhen DOOGEE Hengtong Technology CO., LTD +- B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District +- Shenzhen Guangdong 518000 +- CN +- + 6C-93-08 (hex) Shenzhen TOPWAY Technology Co.,LTD + A00000-AFFFFF (base 16) Shenzhen TOPWAY Technology Co.,LTD + Bld.20 Zone 5, Baiwangxin Industry Park, Songbai Rd.Nanshan Dist + ShenZhen Guangdong 518055 + CN + ++6C-93-08 (hex) Shenzhen DOOGEE Hengtong Technology CO., LTD ++900000-9FFFFF (base 16) Shenzhen DOOGEE Hengtong Technology CO., LTD ++ B, 2/F, Building A4, Silicon Valley Power Digital Industrial Park, No. 22, Dafu Industrial Zone, Guanlan Aobei Community, Guanlan Street, Longhua New District ++ Shenzhen Guangdong 518000 ++ CN ++ + 30-43-D7 (hex) SYMES SA + 000000-0FFFFF (base 16) SYMES SA + 4 allée technopolis, chemin des presses +@@ -9734,6 +9740,12 @@ E00000-EFFFFF (base 16) ANDDORO LLC + New York NY 10018 + US + ++38-1F-26 (hex) Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++500000-5FFFFF (base 16) Zhejiang Huazhou Intelligent Equipment Co,. Ltd ++ Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, ++ Jiaxing 314000 ++ CN ++ + 38-1F-26 (hex) Synamedia + 200000-2FFFFF (base 16) Synamedia + Luipaardstraat 12 +@@ -9746,12 +9758,6 @@ C00000-CFFFFF (base 16) Jade Bird Fire Co., Ltd. + Beijing 100871 + CN + +-38-1F-26 (hex) Zhejiang Huazhou Intelligent Equipment Co,. Ltd +-500000-5FFFFF (base 16) Zhejiang Huazhou Intelligent Equipment Co,. Ltd +- Building3, No.416DdongshengAvenue, Wuzhen, Tongxiang, +- Jiaxing 314000 +- CN +- + 18-A5-9C (hex) Omwave + 000000-0FFFFF (base 16) Omwave + 5 rue Barbes +@@ -9770,11 +9776,11 @@ C00000-CFFFFF (base 16) Jade Bird Fire Co., Ltd. + nanjing 211100 + CN + +-1C-59-74 (hex) Topway Global Technology Limited +-800000-8FFFFF (base 16) Topway Global Technology Limited +- Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong +- Hong Kong Hong Kong 999077 +- HK ++1C-59-74 (hex) Shenzhen Geshem Technology Co Ltd ++D00000-DFFFFF (base 16) Shenzhen Geshem Technology Co Ltd ++ 12th Floor, Block B, Building 7, International Innovation Valley ++ Shenzhen Gunagdong 518000 ++ CN + + 1C-59-74 (hex) King-On Technology Ltd. + C00000-CFFFFF (base 16) King-On Technology Ltd. +@@ -9782,11 +9788,11 @@ C00000-CFFFFF (base 16) King-On Technology Ltd. + New Taipei Taiwan 23146 + TW + +-1C-59-74 (hex) Shenzhen Geshem Technology Co Ltd +-D00000-DFFFFF (base 16) Shenzhen Geshem Technology Co Ltd +- 12th Floor, Block B, Building 7, International Innovation Valley +- Shenzhen Gunagdong 518000 +- CN ++1C-59-74 (hex) Topway Global Technology Limited ++800000-8FFFFF (base 16) Topway Global Technology Limited ++ Room 1003, 10 / F, Tower 1, Lippo Centre, 89 Queensway, Hong Kong ++ Hong Kong Hong Kong 999077 ++ HK + + 18-A5-9C (hex) Annapurna labs + D00000-DFFFFF (base 16) Annapurna labs +@@ -9866,12 +9872,6 @@ C00000-CFFFFF (base 16) shenzhen newbridge communication equipment CO.,LTD + Shenzhen Guangdong 518057 + CN + +-8C-51-09 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION +-A00000-AFFFFF (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION +- NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China +- Suzhou 215021 +- CN +- + 8C-51-09 (hex) TianJin JointOptic Technology Co., LTD. + 000000-0FFFFF (base 16) TianJin JointOptic Technology Co., LTD. + Floor 3, Building 6, Teda Service Outsourcing Industrial Park, 19 Xinhuan West Road, Binhai New Area, +@@ -9884,10 +9884,10 @@ A00000-AFFFFF (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION + Shenzhen Guangdong 518100 + CN + +-8C-51-09 (hex) Beijing Superhexa Century Technology Co., Ltd. +-B00000-BFFFFF (base 16) Beijing Superhexa Century Technology Co., Ltd. +- Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing +- Beijing 100010 ++8C-51-09 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++A00000-AFFFFF (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION ++ NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China ++ Suzhou 215021 + CN + + E4-95-6E (hex) Tband srl +@@ -9896,24 +9896,30 @@ E4-95-6E (hex) Tband srl + PORTOGRUARO Venezia 30026 + IT + ++8C-51-09 (hex) Beijing Superhexa Century Technology Co., Ltd. ++B00000-BFFFFF (base 16) Beijing Superhexa Century Technology Co., Ltd. ++ Room 1022, 1F, Zone A, No.1, South Back Street, Anningzhuang, Haidian District, Beijing ++ Beijing 100010 ++ CN ++ + 0C-7F-ED (hex) ALT Co., Ltd. + D00000-DFFFFF (base 16) ALT Co., Ltd. + #1201, 8, Seongnam-dearo 331beon-gil + Bundang-gu, Seongnam-si Gyeonggi-do 13558 + KR + +-0C-7F-ED (hex) Shenzhen ORVIBO Technology Co., Ltd. +-900000-9FFFFF (base 16) Shenzhen ORVIBO Technology Co., Ltd. +- F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC. +- shenzhen 518000 +- CN +- + 0C-7F-ED (hex) Netweb Technologies India Pvt Ltd + 600000-6FFFFF (base 16) Netweb Technologies India Pvt Ltd + Plot H1, Pocket-9, FIT,Sector-57, Ballabhgarh + Faridabad Haryana 121004 + IN + ++0C-7F-ED (hex) Shenzhen ORVIBO Technology Co., Ltd. ++900000-9FFFFF (base 16) Shenzhen ORVIBO Technology Co., Ltd. ++ F7, Block A7, Nanshan I Park, No.1001 XueYuan Avenue , NanShan District, ShenZhen 518055 PRC. ++ shenzhen 518000 ++ CN ++ + FC-61-79 (hex) Kvaliteta Systems and Solutions Private Limited + 700000-7FFFFF (base 16) Kvaliteta Systems and Solutions Private Limited + 2207 Yamuna Building Techno Park Phase 3 +@@ -14783,6 +14789,12 @@ A00000-AFFFFF (base 16) Pavana Technologies JSC. + Vinh Phuc 35000 + VN + ++10-54-D2 (hex) COSMO AIOT TECHNOLOGY CO LTD ++E00000-EFFFFF (base 16) COSMO AIOT TECHNOLOGY CO LTD ++ Haier Information Industrial Complex, No.1 HaierRoad ++ Qingdao Shandong 266101 ++ CN ++ + 10-54-D2 (hex) GIPS Technology Co., Ltd. + 000000-0FFFFF (base 16) GIPS Technology Co., Ltd. + Rm. 2, 6F., No. 395, Sec. 1, Linsen Rd., East Dist. +@@ -14807,12 +14819,6 @@ C00000-CFFFFF (base 16) LUXSHARE-ICT Co., Ltd. + Taipei City Taiwan 114754 + TW + +-10-54-D2 (hex) COSMO AIOT TECHNOLOGY CO LTD +-E00000-EFFFFF (base 16) COSMO AIOT TECHNOLOGY CO LTD +- Haier Information Industrial Complex, No.1 HaierRoad +- Qingdao Shandong 266101 +- CN +- + 0C-86-29 (hex) SHENZHEN YINGMU TECHNOLOGY.,LTD + C00000-CFFFFF (base 16) SHENZHEN YINGMU TECHNOLOGY.,LTD + 8 / F, Zone D, building F1, TCL International E city, Shuguang community, Xili street, Nanshan District, +@@ -14837,12 +14843,6 @@ E00000-EFFFFF (base 16) FX TECHNOLOGY LIMITED + Karlsruhe 76131 + DE + +-30-43-D7 (hex) Shenzhen juduoping Technology Co.,Ltd +-100000-1FFFFF (base 16) Shenzhen juduoping Technology Co.,Ltd +- Baoan Xin'an Streat +- Shenzhen 002052 +- CN +- + 30-43-D7 (hex) Sprocomm Technologies Co., Ltd.Guangming Branch + 600000-6FFFFF (base 16) Sprocomm Technologies Co., Ltd.Guangming Branch + Area A 3rd Floor, Area A 5rd Floor and 6th Floor, 301, building 2, 7th Industrial Park, Yulv Community,Yutang Street, Guangming District, +@@ -14855,6 +14855,12 @@ C00000-CFFFFF (base 16) Shenzhen haichangxing Technology Co., Ltd. + SHENZHEN GUANGZHOU 518000 + CN + ++30-43-D7 (hex) Shenzhen juduoping Technology Co.,Ltd ++100000-1FFFFF (base 16) Shenzhen juduoping Technology Co.,Ltd ++ Baoan Xin'an Streat ++ Shenzhen 002052 ++ CN ++ + 30-43-D7 (hex) Guangdong Hongqin Telecom Technology Co. Ltd. + E00000-EFFFFF (base 16) Guangdong Hongqin Telecom Technology Co. Ltd. + 10 Keyuan Road, Songshan Lake +@@ -14867,18 +14873,18 @@ E00000-EFFFFF (base 16) Guangdong Hongqin Telecom Technology Co. Ltd. + Bengaluru Karnataka 560100 + IN + +-18-A5-9C (hex) Erba Lachema s.r.o. +-A00000-AFFFFF (base 16) Erba Lachema s.r.o. +- Karasek1d +- Brno 62100 +- CZ +- + 18-A5-9C (hex) ePower Network Solution Co., Ltd. + 700000-7FFFFF (base 16) ePower Network Solution Co., Ltd. + No. 2, Aly. 1, Ln. 85, Xinshu Rd., Xinzhuang Dist., + New Taipei City , 242063 + TW + ++18-A5-9C (hex) Erba Lachema s.r.o. ++A00000-AFFFFF (base 16) Erba Lachema s.r.o. ++ Karasek1d ++ Brno 62100 ++ CZ ++ + 1C-59-74 (hex) Shenzhen Hanshine Technology Co.Ltd. + 000000-0FFFFF (base 16) Shenzhen Hanshine Technology Co.Ltd. + Buiding 2 ,row 3,number 2 industrail zone,yulv community,Yutang street +@@ -14891,12 +14897,24 @@ A00000-AFFFFF (base 16) Erba Lachema s.r.o. + Chongqing 400000 + CN + ++6C-15-24 (hex) Telsonic AG ++100000-1FFFFF (base 16) Telsonic AG ++ Industriestrasse 6b ++ Bronschhofen St.Gallen 9552 ++ CH ++ + 18-A5-9C (hex) Beijing QS Medical Technology Co., Ltd. + 300000-3FFFFF (base 16) Beijing QS Medical Technology Co., Ltd. + Building 5, No.11, Kechuang 14th Street, Economic-Technological Development Area + Beijing 100176 + CN + ++6C-15-24 (hex) SYMLINK CORPORATION ++D00000-DFFFFF (base 16) SYMLINK CORPORATION ++ 6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park ++ Taipei 11492 ++ TW ++ + C4-A1-0E (hex) Clinton Electronics Corporation + B00000-BFFFFF (base 16) Clinton Electronics Corporation + 6701 Clinton Road +@@ -14909,12 +14927,6 @@ C4-A1-0E (hex) Wistron InfoComn (Kunshan) Co., Ltd. + Kunshan Jiangsu 215300 + CN + +-6C-15-24 (hex) Telsonic AG +-100000-1FFFFF (base 16) Telsonic AG +- Industriestrasse 6b +- Bronschhofen St.Gallen 9552 +- CH +- + C4-A1-0E (hex) Guangzhou South Satellite Navigation Instrument Co., Ltd. + 700000-7FFFFF (base 16) Guangzhou South Satellite Navigation Instrument Co., Ltd. + Area A Layer 6, Area A Layer 5, Area A Layer 4, No.39, Sicheng Road, Tianhe District, +@@ -14927,18 +14939,24 @@ C4-A1-0E (hex) Guangzhou South Satellite Navigation Instrument Co., Ltd. + Bentley Western Australia 6102 + AU + +-6C-15-24 (hex) SYMLINK CORPORATION +-D00000-DFFFFF (base 16) SYMLINK CORPORATION +- 6F., No. 13, Lane. 35, Jihu Rd., Neihu Dist., Neihu Technology Park +- Taipei 11492 +- TW +- + 6C-15-24 (hex) AEC s.r.l. + E00000-EFFFFF (base 16) AEC s.r.l. + Via Zambon, 33/A + Creazzo Vicenza 36051 + IT + ++70-50-E7 (hex) Shenzhen C & D Electronics Co., Ltd. ++000000-0FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd. ++ 9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District ++ ShenZhen GuangDong 518000 ++ CN ++ ++70-50-E7 (hex) Beijing Shannoncyber Technology Co.,Ltd ++B00000-BFFFFF (base 16) Beijing Shannoncyber Technology Co.,Ltd ++ 913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District ++ beijing beijing 100029 ++ CN ++ + C4-A1-0E (hex) Harbour Cross Technology Ltd + 400000-4FFFFF (base 16) Harbour Cross Technology Ltd + Unit 622 One Island South, 2 Heung Yip Road, Wong Chuk Hang, +@@ -14951,16 +14969,10 @@ C4-A1-0E (hex) Harbour Cross Technology Ltd + Mail box 15123 Haifa 3508409 + IL + +-70-50-E7 (hex) Shenzhen C & D Electronics Co., Ltd. +-000000-0FFFFF (base 16) Shenzhen C & D Electronics Co., Ltd. +- 9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District +- ShenZhen GuangDong 518000 +- CN +- +-70-50-E7 (hex) Beijing Shannoncyber Technology Co.,Ltd +-B00000-BFFFFF (base 16) Beijing Shannoncyber Technology Co.,Ltd +- 913 9/F,building 8,yard 2,Shenggu Middle Road,Chaoyang District +- beijing beijing 100029 ++80-02-F4 (hex) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++900000-9FFFFF (base 16) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. ++ SECOND FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA ++ XIAMEN 361106 + CN + + 80-02-F4 (hex) PassiveLogic +@@ -14969,10 +14981,10 @@ A00000-AFFFFF (base 16) PassiveLogic + Holladay UT 84121 + US + +-80-02-F4 (hex) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. +-900000-9FFFFF (base 16) XUNDI(XIAMEN) ELECTRONIC TECHNOLOGY CO.,LTD. +- SECOND FLOOR, NO. 943-4, TONGLONG 2ND ROAD, TORCH HIGH-TECH (XIANG 'AN) INDUSTRY DISTRICT,XIAMEN CITY, FUJIAN PROVINCE,CHINA +- XIAMEN 361106 ++80-02-F4 (hex) Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd ++D00000-DFFFFF (base 16) Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd ++ No. 52, Guoxiang Road, Wujin economic development zone ++ ChangZhou JiangSu 213100 + CN + + 80-02-F4 (hex) Sichuan Fanyi Technology Co. Ltd. +@@ -14981,12 +14993,6 @@ A00000-AFFFFF (base 16) PassiveLogic + Chengdu Sichuan 650000 + CN + +-80-02-F4 (hex) Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd +-D00000-DFFFFF (base 16) Jiangsu Vedkang Medicl Sclence and Technology Co.,Ltd +- No. 52, Guoxiang Road, Wujin economic development zone +- ChangZhou JiangSu 213100 +- CN +- + 80-02-F4 (hex) Infors AG + 400000-4FFFFF (base 16) Infors AG + Wuhrmattstr. 7 +@@ -15023,23 +15029,23 @@ D00000-DFFFFF (base 16) Jiangsu Vedkang Medicl Sclence and Technology Co.,L + Union City CA 94587 + US + +-0C-7F-ED (hex) Soft dB +-300000-3FFFFF (base 16) Soft dB +- 1040, avenue Belvédère #215 +- Québec Quebec G1S 3G3 +- CA +- + FC-61-79 (hex) MACH SYSTEMS s.r.o. + 900000-9FFFFF (base 16) MACH SYSTEMS s.r.o. + Pocernicka 272/96 + Prague 10800 + CZ + +-30-3D-51 (hex) Media Hub Digital Smart Home Pty Ltd. +-500000-5FFFFF (base 16) Media Hub Digital Smart Home Pty Ltd. +- 40 Koornang Road +- Scoresby VIC 3179 +- AU ++0C-7F-ED (hex) Soft dB ++300000-3FFFFF (base 16) Soft dB ++ 1040, avenue Belvédère #215 ++ Québec Quebec G1S 3G3 ++ CA ++ ++FC-61-79 (hex) Annapurna labs ++800000-8FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL + + FC-61-79 (hex) Zhuhai Anjubao Electronics Technology Co., Ltd. + 000000-0FFFFF (base 16) Zhuhai Anjubao Electronics Technology Co., Ltd. +@@ -15053,11 +15059,17 @@ FC-61-79 (hex) Shenzhen Shenshui Electronic Commerce Co.,Ltd + Shenzhen 518132 + CN + +-FC-61-79 (hex) Annapurna labs +-800000-8FFFFF (base 16) Annapurna labs +- Matam Scientific Industries Center, Building 8.2 +- Mail box 15123 Haifa 3508409 +- IL ++30-3D-51 (hex) Media Hub Digital Smart Home Pty Ltd. ++500000-5FFFFF (base 16) Media Hub Digital Smart Home Pty Ltd. ++ 40 Koornang Road ++ Scoresby VIC 3179 ++ AU ++ ++30-3D-51 (hex) Dspread Technology (Beijing) Inc. ++400000-4FFFFF (base 16) Dspread Technology (Beijing) Inc. ++ Jingxin Building, 2045 Suite , Chaoyang District ++ Beijing 100027 ++ CN + + 30-3D-51 (hex) TeraNXT Global India Pvt Ltd. + A00000-AFFFFF (base 16) TeraNXT Global India Pvt Ltd. +@@ -15065,6 +15077,12 @@ A00000-AFFFFF (base 16) TeraNXT Global India Pvt Ltd. + DELHI DELHI 110005 + IN + ++30-3D-51 (hex) S & A Systems ++300000-3FFFFF (base 16) S & A Systems ++ 992 Sids Rd. ++ Rockwall TX 75032 ++ US ++ + 4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd. + 600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd. + 22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone +@@ -19847,18 +19865,18 @@ D00000-DFFFFF (base 16) Sun wealth technology corporation limited + Seoul 05808 + KR + +-6C-93-08 (hex) Shenzhen EZpro Sound & Light Technology Co., Ltd. +-B00000-BFFFFF (base 16) Shenzhen EZpro Sound & Light Technology Co., Ltd. +- E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District +- shenz guangdong 518055 +- CN +- + 0C-86-29 (hex) HagerEnergy GmbH + 700000-7FFFFF (base 16) HagerEnergy GmbH + Karlstrasse 5 + Osnabrueck 49074 + DE + ++6C-93-08 (hex) Shenzhen EZpro Sound & Light Technology Co., Ltd. ++B00000-BFFFFF (base 16) Shenzhen EZpro Sound & Light Technology Co., Ltd. ++ E2?TCL International E City,1001 Zhong Shan Yuan Rd,Nanshan District ++ shenz guangdong 518055 ++ CN ++ + 30-43-D7 (hex) Xiaoniu network technology (Shanghai) Co., Ltd. + C00000-CFFFFF (base 16) Xiaoniu network technology (Shanghai) Co., Ltd. + Room 706, building 3, no.20 east road, jingan district. +@@ -19877,23 +19895,17 @@ A00000-AFFFFF (base 16) Flextronics International Kft + Zalaegerszeg 8900 + HU + +-38-1F-26 (hex) Airmaster A/S +-400000-4FFFFF (base 16) Airmaster A/S +- Industrivej 59 +- Aars 9600 +- DK +- + 38-1F-26 (hex) HWACHANG CORPORATION + D00000-DFFFFF (base 16) HWACHANG CORPORATION + 90, NONGGONGANJI-GIL + SOCHO-SI 24899 + KR + +-18-A5-9C (hex) Residence Control Ltd +-800000-8FFFFF (base 16) Residence Control Ltd +- Cvetan Vuchkov 7 +- Sofia Sofia 1614 +- BG ++38-1F-26 (hex) Airmaster A/S ++400000-4FFFFF (base 16) Airmaster A/S ++ Industrivej 59 ++ Aars 9600 ++ DK + + 18-A5-9C (hex) Actiontec Electronics Inc. + 200000-2FFFFF (base 16) Actiontec Electronics Inc. +@@ -19907,6 +19919,12 @@ D00000-DFFFFF (base 16) HWACHANG CORPORATION + Yeongtong-gu, Suwon-si Gyeonggi-do 16229 + KR + ++18-A5-9C (hex) Residence Control Ltd ++800000-8FFFFF (base 16) Residence Control Ltd ++ Cvetan Vuchkov 7 ++ Sofia Sofia 1614 ++ BG ++ + 7C-70-BC (hex) Motec GmbH + A00000-AFFFFF (base 16) Motec GmbH + 287 27 Road +@@ -19931,12 +19949,6 @@ B00000-BFFFFF (base 16) Beijing Flintec Electronic Technology Co.,Ltd. + shanghai 201614 + CN + +-1C-59-74 (hex) Square Inc. +-600000-6FFFFF (base 16) Square Inc. +- 1455 Market St. +- San Francisco CA 94103 +- US +- + 6C-15-24 (hex) Shenzhen Electron Technology Co., LTD. + 500000-5FFFFF (base 16) Shenzhen Electron Technology Co., LTD. + Building 2, Yingfeng Industrial Zone, Tantou Community, Songgang Street, Bao'an District +@@ -19955,6 +19967,18 @@ B00000-BFFFFF (base 16) Annapurna labs + Mail box 15123 Haifa 3508409 + IL + ++1C-59-74 (hex) Square Inc. ++600000-6FFFFF (base 16) Square Inc. ++ 1455 Market St. ++ San Francisco CA 94103 ++ US ++ ++6C-15-24 (hex) DEFA AS ++000000-0FFFFF (base 16) DEFA AS ++ Blingsmovegen 30 ++ Nesbyen 3540 ++ NO ++ + 6C-15-24 (hex) Linkplay + 200000-2FFFFF (base 16) Linkplay + 891 W. Washington Ave. +@@ -19967,12 +19991,6 @@ C00000-CFFFFF (base 16) CORAL-TAIYI + Taipei City 114 + TW + +-6C-15-24 (hex) DEFA AS +-000000-0FFFFF (base 16) DEFA AS +- Blingsmovegen 30 +- Nesbyen 3540 +- NO +- + C4-A1-0E (hex) O-NET Industrial Technologies (Shenzhen) Limited + 500000-5FFFFF (base 16) O-NET Industrial Technologies (Shenzhen) Limited + 501, Maile building, building 2, No. 28, Cuijing Road, Zhukeng community, Longtian street, Pingshan District +@@ -19997,18 +20015,18 @@ D00000-DFFFFF (base 16) Eta Compute Inc. + Sunnyvale CA 94086 + US + +-80-02-F4 (hex) Wuhan Glory Road Intelligent Technology Co., Ltd. +-C00000-CFFFFF (base 16) Wuhan Glory Road Intelligent Technology Co., Ltd. +- 18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone +- Wuhan Hubei 430073 +- CN +- + 80-02-F4 (hex) Sichuan lookout environment protection technology co.,Ltd + 100000-1FFFFF (base 16) Sichuan lookout environment protection technology co.,Ltd + No. 1015, floor 10, unit 2, building 1, No. 1616, Nanhua Road, high tech Zone + Chengdu Sichuan 610052 + CN + ++80-02-F4 (hex) Wuhan Glory Road Intelligent Technology Co., Ltd. ++C00000-CFFFFF (base 16) Wuhan Glory Road Intelligent Technology Co., Ltd. ++ 18F,Magic Cube Building,Optics Valley Core Center,No.303 Optics Valley Avenue,East Lake High-tech Development Zone ++ Wuhan Hubei 430073 ++ CN ++ + 8C-51-09 (hex) PROCET Technology Co., Ltd(HK) + 200000-2FFFFF (base 16) PROCET Technology Co., Ltd(HK) + Flat B,4/F, Kjngswell Commercial Tower, 171-173 Lockhard Road, Wanchai, Hongkong +@@ -20039,12 +20057,6 @@ C00000-CFFFFF (base 16) SpotterRF LLC + SuZhou JiangSu 215000 + CN + +-FC-61-79 (hex) CHOEUNENG +-400000-4FFFFF (base 16) CHOEUNENG +- 22, Ildong-ro, Sangnok-gu +- Ansan-si Gyeonggi-do 15326 +- KR +- + FC-61-79 (hex) EchoStar Mobile + 300000-3FFFFF (base 16) EchoStar Mobile + 25/28 NORTH WALL QUAY, DUBLIN 1, D01H104 Ireland +@@ -20057,6 +20069,12 @@ E00000-EFFFFF (base 16) environmental systems corporation + Barrie Ontario L4N 8W8 + CA + ++FC-61-79 (hex) CHOEUNENG ++400000-4FFFFF (base 16) CHOEUNENG ++ 22, Ildong-ro, Sangnok-gu ++ Ansan-si Gyeonggi-do 15326 ++ KR ++ + FC-61-79 (hex) Hangzhou LiDe Communication Co.,Ltd + 600000-6FFFFF (base 16) Hangzhou LiDe Communication Co.,Ltd + No.188,DongJia Rd,Tonglu Econominc Development Zone,Hangzhou,Zhejiang, +@@ -20075,6 +20093,12 @@ E00000-EFFFFF (base 16) ACCO Brands USA LLC + Lake Zurich IL 60047-2997 + US + ++30-3D-51 (hex) Annapurna labs ++900000-9FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ + 20-85-93 (hex) Great Lite International + 700000-7FFFFF (base 16) Great Lite International + 11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist., +@@ -24878,6 +24902,12 @@ E00000-EFFFFF (base 16) CEL Terminus (Shanghai) Information Technologies Co + Colorado Springs CO 80907 + US + ++6C-93-08 (hex) Uconfree technology(shenzhen)limited ++600000-6FFFFF (base 16) Uconfree technology(shenzhen)limited ++ Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China ++ SHENZHEN 518111 ++ CN ++ + 0C-86-29 (hex) Annapurna labs + 300000-3FFFFF (base 16) Annapurna labs + Matam Scientific Industries Center, Building 8.2 +@@ -24890,11 +24920,11 @@ E00000-EFFFFF (base 16) CEL Terminus (Shanghai) Information Technologies Co + Hangzhou City Zhejiang Province 31000 + CN + +-6C-93-08 (hex) Uconfree technology(shenzhen)limited +-600000-6FFFFF (base 16) Uconfree technology(shenzhen)limited +- Room 311 PuFeng commercial center PingHu street LongGang District ShenZhen China +- SHENZHEN 518111 +- CN ++30-43-D7 (hex) Bodhi ++A00000-AFFFFF (base 16) Bodhi ++ 3150 W. Prospect Road, Suite 330 ++ Fort Lauderdale FL 33309 ++ US + + 6C-93-08 (hex) ZHEJIANG XIAN DA Environmental Technology Co., Ltd + 200000-2FFFFF (base 16) ZHEJIANG XIAN DA Environmental Technology Co., Ltd +@@ -24902,24 +24932,24 @@ E00000-EFFFFF (base 16) CEL Terminus (Shanghai) Information Technologies Co + HANGZHOU ZHEJIANG 310000 + CN + ++30-43-D7 (hex) Kesu (Shanghai) Electronic Technology Co., Ltd ++800000-8FFFFF (base 16) Kesu (Shanghai) Electronic Technology Co., Ltd ++ 3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District ++ Shanghai 202150 ++ CN ++ + 30-43-D7 (hex) PK Solutions LLC + 900000-9FFFFF (base 16) PK Solutions LLC + 10811 E Harry + Wichita KS 67207 + US + +-30-43-D7 (hex) Bodhi +-A00000-AFFFFF (base 16) Bodhi +- 3150 W. Prospect Road, Suite 330 +- Fort Lauderdale FL 33309 ++30-43-D7 (hex) FIBERME COMMUNICATIONS LLC ++400000-4FFFFF (base 16) FIBERME COMMUNICATIONS LLC ++ 1749 Old Meadow Rd. ++ McLean VA 22102 + US + +-30-43-D7 (hex) Kesu (Shanghai) Electronic Technology Co., Ltd +-800000-8FFFFF (base 16) Kesu (Shanghai) Electronic Technology Co., Ltd +- 3-36588?No. 1800, Panyuan Road, Changxing Town, Chongming District +- Shanghai 202150 +- CN +- + 38-1F-26 (hex) NOITAC sp. z o.o. sp.k. + 600000-6FFFFF (base 16) NOITAC sp. z o.o. sp.k. + Szlak 28/3 +@@ -24932,12 +24962,6 @@ A00000-AFFFFF (base 16) Bodhi + YANG YANG GUN 25017 + KR + +-30-43-D7 (hex) FIBERME COMMUNICATIONS LLC +-400000-4FFFFF (base 16) FIBERME COMMUNICATIONS LLC +- 1749 Old Meadow Rd. +- McLean VA 22102 +- US +- + 38-1F-26 (hex) Deutronic Elektronik GmbH + B00000-BFFFFF (base 16) Deutronic Elektronik GmbH + Deutronicstraße 5 +@@ -25004,18 +25028,18 @@ A00000-AFFFFF (base 16) Jiangsu Perceive World Technology Co.,Ltd. + Nur-Sultan 010000 + KZ + +-6C-15-24 (hex) STERIS +-A00000-AFFFFF (base 16) STERIS +- Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road +- Bishops Stortford herts CM23 5GZ +- GB +- + C4-A1-0E (hex) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD + 900000-9FFFFF (base 16) XI'AN YEP TELECOM TECHNOLOGY CO.,LTD + No.211 Tiangu 8th Road, High-tech Zone + Xi 'an Shaanxi 710065 + CN + ++6C-15-24 (hex) STERIS ++A00000-AFFFFF (base 16) STERIS ++ Unit 7 & 8, Stortford Hall Industrial Park, Dunmow Road ++ Bishops Stortford herts CM23 5GZ ++ GB ++ + C4-A1-0E (hex) Alio, Inc + E00000-EFFFFF (base 16) Alio, Inc + 10901 W. 120th Ave, Suite 380 +@@ -25058,18 +25082,6 @@ A00000-AFFFFF (base 16) Guangzhou Tianhe High Tech Industrial Development Z + San Jose CA 95112 + US + +-80-02-F4 (hex) Annapurna labs +-800000-8FFFFF (base 16) Annapurna labs +- Matam Scientific Industries Center, Building 8.2 +- Mail box 15123 Haifa 3508409 +- IL +- +-8C-51-09 (hex) Avxav Electronic Trading LLC +-600000-6FFFFF (base 16) Avxav Electronic Trading LLC +- Office 534 Building # 6WA Dubai Airport Free Zone +- Dubai Dubai 33964 +- AE +- + 80-02-F4 (hex) Lazer Safe Pty Ltd + 700000-7FFFFF (base 16) Lazer Safe Pty Ltd + 27 Action Road +@@ -25082,11 +25094,17 @@ A00000-AFFFFF (base 16) Guangzhou Tianhe High Tech Industrial Development Z + Beijing Beijing 100028 + CN + +-8C-51-09 (hex) SHENZHEN LDROBOT CO., LTD. +-300000-3FFFFF (base 16) SHENZHEN LDROBOT CO., LTD. +- Nanshan +- Shenzhen 518000 +- CN ++80-02-F4 (hex) Annapurna labs ++800000-8FFFFF (base 16) Annapurna labs ++ Matam Scientific Industries Center, Building 8.2 ++ Mail box 15123 Haifa 3508409 ++ IL ++ ++8C-51-09 (hex) Avxav Electronic Trading LLC ++600000-6FFFFF (base 16) Avxav Electronic Trading LLC ++ Office 534 Building # 6WA Dubai Airport Free Zone ++ Dubai Dubai 33964 ++ AE + + 8C-51-09 (hex) nerospec + 800000-8FFFFF (base 16) nerospec +@@ -25100,6 +25118,12 @@ D00000-DFFFFF (base 16) Surpedia Technologies Co., Ltd. + Xhzhi Dist. New Taipei City 22103 + TW + ++8C-51-09 (hex) SHENZHEN LDROBOT CO., LTD. ++300000-3FFFFF (base 16) SHENZHEN LDROBOT CO., LTD. ++ Nanshan ++ Shenzhen 518000 ++ CN ++ + 8C-51-09 (hex) IROOTELLUCKY Corp. + E00000-EFFFFF (base 16) IROOTELLUCKY Corp. + 609ho, 13, LS-ro +@@ -25124,6 +25148,12 @@ B00000-BFFFFF (base 16) TelX Systems + DEIRA DUBAI 48235 + AE + ++FC-61-79 (hex) Signalinks Communication Technology Co.,Ltd ++100000-1FFFFF (base 16) Signalinks Communication Technology Co.,Ltd ++ 3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen ++ Shenzhen Guangdong 518000 ++ CN ++ + FC-61-79 (hex) Int'Act Pty Ltd + D00000-DFFFFF (base 16) Int'Act Pty Ltd + 4 Pine Street +@@ -25142,12 +25172,6 @@ D00000-DFFFFF (base 16) Int'Act Pty Ltd + Chattanooga 37408 + US + +-FC-61-79 (hex) Signalinks Communication Technology Co.,Ltd +-100000-1FFFFF (base 16) Signalinks Communication Technology Co.,Ltd +- 3rd Floor, Building 6, Longxing Sciece park, East Huaning Road, Dalang Street , Longhua District, Shenzhen +- Shenzhen Guangdong 518000 +- CN +- + FC-61-79 (hex) Fulian Precision Electronics(Tianjin) Co., Ltd + B00000-BFFFFF (base 16) Fulian Precision Electronics(Tianjin) Co., Ltd + No 36. North Street, West Zone, Economic & Technological Development Area, Tianjin, China +@@ -25159,3 +25183,9 @@ A00000-AFFFFF (base 16) Shenzhen Dptek Technology Co., Ltd. + Room 706, Building Pincui, Zhongcui Garden,Dafen Community, Buji Street, Longgang District + Shenzhen Guangdong 518000 + CN ++ ++30-3D-51 (hex) XOR UK Corporation Limited ++D00000-DFFFFF (base 16) XOR UK Corporation Limited ++ Unit 11-12, Stanhope Gate, Stanhope Rd ++ Camberley Surrey GU15 3DW ++ GB +diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt +index 496fd55c73..dfaf330309 100644 +--- a/hwdb.d/ma-small.txt ++++ b/hwdb.d/ma-small.txt +@@ -5687,12 +5687,6 @@ F74000-F74FFF (base 16) GE AVIC Civil Avionics Systems Company Limited + Shanghai 200241 + CN + +-8C-1F-64 (hex) Stercom Power Solutions GmbH +-2B6000-2B6FFF (base 16) Stercom Power Solutions GmbH +- Ziegelstr. 1 +- Weyarn Bayern 83629 +- DE +- + 8C-1F-64 (hex) Shenzhen zhushida Technology lnformation Co.,Ltd + A5D000-A5DFFF (base 16) Shenzhen zhushida Technology lnformation Co.,Ltd + 1309, Block A, Innovation Building, Majialong Industrial Zone, Nantou Street, Nanshan District, +@@ -5705,6 +5699,12 @@ A5D000-A5DFFF (base 16) Shenzhen zhushida Technology lnformation Co.,Ltd + Sydney New South Wales 2132 + AU + ++8C-1F-64 (hex) Stercom Power Solutions GmbH ++2B6000-2B6FFF (base 16) Stercom Power Solutions GmbH ++ Ziegelstr. 1 ++ Weyarn Bayern 83629 ++ DE ++ + 8C-1F-64 (hex) Gateview Technologies + B7B000-B7BFFF (base 16) Gateview Technologies + 104 White St #201 +@@ -5741,12 +5741,6 @@ FBA000-FBAFFF (base 16) Onto Innovation + Wilmington MA 01887 + US + +-8C-1F-64 (hex) DAVE SRL +-967000-967FFF (base 16) DAVE SRL +- VIA TALPONEDO 29/A +- PORCIA PORDENONE 330850 +- IT +- + 8C-1F-64 (hex) Becton Dickinson + 775000-775FFF (base 16) Becton Dickinson + 7 Loveton Circle +@@ -5765,6 +5759,12 @@ BFB000-BFBFFF (base 16) TechArgos + Moscow 105066 + RU + ++8C-1F-64 (hex) DAVE SRL ++967000-967FFF (base 16) DAVE SRL ++ VIA TALPONEDO 29/A ++ PORCIA PORDENONE 330850 ++ IT ++ + 8C-1F-64 (hex) e.kundenservice Netz GmbH + 855000-855FFF (base 16) e.kundenservice Netz GmbH + Steindamm 100 +@@ -5801,17 +5801,23 @@ EB5000-EB5FFF (base 16) Meiryo Denshi Corp. + Gadag Karnataka 582103 + IN + ++8C-1F-64 (hex) Tesat-Spacecom GmbH & Co. KG ++F27000-F27FFF (base 16) Tesat-Spacecom GmbH & Co. KG ++ Gerberstrasse 49 ++ Backnang 71522 ++ DE ++ + 8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme + 059000-059FFF (base 16) MB connect line GmbH Fernwartungssysteme + Winnettener Straße 6 + Dinkelsbuehl Bavaria 91550 + DE + +-8C-1F-64 (hex) Tesat-Spacecom GmbH & Co. KG +-F27000-F27FFF (base 16) Tesat-Spacecom GmbH & Co. KG +- Gerberstrasse 49 +- Backnang 71522 +- DE ++8C-1F-64 (hex) JBF ++F45000-F45FFF (base 16) JBF ++ via goretta 90 ++ mappano torino 10079 ++ IT + + 8C-1F-64 (hex) REFU Storage System GmbH + 53B000-53BFFF (base 16) REFU Storage System GmbH +@@ -5825,12 +5831,6 @@ F27000-F27FFF (base 16) Tesat-Spacecom GmbH & Co. KG + Bergisch Gladbach North Rhine-Westphalia 51465 + DE + +-8C-1F-64 (hex) JBF +-F45000-F45FFF (base 16) JBF +- via goretta 90 +- mappano torino 10079 +- IT +- + 8C-1F-64 (hex) Micro Electroninc Products + 765000-765FFF (base 16) Micro Electroninc Products + TT Vasumweg 150 +@@ -5849,23 +5849,17 @@ F45000-F45FFF (base 16) JBF + Indianapolis IN 46240 + US + +-8C-1F-64 (hex) Sicon srl +-B3B000-B3BFFF (base 16) Sicon srl +- Via Sila 1/3 +- Isola Vicentina Vicenza 36033 +- IT +- + 8C-1F-64 (hex) INVIXIUM ACCESS INC + 274000-274FFF (base 16) INVIXIUM ACCESS INC + 111 Gordon Baker Road, Suite #300 + Toronto Ontario M2H 3R1 + CA + +-8C-1F-64 (hex) Bunka Shutter Co., Ltd. +-0B0000-0B0FFF (base 16) Bunka Shutter Co., Ltd. +- 644-1 Tenjingoe,Ooaza-Kamiishizuka +- Oyama Tochigi 323-0063 +- JP ++8C-1F-64 (hex) Sicon srl ++B3B000-B3BFFF (base 16) Sicon srl ++ Via Sila 1/3 ++ Isola Vicentina Vicenza 36033 ++ IT + + 8C-1F-64 (hex) Sanchar Telesystems limited + 958000-958FFF (base 16) Sanchar Telesystems limited +@@ -5873,6 +5867,24 @@ B3B000-B3BFFF (base 16) Sicon srl + New Delhi Delhi 110020 + IN + ++8C-1F-64 (hex) Tantronic AG ++1EF000-1EFFFF (base 16) Tantronic AG ++ Gewerbering 12 ++ Wohlen AG 5610 ++ CH ++ ++8C-1F-64 (hex) Tunstall A/S ++F2C000-F2CFFF (base 16) Tunstall A/S ++ Niels Bohrs vej 42 ++ Stilling Skanderborg 8660 ++ DK ++ ++8C-1F-64 (hex) Bunka Shutter Co., Ltd. ++0B0000-0B0FFF (base 16) Bunka Shutter Co., Ltd. ++ 644-1 Tenjingoe,Ooaza-Kamiishizuka ++ Oyama Tochigi 323-0063 ++ JP ++ + 8C-1F-64 (hex) Rodgers Instruments US LLC + A42000-A42FFF (base 16) Rodgers Instruments US LLC + 6497 NE Croeni Avenue +@@ -5891,18 +5903,6 @@ A42000-A42FFF (base 16) Rodgers Instruments US LLC + Ottawa ON K2G 0G3 + CA + +-8C-1F-64 (hex) Tunstall A/S +-F2C000-F2CFFF (base 16) Tunstall A/S +- Niels Bohrs vej 42 +- Stilling Skanderborg 8660 +- DK +- +-8C-1F-64 (hex) Tantronic AG +-1EF000-1EFFFF (base 16) Tantronic AG +- Gewerbering 12 +- Wohlen AG 5610 +- CH +- + 8C-1F-64 (hex) Strategic Robotic Systems + C57000-C57FFF (base 16) Strategic Robotic Systems + 14842 NE 95th StreetBuilding 5 +@@ -5939,17 +5939,23 @@ DB7000-DB7FFF (base 16) Lambda Systems Inc. + St. Gallen 9008 + CH + ++8C-1F-64 (hex) Satelles Inc ++9FF000-9FFFFF (base 16) Satelles Inc ++ 1835 Alexander Bell Dr., Suite 240 ++ Reston VA 20191 ++ US ++ + 8C-1F-64 (hex) KCS Co., Ltd. + 4AE000-4AEFFF (base 16) KCS Co., Ltd. + 1101, NexZone, 50, Wanam-ro, Seongsan-gu, + Changwon-si 51573 + KR + +-8C-1F-64 (hex) Satelles Inc +-9FF000-9FFFFF (base 16) Satelles Inc +- 1835 Alexander Bell Dr., Suite 240 +- Reston VA 20191 +- US ++8C-1F-64 (hex) Peter Huber Kaeltemaschinenbau AG ++C35000-C35FFF (base 16) Peter Huber Kaeltemaschinenbau AG ++ Werner-von-Siemens-Str. 1 ++ Offenburg Ba-Wue 77656 ++ DE + + 70-B3-D5 (hex) EVCO SPA + A80000-A80FFF (base 16) EVCO SPA +@@ -11513,16 +11519,22 @@ ED9000-ED9FFF (base 16) NETGEN HITECH SOLUTIONS LLP + MUMBAI MAHARASHTRA 400064 + IN + ++8C-1F-64 (hex) Wolfspyre Labs ++9D4000-9D4FFF (base 16) Wolfspyre Labs ++ 5007 Highland Ct #WPL-IEEE ++ Austin TX 78731 ++ US ++ + 8C-1F-64 (hex) Vekto + 4AC000-4ACFFF (base 16) Vekto + Televisieweg 75 + Almere 1322AK + NL + +-8C-1F-64 (hex) Wolfspyre Labs +-9D4000-9D4FFF (base 16) Wolfspyre Labs +- 5007 Highland Ct #WPL-IEEE +- Austin TX 78731 ++8C-1F-64 (hex) SpectraDynamics, Inc. ++581000-581FFF (base 16) SpectraDynamics, Inc. ++ 1849 Cherry St. ++ Louisville CO 80027 + US + + 8C-1F-64 (hex) IO Master Technology +@@ -11531,11 +11543,11 @@ BD3000-BD3FFF (base 16) IO Master Technology + New Taipei City 235 Taipei 235 + TW + +-8C-1F-64 (hex) SpectraDynamics, Inc. +-581000-581FFF (base 16) SpectraDynamics, Inc. +- 1849 Cherry St. +- Louisville CO 80027 +- US ++8C-1F-64 (hex) ESCAD AUTOMATION GmbH ++05F000-05FFFF (base 16) ESCAD AUTOMATION GmbH ++ Escadstr. 1 ++ Pfullendorf 88630 ++ DE + + 8C-1F-64 (hex) TIFLEX + 194000-194FFF (base 16) TIFLEX +@@ -11543,11 +11555,11 @@ BD3000-BD3FFF (base 16) IO Master Technology + PONCIN 01450 + FR + +-8C-1F-64 (hex) ESCAD AUTOMATION GmbH +-05F000-05FFFF (base 16) ESCAD AUTOMATION GmbH +- Escadstr. 1 +- Pfullendorf 88630 +- DE ++8C-1F-64 (hex) Neuralog LP ++115000-115FFF (base 16) Neuralog LP ++ 4800 Sugar Grove Blvd., Ste. 200 ++ Stafford TX 77479 ++ US + + 8C-1F-64 (hex) Sichuan Aiyijan Technology Company Ltd. + 40C000-40CFFF (base 16) Sichuan Aiyijan Technology Company Ltd. +@@ -11573,11 +11585,11 @@ C24000-C24FFF (base 16) Alifax S.r.l. + POLVERARA PD 35020 + IT + +-8C-1F-64 (hex) Neuralog LP +-115000-115FFF (base 16) Neuralog LP +- 4800 Sugar Grove Blvd., Ste. 200 +- Stafford TX 77479 +- US ++8C-1F-64 (hex) Flextronics International Kft ++A4C000-A4CFFF (base 16) Flextronics International Kft ++ Zrínyi Miklós str. 38. ++ Zalaegerszeg 8900 ++ HU + + 8C-1F-64 (hex) Pietro Fiorentini Spa + 8D9000-8D9FFF (base 16) Pietro Fiorentini Spa +@@ -11585,30 +11597,24 @@ C24000-C24FFF (base 16) Alifax S.r.l. + San Vito al Tagliamento (PN) 33078 + IT + +-8C-1F-64 (hex) Flextronics International Kft +-A4C000-A4CFFF (base 16) Flextronics International Kft +- Zrínyi Miklós str. 38. +- Zalaegerszeg 8900 +- HU +- + 8C-1F-64 (hex) Flextronics International Kft + D02000-D02FFF (base 16) Flextronics International Kft + 38. Zrinyi Str. + Zalaegerszeg Zala 8900 + HU + +-8C-1F-64 (hex) Autark GmbH +-943000-943FFF (base 16) Autark GmbH +- Platz des Friedens 8 +- Baunatal Hessen D-34225 +- DE +- + 8C-1F-64 (hex) VMukti Solutions Private Limited + E30000-E30FFF (base 16) VMukti Solutions Private Limited + 3-4, Shivalik Plaza, Panjrapole, Ambawadi + Ahmedabad Gujarat 380015 + IN + ++8C-1F-64 (hex) Autark GmbH ++943000-943FFF (base 16) Autark GmbH ++ Platz des Friedens 8 ++ Baunatal Hessen D-34225 ++ DE ++ + 8C-1F-64 (hex) ACTELSER S.L. + 3F4000-3F4FFF (base 16) ACTELSER S.L. + CARRER ALBERT EINSTEIN, 44 +@@ -11645,11 +11651,11 @@ FA2000-FA2FFF (base 16) AZD Praha s.r.o., ZOZ Olomouc + Knoxville TN 37932 + US + +-8C-1F-64 (hex) Beijing Zhongchen Microelectronics Co.,Ltd +-AB4000-AB4FFF (base 16) Beijing Zhongchen Microelectronics Co.,Ltd +- Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District +- Beijing Beijing 100081 +- CN ++70-B3-D5 (hex) Watteco ++E75000-E75FFF (base 16) Watteco ++ Rue Gutenberg ++ Hennebont Brittany 56700 ++ FR + + 8C-1F-64 (hex) Toolplanet Co., Ltd. + 54F000-54FFFF (base 16) Toolplanet Co., Ltd. +@@ -11663,11 +11669,11 @@ AB4000-AB4FFF (base 16) Beijing Zhongchen Microelectronics Co.,Ltd + Dubai Dubai 74249 + AE + +-70-B3-D5 (hex) Watteco +-E75000-E75FFF (base 16) Watteco +- Rue Gutenberg +- Hennebont Brittany 56700 +- FR ++8C-1F-64 (hex) Beijing Zhongchen Microelectronics Co.,Ltd ++AB4000-AB4FFF (base 16) Beijing Zhongchen Microelectronics Co.,Ltd ++ Room 0309, 3rd Floor, Building 2, China Agricultural University International Pioneer Park, No. 10 Tianxiu Road, Haidian District ++ Beijing Beijing 100081 ++ CN + + 8C-1F-64 (hex) Weidmann Tecnologia Electrica de Mexico + 7B7000-7B7FFF (base 16) Weidmann Tecnologia Electrica de Mexico +@@ -11705,17 +11711,23 @@ B7C000-B7CFFF (base 16) EVERNET CO,.LTD TAIWAN + Nelson Nelson 7010 + NZ + ++8C-1F-64 (hex) Stratis IOT ++3C5000-3C5FFF (base 16) Stratis IOT ++ 4230 Main Street ++ Philadelphia PA 19127 ++ US ++ + 8C-1F-64 (hex) e.p.g. Elettronica s.r.l. + 3D4000-3D4FFF (base 16) e.p.g. Elettronica s.r.l. + Via della Crocetta 3 + Oltrona di San Mamette Como (CO) 22070 + IT + +-8C-1F-64 (hex) Stratis IOT +-3C5000-3C5FFF (base 16) Stratis IOT +- 4230 Main Street +- Philadelphia PA 19127 +- US ++8C-1F-64 (hex) FMTec GmbH - Future Management Technologies ++3E3000-3E3FFF (base 16) FMTec GmbH - Future Management Technologies ++ Austraße 59e ++ Bludenz Austria 6700 ++ AT + + 8C-1F-64 (hex) Twinleaf LLC + 080000-080FFF (base 16) Twinleaf LLC +@@ -11723,11 +11735,11 @@ B7C000-B7CFFF (base 16) EVERNET CO,.LTD TAIWAN + Plainsboro NJ 08536 + US + +-8C-1F-64 (hex) FMTec GmbH - Future Management Technologies +-3E3000-3E3FFF (base 16) FMTec GmbH - Future Management Technologies +- Austraße 59e +- Bludenz Austria 6700 +- AT ++8C-1F-64 (hex) Tinkerbee Innovations Private Limited ++544000-544FFF (base 16) Tinkerbee Innovations Private Limited ++ #677, 1st Floor, 27th Main, 13th Cross Road,HSR Layout, Sector 1 ++ Bengaluru Karnataka 560102 ++ IN + + 8C-1F-64 (hex) Genius Vision Digital Private Limited + CC6000-CC6FFF (base 16) Genius Vision Digital Private Limited +@@ -11741,6 +11753,24 @@ CC6000-CC6FFF (base 16) Genius Vision Digital Private Limited + Houston TX 77024-7338 + US + ++8C-1F-64 (hex) Abode Systems Inc ++B13000-B13FFF (base 16) Abode Systems Inc ++ 2625 Middlefield Road ++ Palo Alto CA 94306 ++ US ++ ++8C-1F-64 (hex) DAVE SRL ++0EF000-0EFFFF (base 16) DAVE SRL ++ VIA TALPONEDO 29/A ++ PORCIA PORDENONE 330850 ++ IT ++ ++8C-1F-64 (hex) GO development GmbH ++7BC000-7BCFFF (base 16) GO development GmbH ++ Zeppelinstraße 126 ++ Esslingen am Neckar 73730 ++ DE ++ + 70-B3-D5 (hex) System West dba ICS Electronics + E06000-E06FFF (base 16) System West dba ICS Electronics + 7034 Commerce Circle Suite A +@@ -17300,18 +17330,18 @@ E61000-E61FFF (base 16) Stange Elektronik GmbH + Beijing Beijing 100029 + CN + +-8C-1F-64 (hex) Abbott Diagnostics Technologies AS +-429000-429FFF (base 16) Abbott Diagnostics Technologies AS +- P. O. Box 6863 Rodeløkka +- Oslo Oslo 0504 +- NO +- + 8C-1F-64 (hex) EOLANE + 911000-911FFF (base 16) EOLANE + ZI DU VAL D OMBREE + COMBREE - 49520 + FR + ++8C-1F-64 (hex) Abbott Diagnostics Technologies AS ++429000-429FFF (base 16) Abbott Diagnostics Technologies AS ++ P. O. Box 6863 Rodeløkka ++ Oslo Oslo 0504 ++ NO ++ + 8C-1F-64 (hex) Huz Electronics Ltd + BC2000-BC2FFF (base 16) Huz Electronics Ltd + 10 Avondale road +@@ -17372,6 +17402,12 @@ E64000-E64FFF (base 16) Indefac company + São Paulo São Paulo 04268020 + BR + ++8C-1F-64 (hex) Real Digital ++3B2000-3B2FFF (base 16) Real Digital ++ 655 SW James Pl ++ Pullman WA 99163 ++ US ++ + 8C-1F-64 (hex) Fingoti Limited + CD9000-CD9FFF (base 16) Fingoti Limited + Barnam Ham Farm +@@ -17390,12 +17426,6 @@ FB7000-FB7FFF (base 16) Grace Design/Lunatec LLC + Leawood KS 66251 + US + +-8C-1F-64 (hex) Real Digital +-3B2000-3B2FFF (base 16) Real Digital +- 655 SW James Pl +- Pullman WA 99163 +- US +- + 8C-1F-64 (hex) Zhuhai Yunzhou Intelligence Technology Ltd. + 254000-254FFF (base 16) Zhuhai Yunzhou Intelligence Technology Ltd. + Room 311,312A,Floor 3,Heung Shan TechPort,No.3888 Qinglv North Road,Tangjiawan Town +@@ -17432,6 +17462,12 @@ CCB000-CCBFFF (base 16) suzhou yuecrown Electronic Technology Co.,LTD + suzhou jiangsu 215000 + CN + ++8C-1F-64 (hex) Paragraf ++01A000-01AFFF (base 16) Paragraf ++ 7-8 West Newlands ++ Somersham Cambridgeshire PE28 3EB ++ GB ++ + 8C-1F-64 (hex) nke marine electronics + 817000-817FFF (base 16) nke marine electronics + 6 rue gutenberg +@@ -17444,12 +17480,6 @@ CCB000-CCBFFF (base 16) suzhou yuecrown Electronic Technology Co.,LTD + Leverkusen 51381 + DE + +-8C-1F-64 (hex) Paragraf +-01A000-01AFFF (base 16) Paragraf +- 7-8 West Newlands +- Somersham Cambridgeshire PE28 3EB +- GB +- + 8C-1F-64 (hex) YUYAMA MFG Co.,Ltd + 5AC000-5ACFFF (base 16) YUYAMA MFG Co.,Ltd + 1-4-30 +@@ -17474,23 +17504,53 @@ CDB000-CDBFFF (base 16) EUROPEAN TELECOMMUNICATION INTERNATIONAL KFT + Budapest 1132 + HU + ++8C-1F-64 (hex) HTK Hamburg GmbH ++6D5000-6D5FFF (base 16) HTK Hamburg GmbH ++ Frahmredder 49 ++ Hamburg Hamburg 22393 ++ DE ++ + 8C-1F-64 (hex) Goodtech AS dep Fredrikstad + C0E000-C0EFFF (base 16) Goodtech AS dep Fredrikstad + Gamle Beddingvei 28 + FREDRIKSTAD Viken 1671 + NO + ++8C-1F-64 (hex) DIALTRONICS SYSTEMS PVT LTD ++1A5000-1A5FFF (base 16) DIALTRONICS SYSTEMS PVT LTD ++ Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur ++ Hyderabad Telangana 500081 ++ IN ++ + 70-B3-D5 (hex) TRUMPF Huttinger GmbH + Co. KG, + CD2000-CD2FFF (base 16) TRUMPF Huttinger GmbH + Co. KG, + Helmholtzstr. 1 + Stutensee 76297 + DE + +-8C-1F-64 (hex) DIALTRONICS SYSTEMS PVT LTD +-1A5000-1A5FFF (base 16) DIALTRONICS SYSTEMS PVT LTD +- Dialtronics Systems Pvt Ltd, #201, Sirisampada Hitech, Kavuri Hills, Madhapur +- Hyderabad Telangana 500081 +- IN ++8C-1F-64 (hex) Agvolution GmbH ++098000-098FFF (base 16) Agvolution GmbH ++ Philipp-Reis-Str. 2A ++ Göttingen 37075 ++ DE ++ ++8C-1F-64 (hex) dinosys ++5CB000-5CBFFF (base 16) dinosys ++ 501,35,Gwangnaruro 6-gil, ++ Seoul Seoul 133-832 ++ KR ++ ++8C-1F-64 (hex) HIROSAWA ELECTRIC Co.,Ltd. ++7D8000-7D8FFF (base 16) HIROSAWA ELECTRIC Co.,Ltd. ++ 2-13-14 Nishikoujiya ++ Otaku Tokyo 1440034 ++ JP ++ ++8C-1F-64 (hex) WonATech Co., Ltd. ++890000-890FFF (base 16) WonATech Co., Ltd. ++ 7, Neunganmal 1-gil ++ Seocho-gu Seoul 06801 ++ KR + + 70-B3-D5 (hex) YUYAMA MFG Co.,Ltd + BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd +@@ -23162,24 +23222,36 @@ BD6000-BD6FFF (base 16) NOVA Products GmbH + Munich 80538 + DE + +-70-B3-D5 (hex) Flextronics International Kft +-E2F000-E2FFFF (base 16) Flextronics International Kft ++8C-1F-64 (hex) ECO-ADAPT ++C38000-C38FFF (base 16) ECO-ADAPT ++ 39 Rue de Chateaudun ++ Paris Ile-de-France 75009 ++ FR ++ ++8C-1F-64 (hex) Flextronics International Kft ++F5C000-F5CFFF (base 16) Flextronics International Kft + Zrínyi Miklós str. 38. + Zalaegerszeg 8900 + HU + +-8C-1F-64 (hex) Flextronics International Kft +-F5C000-F5CFFF (base 16) Flextronics International Kft ++70-B3-D5 (hex) Flextronics International Kft ++E2F000-E2FFFF (base 16) Flextronics International Kft + Zrínyi Miklós str. 38. + Zalaegerszeg 8900 + HU + +-8C-1F-64 (hex) ECO-ADAPT +-C38000-C38FFF (base 16) ECO-ADAPT +- 39 Rue de Chateaudun +- Paris Ile-de-France 75009 ++8C-1F-64 (hex) ADETEC SAS ++AE8000-AE8FFF (base 16) ADETEC SAS ++ 8 rue de l'Angoumois ++ ARGENTEUIL 95100 + FR + ++8C-1F-64 (hex) AML ++634000-634FFF (base 16) AML ++ 2190 Regal Parkway ++ Euless TX 76040 ++ US ++ + 8C-1F-64 (hex) In-lite Design BV + 557000-557FFF (base 16) In-lite Design BV + Stephensonweg 18 +@@ -23204,18 +23276,6 @@ A6D000-A6DFFF (base 16) CyberneX Co., Ltd + YOKOHAMA Kanagawa 222-0033 + JP + +-8C-1F-64 (hex) ADETEC SAS +-AE8000-AE8FFF (base 16) ADETEC SAS +- 8 rue de l'Angoumois +- ARGENTEUIL 95100 +- FR +- +-8C-1F-64 (hex) AML +-634000-634FFF (base 16) AML +- 2190 Regal Parkway +- Euless TX 76040 +- US +- + 70-B3-D5 (hex) Active Research Limited + 6A0000-6A0FFF (base 16) Active Research Limited + 21 Harwell Road +@@ -23276,23 +23336,23 @@ D69000-D69FFF (base 16) ADiCo Corporation + Utsunomiya-shi Tochigi 320-0075 + JP + +-8C-1F-64 (hex) METRONA-Union GmbH +-9FA000-9FAFFF (base 16) METRONA-Union GmbH +- Aidenbachstr. 40 +- München 81379 +- DE +- + 8C-1F-64 (hex) Wittra Networks AB + DF8000-DF8FFF (base 16) Wittra Networks AB + Västra Järnvägsgatan 39th floor(Convendum) + Stockholm Stockholm 111 64 + SE + +-8C-1F-64 (hex) Unitron Systems b.v. +-FA8000-FA8FFF (base 16) Unitron Systems b.v. +- SCHANSESTRAAT 7 +- IJzendijke 4515 RN +- NL ++8C-1F-64 (hex) METRONA-Union GmbH ++9FA000-9FAFFF (base 16) METRONA-Union GmbH ++ Aidenbachstr. 40 ++ München 81379 ++ DE ++ ++8C-1F-64 (hex) Retency ++BBF000-BBFFFF (base 16) Retency ++ 19 rue Vivienne ++ Paris 75002 ++ FR + + 8C-1F-64 (hex) University of Geneva - Department of Particle Physics + D88000-D88FFF (base 16) University of Geneva - Department of Particle Physics +@@ -23300,11 +23360,11 @@ D88000-D88FFF (base 16) University of Geneva - Department of Particle Physi + Geneva 1211 + CH + +-8C-1F-64 (hex) Massar Networks +-FAA000-FAAFFF (base 16) Massar Networks +- Postfach 1207PEAX ID 473.1849.6740.89 +- Baar Zug CH-6341 +- CH ++8C-1F-64 (hex) Camius ++601000-601FFF (base 16) Camius ++ 41593 Winchester Rd., Ste 200 ++ Temecula CA 92590 ++ US + + 8C-1F-64 (hex) Vytahy-Vymyslicky s.r.o. + 737000-737FFF (base 16) Vytahy-Vymyslicky s.r.o. +@@ -23312,17 +23372,17 @@ FAA000-FAAFFF (base 16) Massar Networks + Uherske Hradiste - Jarosov 60801 + CZ + +-8C-1F-64 (hex) Retency +-BBF000-BBFFFF (base 16) Retency +- 19 rue Vivienne +- Paris 75002 +- FR ++8C-1F-64 (hex) Unitron Systems b.v. ++FA8000-FA8FFF (base 16) Unitron Systems b.v. ++ SCHANSESTRAAT 7 ++ IJzendijke 4515 RN ++ NL + +-8C-1F-64 (hex) Camius +-601000-601FFF (base 16) Camius +- 41593 Winchester Rd., Ste 200 +- Temecula CA 92590 +- US ++8C-1F-64 (hex) Massar Networks ++FAA000-FAAFFF (base 16) Massar Networks ++ Postfach 1207PEAX ID 473.1849.6740.89 ++ Baar Zug CH-6341 ++ CH + + 8C-1F-64 (hex) Patch Technologies, Inc. + 0AC000-0ACFFF (base 16) Patch Technologies, Inc. +@@ -23360,12 +23420,6 @@ C3A000-C3AFFF (base 16) YUSUR Technology Co., Ltd. + Vancouver BC V5K 2B2 + CA + +-8C-1F-64 (hex) Benison Tech +-3AC000-3ACFFF (base 16) Benison Tech +- 2100 Geng Road, Suite 210 +- Palo Alto CA 94043 +- US +- + 8C-1F-64 (hex) HIGHVOLT Prüftechnik + 8F8000-8F8FFF (base 16) HIGHVOLT Prüftechnik + Marie-Curie-Straße10 +@@ -23378,17 +23432,11 @@ C3A000-C3AFFF (base 16) YUSUR Technology Co., Ltd. + Vaajakoski 40800 + FI + +-8C-1F-64 (hex) BCMTECH +-94C000-94CFFF (base 16) BCMTECH +- 803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu, +- Anyang-si Gyeonggi-do 14042 +- KR +- +-8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme +-97C000-97CFFF (base 16) MB connect line GmbH Fernwartungssysteme +- Winnettener Straße 6 +- Dinkelsbuehl Bavaria 91550 +- DE ++8C-1F-64 (hex) Benison Tech ++3AC000-3ACFFF (base 16) Benison Tech ++ 2100 Geng Road, Suite 210 ++ Palo Alto CA 94043 ++ US + + 8C-1F-64 (hex) SLAT + 683000-683FFF (base 16) SLAT +@@ -23396,30 +23444,30 @@ C3A000-C3AFFF (base 16) YUSUR Technology Co., Ltd. + Champagne au Mont d'Or Rhône 69543 + FR + ++8C-1F-64 (hex) MB connect line GmbH Fernwartungssysteme ++97C000-97CFFF (base 16) MB connect line GmbH Fernwartungssysteme ++ Winnettener Straße 6 ++ Dinkelsbuehl Bavaria 91550 ++ DE ++ + 8C-1F-64 (hex) E VISION INDIA PVT LTD + 7AF000-7AFFFF (base 16) E VISION INDIA PVT LTD + 9/205, MAIN MARKET OLD FARIDABAD HARYANA INDIA 121002 + Faridabad HARYANA 121002 + IN + ++8C-1F-64 (hex) BCMTECH ++94C000-94CFFF (base 16) BCMTECH ++ 803ho(Gongjang-dong), Simin-daero 109beon-gil, Dongan-gu, ++ Anyang-si Gyeonggi-do 14042 ++ KR ++ + 8C-1F-64 (hex) Fink Zeitsysteme GmbH + 73B000-73BFFF (base 16) Fink Zeitsysteme GmbH + Möslestraße 21 + Altach Vorarlberg 6844 + AT + +-70-B3-D5 (hex) PLANET INNOVATION (PI) +-C75000-C75FFF (base 16) PLANET INNOVATION (PI) +- 6 Thomas +- Irvine CA 92618 +- US +- +-8C-1F-64 (hex) KST technology +-DD7000-DD7FFF (base 16) KST technology +- KST B/D 4-5, Wiryeseong-daero 12-gil +- Songpa-gu Seoul 05636 +- KR +- + 8C-1F-64 (hex) Bavaria Digital Technik GmbH + FB5000-FB5FFF (base 16) Bavaria Digital Technik GmbH + Rehbichler Weg 26 +@@ -23432,6 +23480,42 @@ CF4000-CF4FFF (base 16) NT + Tel Aviv 6701101 + IL + ++8C-1F-64 (hex) KST technology ++DD7000-DD7FFF (base 16) KST technology ++ KST B/D 4-5, Wiryeseong-daero 12-gil ++ Songpa-gu Seoul 05636 ++ KR ++ ++70-B3-D5 (hex) PLANET INNOVATION (PI) ++C75000-C75FFF (base 16) PLANET INNOVATION (PI) ++ 6 Thomas ++ Irvine CA 92618 ++ US ++ ++8C-1F-64 (hex) UniJet Co., Ltd. ++946000-946FFF (base 16) UniJet Co., Ltd. ++ 53-24,Dongtansandan 6-gil ++ Hwaseong Gyeonggi-do 18487 ++ KR ++ ++8C-1F-64 (hex) BELIMO Automation AG ++90F000-90FFFF (base 16) BELIMO Automation AG ++ brunnenbachstrasse 1 ++ Hinwil Zurich 8340 ++ CH ++ ++8C-1F-64 (hex) Sanchar Communication Systems ++685000-685FFF (base 16) Sanchar Communication Systems ++ X-47, okhla phase 2 ++ delhi delhi 110020 ++ IN ++ ++8C-1F-64 (hex) BRS Sistemas Eletrônicos ++CAF000-CAFFFF (base 16) BRS Sistemas Eletrônicos ++ Rua Gomes de Freitas, 491 / 204 ++ Porto Alegre RS 91380-000 ++ BR ++ + 70-B3-D5 (hex) DISMUNTEL SAL + 92C000-92CFFF (base 16) DISMUNTEL SAL + Pol ind cotes +@@ -28877,12 +28961,6 @@ DC0000-DC0FFF (base 16) Pigs Can Fly Labs LLC + Beaverton OR 97008 + US + +-8C-1F-64 (hex) United States Technologies Inc. +-525000-525FFF (base 16) United States Technologies Inc. +- 1701 Pollitt Drive +- Fair Lawn NJ 07410 +- US +- + 8C-1F-64 (hex) EMBSYS SISTEMAS EMBARCADOS + FD4000-FD4FFF (base 16) EMBSYS SISTEMAS EMBARCADOS + AV. SIGISMUNDO NUNES DE OLIVEIRA,570 CASA 324 +@@ -28895,11 +28973,17 @@ DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co + Webb City MO 64870 + US + +-8C-1F-64 (hex) PuS GmbH und Co. KG +-4E0000-4E0FFF (base 16) PuS GmbH und Co. KG +- Hainstr. 13 +- Gera Germany 07545 +- DE ++8C-1F-64 (hex) United States Technologies Inc. ++525000-525FFF (base 16) United States Technologies Inc. ++ 1701 Pollitt Drive ++ Fair Lawn NJ 07410 ++ US ++ ++8C-1F-64 (hex) Rumble, Inc ++837000-837FFF (base 16) Rumble, Inc ++ Bluebonnet Ln ++ Austin TX 78704 ++ US + + 8C-1F-64 (hex) EA Elektroautomatik GmbH & Co. KG + 504000-504FFF (base 16) EA Elektroautomatik GmbH & Co. KG +@@ -28907,11 +28991,11 @@ DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co + Viersen NRW 41747 + DE + +-8C-1F-64 (hex) Rumble, Inc +-837000-837FFF (base 16) Rumble, Inc +- Bluebonnet Ln +- Austin TX 78704 +- US ++8C-1F-64 (hex) PuS GmbH und Co. KG ++4E0000-4E0FFF (base 16) PuS GmbH und Co. KG ++ Hainstr. 13 ++ Gera Germany 07545 ++ DE + + 8C-1F-64 (hex) Cinetix Srl + 89E000-89EFFF (base 16) Cinetix Srl +@@ -28919,18 +29003,18 @@ DD5000-DD5FFF (base 16) Cardinal Scales Manufacturing Co + Borgo Valsugana Trento 38051 + IT + +-8C-1F-64 (hex) Mitsubishi Electric India Pvt. Ltd. +-D92000-D92FFF (base 16) Mitsubishi Electric India Pvt. Ltd. +- EL3, J BLOCK, M.I.D.C. Bhosari +- PUNE Maharastra 411027 +- IN +- + 8C-1F-64 (hex) ATM SOLUTIONS + 9BD000-9BDFFF (base 16) ATM SOLUTIONS + Office 10, Krishna Arcade, Plot 65, Sector 2A, Koparkharine + Navi Mumbai Maharashatra 400709 + IN + ++8C-1F-64 (hex) Mitsubishi Electric India Pvt. Ltd. ++D92000-D92FFF (base 16) Mitsubishi Electric India Pvt. Ltd. ++ EL3, J BLOCK, M.I.D.C. Bhosari ++ PUNE Maharastra 411027 ++ IN ++ + 8C-1F-64 (hex) Integer.pl S.A. + A97000-A97FFF (base 16) Integer.pl S.A. + Wielicka 28 +@@ -28949,17 +29033,11 @@ A97000-A97FFF (base 16) Integer.pl S.A. + Hagen 58119 + DE + +-8C-1F-64 (hex) SCIREQ Scientific Respiratory Equipment Inc +-01E000-01EFFF (base 16) SCIREQ Scientific Respiratory Equipment Inc +- 6600 rue St. Urbain, Suite 300 +- Montreal Quebec H2S 3G8 +- CA +- +-8C-1F-64 (hex) Beijing Wenrise Technology Co., Ltd. +-A84000-A84FFF (base 16) Beijing Wenrise Technology Co., Ltd. +- No.10 Shangdi Road, Haidian District +- Beijing Beijing 100085 +- CN ++8C-1F-64 (hex) ADAMCZEWSKI elektronische Messtechnik GmbH ++F4E000-F4EFFF (base 16) ADAMCZEWSKI elektronische Messtechnik GmbH ++ Felix-Wankel-Str. 13 ++ Zaberfeld Baden-Württemberg 74374 ++ DE + + 8C-1F-64 (hex) XSENSOR Technology Corp. + 7AA000-7AAFFF (base 16) XSENSOR Technology Corp. +@@ -28967,29 +29045,29 @@ A84000-A84FFF (base 16) Beijing Wenrise Technology Co., Ltd. + Calgary Alberta T2G 0Z9 + CA + +-8C-1F-64 (hex) ADAMCZEWSKI elektronische Messtechnik GmbH +-F4E000-F4EFFF (base 16) ADAMCZEWSKI elektronische Messtechnik GmbH +- Felix-Wankel-Str. 13 +- Zaberfeld Baden-Württemberg 74374 +- DE +- + 8C-1F-64 (hex) MG s.r.l. + 67A000-67AFFF (base 16) MG s.r.l. + via Monte Bianco, 1 + Solbiate Olona VA 21058 + IT + ++8C-1F-64 (hex) Beijing Wenrise Technology Co., Ltd. ++A84000-A84FFF (base 16) Beijing Wenrise Technology Co., Ltd. ++ No.10 Shangdi Road, Haidian District ++ Beijing Beijing 100085 ++ CN ++ + 8C-1F-64 (hex) AMF Medical SA + F52000-F52FFF (base 16) AMF Medical SA + Chemin de la Dent-d'Oche 1 A + Ecublens VD Vaud 1024 + CH + +-8C-1F-64 (hex) Qualitrol LLC +-905000-905FFF (base 16) Qualitrol LLC +- 1385 Fairport Rd +- Fairport NY 14450 +- US ++8C-1F-64 (hex) SCIREQ Scientific Respiratory Equipment Inc ++01E000-01EFFF (base 16) SCIREQ Scientific Respiratory Equipment Inc ++ 6600 rue St. Urbain, Suite 300 ++ Montreal Quebec H2S 3G8 ++ CA + + 8C-1F-64 (hex) HUPI + 489000-489FFF (base 16) HUPI +@@ -28997,6 +29075,18 @@ F52000-F52FFF (base 16) AMF Medical SA + Bidart Sélectionnez un département / état 64210 + FR + ++8C-1F-64 (hex) Qualitrol LLC ++905000-905FFF (base 16) Qualitrol LLC ++ 1385 Fairport Rd ++ Fairport NY 14450 ++ US ++ ++8C-1F-64 (hex) WINTUS SYSTEM ++9BA000-9BAFFF (base 16) WINTUS SYSTEM ++ E1102, 7 yeonmujang 5ga gil, seongdong-gu ++ SEOUL SEOUL 04782 ++ KR ++ + 8C-1F-64 (hex) TTC TELEKOMUNIKACE, s.r.o. + E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. + Trebohosticka 5 +@@ -29009,11 +29099,11 @@ E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. + Yreka CA 96097 + US + +-8C-1F-64 (hex) WINTUS SYSTEM +-9BA000-9BAFFF (base 16) WINTUS SYSTEM +- E1102, 7 yeonmujang 5ga gil, seongdong-gu +- SEOUL SEOUL 04782 +- KR ++8C-1F-64 (hex) Proterra, Inc ++552000-552FFF (base 16) Proterra, Inc ++ 1 Whitlee Court ++ Greenville SC 29607 ++ US + + 8C-1F-64 (hex) eumig industrie-TV GmbH. + 5B3000-5B3FFF (base 16) eumig industrie-TV GmbH. +@@ -29021,12 +29111,6 @@ E4C000-E4CFFF (base 16) TTC TELEKOMUNIKACE, s.r.o. + Anif Salzburg 5081 + AT + +-8C-1F-64 (hex) Proterra, Inc +-552000-552FFF (base 16) Proterra, Inc +- 1 Whitlee Court +- Greenville SC 29607 +- US +- + 8C-1F-64 (hex) TeraDiode / Panasonic + 2C3000-2C3FFF (base 16) TeraDiode / Panasonic + 30 Upton Dr +@@ -29045,18 +29129,6 @@ D7C000-D7CFFF (base 16) QUERCUS TECHNOLOGIES, S.L. + Uijeongbu-si Gyonggi-do 11652 + KR + +-8C-1F-64 (hex) M/S MILIND RAMACHANDRA RAJWADE +-721000-721FFF (base 16) M/S MILIND RAMACHANDRA RAJWADE +- 713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru +- Pune Maharashtra 411051 +- IN +- +-8C-1F-64 (hex) JW Froehlich Maschinenfabrik GmbH +-C8F000-C8FFFF (base 16) JW Froehlich Maschinenfabrik GmbH +- Kohlhammerstrasse 18-24 +- Leinfelden-Echterdingen 70771 +- DE +- + 8C-1F-64 (hex) VECOS Europe B.V. + C80000-C80FFF (base 16) VECOS Europe B.V. + ESP 237 +@@ -29069,6 +29141,18 @@ C80000-C80FFF (base 16) VECOS Europe B.V. + Albstadt Baden Württemberg 72458 + DE + ++8C-1F-64 (hex) M/S MILIND RAMACHANDRA RAJWADE ++721000-721FFF (base 16) M/S MILIND RAMACHANDRA RAJWADE ++ 713, Sinhgad Road, P.cast S. No. 39, Manikbaug Industries Wadagaon Budru ++ Pune Maharashtra 411051 ++ IN ++ ++8C-1F-64 (hex) JW Froehlich Maschinenfabrik GmbH ++C8F000-C8FFFF (base 16) JW Froehlich Maschinenfabrik GmbH ++ Kohlhammerstrasse 18-24 ++ Leinfelden-Echterdingen 70771 ++ DE ++ + 8C-1F-64 (hex) Power Electronics Espana, S.L. + D08000-D08FFF (base 16) Power Electronics Espana, S.L. + Poligono Industrial Carrases. Ronda del camp d Aviacio 4 +@@ -29087,18 +29171,18 @@ B01000-B01FFF (base 16) noah + Leipzig 04109 + DE + +-8C-1F-64 (hex) eumig industrie-TV GmbH. +-426000-426FFF (base 16) eumig industrie-TV GmbH. +- Gewerbeparkstrasse 9 +- Anif Salzburg 5081 +- AT +- + 8C-1F-64 (hex) Hamamatsu Photonics K.K. + 67F000-67FFFF (base 16) Hamamatsu Photonics K.K. + 314-5 Shimokanzo + Iwata Shizuoka 4380193 + JP + ++8C-1F-64 (hex) eumig industrie-TV GmbH. ++426000-426FFF (base 16) eumig industrie-TV GmbH. ++ Gewerbeparkstrasse 9 ++ Anif Salzburg 5081 ++ AT ++ + 8C-1F-64 (hex) Telemetrics Inc. + 5E5000-5E5FFF (base 16) Telemetrics Inc. + 75 Commerce Dr +@@ -29123,18 +29207,18 @@ E0E000-E0EFFF (base 16) Nokeval Oy + fuzhou 350008 + CN + +-8C-1F-64 (hex) TEKVOX, Inc +-197000-197FFF (base 16) TEKVOX, Inc +- 1965 Post Rd, Suite 400 +- New Braunfels TX 78130 +- US +- + 8C-1F-64 (hex) ACSL Ltd. + A2D000-A2DFFF (base 16) ACSL Ltd. + 3-6-4 Rinkaicho + Edogawa-ku Tokyo 134-0086 + JP + ++8C-1F-64 (hex) TEKVOX, Inc ++197000-197FFF (base 16) TEKVOX, Inc ++ 1965 Post Rd, Suite 400 ++ New Braunfels TX 78130 ++ US ++ + 8C-1F-64 (hex) Private + EE0000-EE0FFF (base 16) Private + +@@ -29161,3 +29245,9 @@ DFE000-DFEFFF (base 16) Nuvation Energy + 630 Lively Blvd + Elk Grove Village IL 60007 + US ++ ++8C-1F-64 (hex) AperNet, LLC ++043000-043FFF (base 16) AperNet, LLC ++ 651 North Broad StreetSuite 206 ++ Middletown DE 19709 ++ US +diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids +index 9bba38f431..dddb2b639a 100644 +--- a/hwdb.d/pci.ids ++++ b/hwdb.d/pci.ids +@@ -1,8 +1,8 @@ + # + # List of PCI ID's + # +-# Version: 2022.05.03 +-# Date: 2022-05-03 03:15:01 ++# Version: 2022.05.09 ++# Date: 2022-05-09 03:15:02 + # + # Maintained by Albert Pool, Martin Mares, and other volunteers from + # the PCI ID Project at https://pci-ids.ucw.cz/. +@@ -70,6 +70,8 @@ + 018a LevelOne + 0106 FPC-0106TX misprogrammed [RTL81xx] + 01de Oxide Computer Company ++ 0000 Propolis NVMe Controller ++ 0001 Propolis xHCI Controller + # probably misprogrammed Intel Atom C2338 on Dell 0K8Y0N board + 0200 Dell (wrong ID) + # 021b is not Compaq but there is a board misprogrammed +@@ -743,7 +745,7 @@ + 1028 213e PERC H765i MX + 1028 213f PERC H365i Adapter + 1028 2140 PERC H365i Front +- 1028 2141 PERC H360 MX ++ 1028 2141 PERC H365i MX + 1028 2142 HBA465e Adapter + 1028 2209 HBA465i Adapter + 1028 220a HBA465i Front +@@ -6821,6 +6823,8 @@ + 3505 SH7751 PCI Controller (PCIC) + 350e SH7751R PCI Controller (PCIC) + 1055 Microchip Technology / SMSC ++ 7430 LAN7430 ++ 7431 LAN7431 + 9130 SLC90E66 [Victory66] IDE + 9460 SLC90E66 [Victory66] ISA + 9462 SLC90E66 [Victory66] USB +@@ -12479,8 +12483,9 @@ + 223f GA102GL + 228b GA104 High Definition Audio Controller + 2296 Tegra PCIe Endpoint Virtual Network +- 2302 GA103 +- 2321 GA103 ++ 2302 GH100 ++ 2321 GH100 ++ 2336 GH100 [H100 96GB] + 2414 GA103 [GeForce RTX 3060 Ti] + 2420 GA103M [GeForce RTX 3080 Ti Mobile] + 2438 GA103GLM [RTX A5500 Laptop GPU] +@@ -17216,8 +17221,42 @@ + 5190 9200 ECO NVMe SSD + 5191 9200 PRO NVMe SSD + 5192 9200 MAX NVMe SSD +- 51a2 9300 PRO NVMe SSD +- 51a3 9300 MAX NVMe SSD ++ 51a2 7300 PRO NVMe SSD ++ 51a3 7300 MAX NVMe SSD ++ 51b1 9300 PRO NVMe SSD ++ 1344 4000 3.84TB U.2 ++ 1344 5000 7.68TB U.2 ++ 1344 6000 15.36TB U.2 ++ 51b2 9300 MAX NVMe SSD ++ 1344 4000 3.2TB U.2 ++ 1344 5000 6.4 TB U.2 ++ 1344 6000 12.8TB U.2 ++ 51c0 7400 PRO NVMe SSD ++ 1344 1100 M.2 480GB ++ 1344 2000 U.3 960GB ++ 1344 2100 M.2 960GB ++ 1344 2600 E1.S 960GB ++ 1344 2b00 M.2 1920GB ++ 1344 2d00 E1.2 1920GB ++ 1344 3000 U.3 1920GB ++ 1344 3e00 M.2 3840GB ++ 1344 3f00 E1.S 3840GB ++ 1344 4000 U.3 3840GB ++ 1344 5000 U.3 7680GB ++ 51c1 7400 MAX NVMe SSD ++ 1344 1100 M.2 400GB ++ 1344 2000 U.3 800GB ++ 1344 2100 M.2 800GB ++ 1344 2600 E1.S 800GB ++ 1344 2b00 M.2 1600GB ++ 1344 2d00 E1.S 1600GB ++ 1344 3000 U.3 1600GB ++ 1344 3e00 M.2 3200GB ++ 1344 3f00 E1.S 3200GB ++ 1344 4000 U.3 3200GB ++ 1344 5000 U.3 6400GB ++ 51c3 7450 PRO NVMe SSD ++ 51c4 7450 MAX NVMe SSD + 1345 Arescom Inc + 1347 Odetics + 1349 Sumitomo Electric Industries, Ltd. +@@ -18734,6 +18773,8 @@ + 6088 T62100-6088 Unified Wire Ethernet Controller + 6089 T62100-6089 Unified Wire Ethernet Controller + 608a T62100-608a Unified Wire Ethernet Controller ++ 6092 T62100-KR Unified Wire Ethernet Controller ++ 01de fff9 Gimlet T6 + 6401 T6225-CR Unified Wire Ethernet Controller + 6402 T6225-SO-CR Unified Wire Ethernet Controller + 6403 T6425-CR Unified Wire Ethernet Controller +@@ -18758,6 +18799,8 @@ + 6488 T62100-6088 Unified Wire Ethernet Controller + 6489 T62100-6089 Unified Wire Ethernet Controller + 648a T62100-608a Unified Wire Ethernet Controller ++ 6492 T62100-KR Unified Wire Ethernet Controller ++ 01de fff9 Gimlet T6 + 6501 T6225-CR Unified Wire Storage Controller + 6502 T6225-SO-CR Unified Wire Storage Controller + 6503 T6425-CR Unified Wire Storage Controller +@@ -18782,6 +18825,7 @@ + 6588 T62100-6088 Unified Wire Storage Controller + 6589 T62100-6089 Unified Wire Storage Controller + 658a T62100-608a Unified Wire Storage Controller ++ 6592 T62100-KR Unified Wire Storage Controller + 6601 T6225-CR Unified Wire Storage Controller + 6602 T6225-SO-CR Unified Wire Storage Controller + 6603 T6425-CR Unified Wire Storage Controller +@@ -18806,6 +18850,7 @@ + 6688 T62100-6088 Unified Wire Storage Controller + 6689 T62100-6089 Unified Wire Storage Controller + 668a T62100-608a Unified Wire Storage Controller ++ 6692 T62100-KR Unified Wire Storage Controller + 6801 T6225-CR Unified Wire Ethernet Controller [VF] + 6802 T6225-SO-CR Unified Wire Ethernet Controller [VF] + 6803 T6425-CR Unified Wire Ethernet Controller [VF] +@@ -23434,7 +23479,9 @@ + # nee Qumranet, Inc. + 1af4 Red Hat, Inc. + 1000 Virtio network device ++ 01de fffb Propolis Virtio network device + 1001 Virtio block device ++ 01de fffa Propolis Virtio block device + 1002 Virtio memory balloon + 1003 Virtio console + 1004 Virtio SCSI +@@ -24749,6 +24796,45 @@ + 1f2f 6115 KM660 U.2 3.2TB NVMe SSD + 1f2f 6116 KM560 U.2 3.84TB NVMe SSD + 1f2f 6118 KM560 U.2 7.68TB NVMe SSD ++1f3f 3SNIC Ltd ++ 2100 3SRAID SAS/SATA HBA ++ 1f3f 0120 HBA 32 Ports ++ 1f3f 0125 HBA 40 Ports ++ 1f3f 0180 HBA 16 Ports ++ 1f3f 0185 HBA 8 Ports ++ 2200 3SRAID RAID controller ++ 1f3f 0185 RAID Controller 16 Ports with 2G Cache ++ 1f3f 01a1 RAID Controller 40 Ports with 2G Cache ++ 1f3f 01a4 RAID Controller 16 Ports with 4G Cache ++ 1f3f 01a8 RAID Controller 32 Ports with 4G Cache ++ 1f3f 01ad RAID Controller 40 Ports with 4G Cache ++ 9001 Ethernet VF ++ 1f3f 1000 Ethernet VF ++ 9002 Ethernet VF Hyper-V ++ 1f3f 1000 Ethernet VF Hyper-V ++ 9003 Ethernet SDI VF ++ 1f3f 1000 Ethernet SDI VF ++ 9004 Ethernet SDI VF Hyper-V ++ 1f3f 1000 Ethernet SDI VF Hyper-V ++ 9008 3SFC VF ++ 1f3f 1000 3SFC VF ++ 9009 3SFC VF Hyper-V ++ 1f3f 1000 3SFC VF Hyper-V ++ 9010 3SFC FC Controller ++ 1f3f 0041 Dual Port 16GE FC to PCIe Gen4 x16 Adapter ++ 1f3f 0061 Dual Port 32GE FC to PCIe Gen4 x16 Adapter ++ 9020 Ethernet Network Adapter ++ 1f3f 0051 Dual Port 25GE Ethernet Network Adapter ++ 1f3f 0052 Quad Port 25GE Ethernet Network Adapter ++ 1f3f 00a1 Dual Port 100GE Ethernet Network Adapter ++ 9030 IPU ++ 1f3f 0051 Dual Port 25GE IPU ++ 9031 SDI5.0 ++ 1f3f 0051 Dual Port 25GE SDI5.0lite ++ 1f3f 00a1 Dual Port 100GE SDI5.0 ++ 9032 SDI5.1 ++ 1f3f 00a1 Dual Port 100GE SDI5.1 ++1faa Hexaflake (Shanghai) Information Technology Co., Ltd. + 1fab Unifabrix Ltd. + 0000 Nexus Alpha IVPU + # nee Tumsan Oy +@@ -25278,8 +25364,6 @@ + 5168 Animation Technologies Inc. + 0300 FlyDVB-S + 0301 FlyDVB-T +-51d8 Alder Lake-P Serial IO I2C Controller #2 +-51d9 Alder Lake-P Serial IO I2C Controller #3 + 5301 Alliance Semiconductor Corp. + 0001 ProMotion aT3D + 5333 S3 Graphics Ltd. +@@ -25498,11 +25582,11 @@ + 1800 CooVOX TDM BRI Module + 6766 Glenfly Tech Co., Ltd. + 3d00 Arise-GT-10C0 +- 3d02 Arise 1020 ++ 3d02 Arise1020 + 3d03 Arise-GT-1040 + 3d04 Arise1010 + 3d40 Arise-GT-10C0 High Definition Audio Controller +- 3d41 Arise 1020 High Definition Audio Controller ++ 3d41 Arise1020 High Definition Audio Controller + 6899 ZT Systems + # nee Qumranet + 6900 Red Hat, Inc. +@@ -27378,6 +27462,7 @@ + 1234 430MX - 82371MX Mobile PCI I/O IDE Xcelerator (MPIIX) + 1235 430MX - 82437MX Mob. System Ctrlr (MTSC) & 82438MX Data Path (MTDP) + 1237 440FX - 82441FX PMC [Natoma] ++ 01de fffe Propolis Virtual 440FX + 1af4 1100 Qemu virtual machine + 1239 82371FB PIIX IDE Interface + 123b 82380PB PCI to PCI Docking Bridge +@@ -32754,6 +32839,7 @@ + 6ffd Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent + 6ffe Xeon E7 v4/Xeon E5 v4/Xeon E3 v4/Xeon D Caching Agent + 7000 82371SB PIIX3 ISA [Natoma/Triton II] ++ 01de fffd Propolis Virtual PIIX3 ISA Controller + 1af4 1100 Qemu virtual machine + 7010 82371SB PIIX3 IDE [Natoma/Triton II] + 1af4 1100 Qemu virtual machine +@@ -32771,6 +32857,7 @@ + 15ad 1976 Virtual Machine Chipset + 1af4 1100 QEMU Virtual Machine + 7113 82371AB/EB/MB PIIX4 ACPI ++ 01de fffc Propolis Virtual PIIX4 PM Controller + 15ad 1976 Virtual Machine Chipset + 1af4 1100 Qemu virtual machine + 7120 82810 GMCH (Graphics Memory Controller Hub) +@@ -32845,6 +32932,9 @@ + 7aa4 Alder Lake-S PCH SPI Controller + 7aa7 Alder Lake-S PCH Shared SRAM + 7ab4 Alder Lake-S PCH PCI Express Root Port #13 ++ 7ab8 Alder Lake-S PCH PCI Express Root Port #1 ++ 7ab9 Alder Lake-S PCH PCI Express Root Port #2 ++ 7abc Alder Lake-S PCH PCI Express Root Port #5 + 7abd Alder Lake-S PCH PCI Express Root Port #6 + 7acc Alder Lake-S PCH I2C Controller #0 + 7ad0 Alder Lake-S HD Audio Controller +diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids +index 9342f7c331..7f41fd0b07 100644 +--- a/hwdb.d/usb.ids ++++ b/hwdb.d/usb.ids +@@ -9,8 +9,8 @@ + # The latest version can be obtained from + # http://www.linux-usb.org/usb.ids + # +-# Version: 2022.05.03 +-# Date: 2022-05-03 20:34:10 ++# Version: 2022.05.09 ++# Date: 2022-05-09 20:34:10 + # + + # Vendors, devices and interfaces. Please keep sorted. +@@ -21558,6 +21558,12 @@ + 061d PCTV Deluxe (NTSC) Device + 061e PCTV Deluxe (PAL) Device + 2304 1689 ++2309 TimeLink Technology Co., Ltd ++ 1001 Touch Device(hid) ++ 1005 Touch Device ++ 1006 Touch Device(2) ++ 1007 MulTouch Device(hid) ++ 1009 Touch Device(hid) + 230d Teracom + 0103 Huwaii 3g wireless modem + 2314 INQ Mobile diff --git a/SOURCES/0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch b/SOURCES/0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch new file mode 100644 index 0000000..0808a87 --- /dev/null +++ b/SOURCES/0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch @@ -0,0 +1,30 @@ +From a80d44db309d07425e1efe06722220876caf1f8d Mon Sep 17 00:00:00 2001 +From: Nikolai Grigoriev <2364632+ngrigoriev@users.noreply.github.com> +Date: Sat, 14 May 2022 17:39:02 -0400 +Subject: [PATCH] hwdb: add touchpad parameters for Lenovo T15g Gen1 (#23373) + +(cherry picked from commit 5a6bcbb00134e4f810bcefa0c6e1340c75e6981e) + +Related: #2087778 +--- + hwdb.d/60-evdev.hwdb | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hwdb.d/60-evdev.hwdb b/hwdb.d/60-evdev.hwdb +index 2d1751b478..da4eb0070a 100644 +--- a/hwdb.d/60-evdev.hwdb ++++ b/hwdb.d/60-evdev.hwdb +@@ -588,6 +588,13 @@ evdev:name:SynPS/2 Synaptics TouchPad:dmi:*:svnLENOVO:*pvrThinkPadP14sGen2a:* + EVDEV_ABS_35=::44 + EVDEV_ABS_36=::52 + ++# Lenovo ThinkPad T15g Gen1 ++evdev:name:SynPS/2 Synaptics TouchPad:dmi:*svnLENOVO:*pvrThinkPadT15gGen1** ++ EVDEV_ABS_00=::44 ++ EVDEV_ABS_01=::50 ++ EVDEV_ABS_35=::44 ++ EVDEV_ABS_36=::50 ++ + # Lenovo Legion Y9000X2020 + evdev:name:MSFT0001:02 04F3:304B Touchpad:dmi:*svnLENOVO:*pvrLenovoLegionY9000X2020:* + EVDEV_ABS_00=::31 diff --git a/SOURCES/0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch b/SOURCES/0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch new file mode 100644 index 0000000..ed48025 --- /dev/null +++ b/SOURCES/0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch @@ -0,0 +1,26 @@ +From a3a1bb14b60c215bd39c5ffde16ffe85fcafe109 Mon Sep 17 00:00:00 2001 +From: Martin +Date: Sun, 15 May 2022 00:51:59 +0200 +Subject: [PATCH] hwdb: Add accel orientation for the I15-TG + +Add accel orientation for the Cube iWork 10 I15-TG + +(cherry picked from commit c4c336e0cdf66a4c0922f2b77a7e6e3811287114) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index d883db22a1..3fb308f3f1 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -277,6 +277,7 @@ sensor:modalias:acpi:KIOX000A*:dmi:*:svnCube:pni18B:* + + # Cube iWork 10 Flagship + sensor:modalias:acpi:BOSC0200*:dmi:*:svnCube:pnI15-TC:* ++sensor:modalias:acpi:BOSC0200*:dmi:*:svnALLDOCUBE:pnI15-TG:* + ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 + + # Cube iWork 11 Stylus diff --git a/SOURCES/0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch b/SOURCES/0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch new file mode 100644 index 0000000..2dfd67b --- /dev/null +++ b/SOURCES/0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch @@ -0,0 +1,32 @@ +From 8373d5f5a1c9604a1a87cdc04668000720fe3155 Mon Sep 17 00:00:00 2001 +From: Nikolai Kostrigin +Date: Fri, 13 May 2022 17:13:00 +0300 +Subject: [PATCH] hwdb: fix accelerometer mount matrix for Aquarius NS483 + +Signed-off-by: Nikolai Kostrigin +(cherry picked from commit e4bb1a07ef834f4e4eabe1fa21e838586e7dd2a3) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 3fb308f3f1..104fe05187 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -106,6 +106,14 @@ sensor:modalias:acpi:BOSC0200*:dmi:*svn*Acer*:*pn*Spin*SP111-33:* + sensor:modalias:acpi:BOSC0200*:dmi:*svnAcer*:*pnSpinSP111-34:* + ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1 + ++######################################### ++# Aquarius ++######################################### ++ ++# Aquarius NS483 ++sensor:modalias:acpi:MXC6655*:dmi:*:svnAquarius*:pnNS483:* ++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1 ++ + ######################################### + # Archos + ######################################### diff --git a/SOURCES/0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch b/SOURCES/0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch new file mode 100644 index 0000000..19b1384 --- /dev/null +++ b/SOURCES/0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch @@ -0,0 +1,37 @@ +From 20537f77e4b66c5e657174a4f29dfaf883b8929c Mon Sep 17 00:00:00 2001 +From: Pablo Ceballos +Date: Fri, 13 May 2022 23:33:07 +0000 +Subject: [PATCH] hwdb: Add Google Hangouts Meet speakermic + +This device implements the phone mute HID usage as a toggle switch, +where 1 indicates muted, and 0 indicates unmuted. However, for a key +event 1 indicates that the key has been pressed and 0 indicates it has +been released. This mismatch causes issues, so prevent key events from +being generated for this HID usage. + +(cherry picked from commit 2d251543211dae43bcf6f01ed32a3dbe8fef1ea7) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index b852f33608..2e4f6f4293 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -511,6 +511,14 @@ evdev:input:b0003v0458p0708* + KEYBOARD_KEY_0900fd=scale + KEYBOARD_KEY_0900fc=screenlock + ++########################################################### ++# Google ++########################################################### ++ ++# Google Hangouts Meet speakermic ++evdev:input:b0003v18D1p8001* ++ KEYBOARD_KEY_b002f=reserved # Disable micmute key ++ + ########################################################### + # Hewlett Packard + ########################################################### diff --git a/SOURCES/0322-hwdb-update-via-ninja-C-build-update-hwdb.patch b/SOURCES/0322-hwdb-update-via-ninja-C-build-update-hwdb.patch new file mode 100644 index 0000000..7266877 --- /dev/null +++ b/SOURCES/0322-hwdb-update-via-ninja-C-build-update-hwdb.patch @@ -0,0 +1,7079 @@ +From a3cfd0001a0854d247ac30c111e41058276abd52 Mon Sep 17 00:00:00 2001 +From: Luca Boccassi +Date: Sat, 21 May 2022 12:44:36 +0100 +Subject: [PATCH] hwdb: update via ninja -C build update-hwdb + +(cherry picked from commit 5ea8bcd93d1df1caedf240f41e243584d4cf8258) + +Related: #2087778 +--- + hwdb.d/20-OUI.hwdb | 199 +- + hwdb.d/20-acpi-vendor.hwdb.patch | 4 +- + hwdb.d/20-pci-vendor-model.hwdb | 108 +- + hwdb.d/20-usb-vendor-model.hwdb | 4 +- + hwdb.d/ma-large.txt | 3648 ++++++++++++++++-------------- + hwdb.d/ma-medium.txt | 159 +- + hwdb.d/ma-small.txt | 95 +- + hwdb.d/pci.ids | 58 +- + hwdb.d/usb.ids | 8 +- + 9 files changed, 2485 insertions(+), 1798 deletions(-) + +diff --git a/hwdb.d/20-OUI.hwdb b/hwdb.d/20-OUI.hwdb +index d9d17f4b2c..c46086633c 100644 +--- a/hwdb.d/20-OUI.hwdb ++++ b/hwdb.d/20-OUI.hwdb +@@ -29592,7 +29592,7 @@ OUI:0025DE* + ID_OUI_FROM_DATABASE=Probits Co., LTD. + + OUI:0025DF* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=Taser International Inc. + + OUI:0025E0* + ID_OUI_FROM_DATABASE=CeedTec Sdn Bhd +@@ -34914,7 +34914,7 @@ OUI:0081F9* + ID_OUI_FROM_DATABASE=Texas Instruments + + OUI:0084ED* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=LEXMARK INTERNATIONAL, INC. + + OUI:00869C* + ID_OUI_FROM_DATABASE=Palo Alto Networks +@@ -41750,6 +41750,9 @@ OUI:088F2C* + OUI:0890BA* + ID_OUI_FROM_DATABASE=Danlaw Inc + ++OUI:089115* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:089204* + ID_OUI_FROM_DATABASE=Dell Inc. + +@@ -41940,7 +41943,7 @@ OUI:08CA45* + ID_OUI_FROM_DATABASE=Toyou Feiji Electronics Co., Ltd. + + OUI:08CBE5* +- ID_OUI_FROM_DATABASE=R3 - Reliable Realtime Radio Communications GmbH ++ ID_OUI_FROM_DATABASE=R3 Solutions GmbH + + OUI:08CC27* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company +@@ -44568,7 +44571,7 @@ OUI:141FBAE* + ID_OUI_FROM_DATABASE=POS Systema LLC + + OUI:141FBAF* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=IEEE Registration Authority + + OUI:14205E* + ID_OUI_FROM_DATABASE=Apple, Inc. +@@ -44615,6 +44618,9 @@ OUI:142D27* + OUI:142D4D* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:142D79* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:142D8B* + ID_OUI_FROM_DATABASE=Incipio Technologies, Inc + +@@ -51833,6 +51839,48 @@ OUI:2C6798* + OUI:2C67FB* + ID_OUI_FROM_DATABASE=ShenZhen Zhengjili Electronics Co., LTD + ++OUI:2C691D0* ++ ID_OUI_FROM_DATABASE=Hunan Xiangjiang Kunpeng Information Technology Co., Ltd. ++ ++OUI:2C691D1* ++ ID_OUI_FROM_DATABASE=KATEK SE ++ ++OUI:2C691D2* ++ ID_OUI_FROM_DATABASE=Abode Systems Inc ++ ++OUI:2C691D3* ++ ID_OUI_FROM_DATABASE=Sunsa, Inc ++ ++OUI:2C691D4* ++ ID_OUI_FROM_DATABASE=SPEEDTECH CORP. ++ ++OUI:2C691D5* ++ ID_OUI_FROM_DATABASE=LG Electronics Inc. ++ ++OUI:2C691D6* ++ ID_OUI_FROM_DATABASE=Carnegie Robotics ++ ++OUI:2C691D7* ++ ID_OUI_FROM_DATABASE=Shenzhen Gigalight Technology Co., Ltd ++ ++OUI:2C691D8* ++ ID_OUI_FROM_DATABASE=IBM ++ ++OUI:2C691D9* ++ ID_OUI_FROM_DATABASE=SHENZHEN EX-LINK TECHNOLOGY CO.,LTD ++ ++OUI:2C691DA* ++ ID_OUI_FROM_DATABASE=Panasonic Appliances Marketing Asia Pacific (A division of Panasonic Malaysia Sdn Bhd ++ ++OUI:2C691DB* ++ ID_OUI_FROM_DATABASE=Shenzhen Daren HI-Tech Electronics Co., Ltd. ++ ++OUI:2C691DC* ++ ID_OUI_FROM_DATABASE=Aparian, Inc. ++ ++OUI:2C691DD* ++ ID_OUI_FROM_DATABASE=Ascentac Inc. ++ + OUI:2C69BA* + ID_OUI_FROM_DATABASE=RF Controls, LLC + +@@ -52623,7 +52671,7 @@ OUI:3024A9* + ID_OUI_FROM_DATABASE=HP Inc. + + OUI:3027CF* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=Canopy Growth Corp + + OUI:302952* + ID_OUI_FROM_DATABASE=Hillstone Networks Inc +@@ -52694,6 +52742,9 @@ OUI:303ABA* + OUI:303D08* + ID_OUI_FROM_DATABASE=GLINTT TES S.A. + ++OUI:303D510* ++ ID_OUI_FROM_DATABASE=Fink Telecom Services GmbH ++ + OUI:303D511* + ID_OUI_FROM_DATABASE=SHENZHEN WLINK TECHNOLOGY CO., LTD. + +@@ -52709,6 +52760,12 @@ OUI:303D514* + OUI:303D515* + ID_OUI_FROM_DATABASE=Media Hub Digital Smart Home Pty Ltd. + ++OUI:303D516* ++ ID_OUI_FROM_DATABASE=Amber-Link Network Technology Co.,Ltd. ++ ++OUI:303D517* ++ ID_OUI_FROM_DATABASE=Destiny Automate Limited ++ + OUI:303D518* + ID_OUI_FROM_DATABASE=The Heil Co dba AWTI 3rd Eye Cam + +@@ -52721,9 +52778,15 @@ OUI:303D51A* + OUI:303D51B* + ID_OUI_FROM_DATABASE=Labman Automation + ++OUI:303D51C* ++ ID_OUI_FROM_DATABASE=TalkGo, Inc. ++ + OUI:303D51D* + ID_OUI_FROM_DATABASE=XOR UK Corporation Limited + ++OUI:303D51E* ++ ID_OUI_FROM_DATABASE=Percent.com ++ + OUI:303EA7* + ID_OUI_FROM_DATABASE=Intel Corporate + +@@ -53796,7 +53859,7 @@ OUI:343794* + ID_OUI_FROM_DATABASE=Hamee Corp. + + OUI:3438AF* +- ID_OUI_FROM_DATABASE=Inlab Software GmbH ++ ID_OUI_FROM_DATABASE=Inlab Networks GmbH + + OUI:3438B7* + ID_OUI_FROM_DATABASE=HUMAX Co., Ltd. +@@ -55352,6 +55415,9 @@ OUI:38A851* + OUI:38A86B* + ID_OUI_FROM_DATABASE=Orga BV + ++OUI:38A89B* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:38A8CD0* + ID_OUI_FROM_DATABASE=ACiiST Smart Networks Ltd. + +@@ -57518,6 +57584,9 @@ OUI:407496* + OUI:4074E0* + ID_OUI_FROM_DATABASE=Intel Corporate + ++OUI:4075C3* ++ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc. ++ + OUI:4076A9* + ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd. + +@@ -58223,6 +58292,9 @@ OUI:441102* + OUI:4411C2* + ID_OUI_FROM_DATABASE=Telegartner Karl Gartner GmbH + ++OUI:441244* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:441319* + ID_OUI_FROM_DATABASE=WKK TECHNOLOGY LTD. + +@@ -59642,6 +59714,9 @@ OUI:48706F* + OUI:487119* + ID_OUI_FROM_DATABASE=SGB GROUP LTD. + ++OUI:487310* ++ ID_OUI_FROM_DATABASE=Juniper Networks ++ + OUI:487397* + ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd + +@@ -66719,6 +66794,9 @@ OUI:643409* + OUI:64351C* + ID_OUI_FROM_DATABASE=e-CON SYSTEMS INDIA PVT LTD + ++OUI:6437A4* ++ ID_OUI_FROM_DATABASE=TOKYOSHUHA CO.,LTD. ++ + OUI:643AB1* + ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co.,LTD + +@@ -69728,6 +69806,9 @@ OUI:7040FF* + OUI:7041B7* + ID_OUI_FROM_DATABASE=Edwards Lifesciences LLC + ++OUI:7042D3* ++ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD ++ + OUI:70441C* + ID_OUI_FROM_DATABASE=SHENZHEN KAIFA TECHNOLOGY CO.,LTD. + +@@ -71169,7 +71250,7 @@ OUI:70B3D5119* + ID_OUI_FROM_DATABASE=Private + + OUI:70B3D511A* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=Mahindra Electric Mobility Limited + + OUI:70B3D511B* + ID_OUI_FROM_DATABASE=HoseoTelnet Inc... +@@ -83723,6 +83804,9 @@ OUI:74D21D* + OUI:74D285* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:74D423* ++ ID_OUI_FROM_DATABASE=Amazon Technologies Inc. ++ + OUI:74D435* + ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD. + +@@ -86411,6 +86495,9 @@ OUI:7CDAC3* + OUI:7CDB98* + ID_OUI_FROM_DATABASE=ASKEY COMPUTER CORP + ++OUI:7CDCCC* ++ ID_OUI_FROM_DATABASE=Beijing Yixin Techology Co.,Ltd ++ + OUI:7CDD11* + ID_OUI_FROM_DATABASE=Chongqing MAS SCI&TECH.Co.,Ltd + +@@ -88649,6 +88736,9 @@ OUI:84F1D0* + OUI:84F3EB* + ID_OUI_FROM_DATABASE=Espressif Inc. + ++OUI:84F44C* ++ ID_OUI_FROM_DATABASE=International Integrated Systems., Inc. ++ + OUI:84F493* + ID_OUI_FROM_DATABASE=OMS spol. s.r.o. + +@@ -89037,7 +89127,7 @@ OUI:885D90E* + ID_OUI_FROM_DATABASE=Unitac Technology Limited + + OUI:885D90F* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=IEEE Registration Authority + + OUI:885DFB* + ID_OUI_FROM_DATABASE=zte corporation +@@ -89436,7 +89526,7 @@ OUI:88B362* + ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd. + + OUI:88B436* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=FUJIFILM Corporation + + OUI:88B4A6* + ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company +@@ -90029,6 +90119,9 @@ OUI:8C1F6408B* + OUI:8C1F6408F* + ID_OUI_FROM_DATABASE=AixControl GmbH + ++OUI:8C1F64092* ++ ID_OUI_FROM_DATABASE=Gogo BA ++ + OUI:8C1F64098* + ID_OUI_FROM_DATABASE=Agvolution GmbH + +@@ -90164,6 +90257,9 @@ OUI:8C1F641B6* + OUI:8C1F641BB* + ID_OUI_FROM_DATABASE=Renwei Electronics Technology (Shenzhen) Co.,LTD. + ++OUI:8C1F641BD* ++ ID_OUI_FROM_DATABASE=DORLET SAU ++ + OUI:8C1F641BF* + ID_OUI_FROM_DATABASE=Ossia Inc + +@@ -90281,6 +90377,9 @@ OUI:8C1F642F5* + OUI:8C1F642FD* + ID_OUI_FROM_DATABASE=Enestone Corporation + ++OUI:8C1F64300* ++ ID_OUI_FROM_DATABASE=Abbott Diagnostics Technologies AS ++ + OUI:8C1F64301* + ID_OUI_FROM_DATABASE=Agar Corporation Inc. + +@@ -90551,6 +90650,9 @@ OUI:8C1F64544* + OUI:8C1F64549* + ID_OUI_FROM_DATABASE=Brad Technology + ++OUI:8C1F6454A* ++ ID_OUI_FROM_DATABASE=Belden India Private Limited ++ + OUI:8C1F6454C* + ID_OUI_FROM_DATABASE=Gemini Electronics B.V. + +@@ -90584,6 +90686,9 @@ OUI:8C1F6457B* + OUI:8C1F64581* + ID_OUI_FROM_DATABASE=SpectraDynamics, Inc. + ++OUI:8C1F6458C* ++ ID_OUI_FROM_DATABASE=Ear Micro LLC ++ + OUI:8C1F6459F* + ID_OUI_FROM_DATABASE=Delta Computers LLC. + +@@ -90671,6 +90776,9 @@ OUI:8C1F6465F* + OUI:8C1F64660* + ID_OUI_FROM_DATABASE=LLC NTPC + ++OUI:8C1F64662* ++ ID_OUI_FROM_DATABASE=Suzhou Leamore Optronics Co., Ltd. ++ + OUI:8C1F64663* + ID_OUI_FROM_DATABASE=mal-tech Technological Solutions Ltd/CRISP + +@@ -90719,6 +90827,9 @@ OUI:8C1F646B5* + OUI:8C1F646B9* + ID_OUI_FROM_DATABASE=GS Industrie-Elektronik GmbH + ++OUI:8C1F646BB* ++ ID_OUI_FROM_DATABASE=Season Electronics Ltd ++ + OUI:8C1F646C6* + ID_OUI_FROM_DATABASE=FIT + +@@ -90989,6 +91100,9 @@ OUI:8C1F648D1* + OUI:8C1F648D4* + ID_OUI_FROM_DATABASE=Recab Sweden AB + ++OUI:8C1F648D5* ++ ID_OUI_FROM_DATABASE=Agramkow A/S ++ + OUI:8C1F648D9* + ID_OUI_FROM_DATABASE=Pietro Fiorentini Spa + +@@ -91079,6 +91193,9 @@ OUI:8C1F6497C* + OUI:8C1F64984* + ID_OUI_FROM_DATABASE=Abacus Peripherals Pvt Ltd + ++OUI:8C1F6498F* ++ ID_OUI_FROM_DATABASE=Breas Medical AB ++ + OUI:8C1F64991* + ID_OUI_FROM_DATABASE=DB Systel GmbH + +@@ -91508,6 +91625,9 @@ OUI:8C1F64D54* + OUI:8C1F64D56* + ID_OUI_FROM_DATABASE=Wisdom Audio + ++OUI:8C1F64D5E* ++ ID_OUI_FROM_DATABASE=Integer.pl S.A. ++ + OUI:8C1F64D69* + ID_OUI_FROM_DATABASE=ADiCo Corporation + +@@ -92039,6 +92159,9 @@ OUI:8C5109D* + OUI:8C5109E* + ID_OUI_FROM_DATABASE=IROOTELLUCKY Corp. + ++OUI:8C5219* ++ ID_OUI_FROM_DATABASE=SHARP Corporation ++ + OUI:8C53C3* + ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd + +@@ -93638,6 +93761,9 @@ OUI:90C7D8* + OUI:90C99B* + ID_OUI_FROM_DATABASE=Tesorion Nederland B.V. + ++OUI:90CAFA* ++ ID_OUI_FROM_DATABASE=Google, Inc. ++ + OUI:90CC24* + ID_OUI_FROM_DATABASE=Synaptics, Inc + +@@ -95016,7 +95142,7 @@ OUI:9802D8E* + ID_OUI_FROM_DATABASE=Private + + OUI:9802D8F* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=IEEE Registration Authority + + OUI:98039B* + ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc. +@@ -97709,6 +97835,9 @@ OUI:A0445C* + OUI:A04466* + ID_OUI_FROM_DATABASE=Intellics + ++OUI:A044F3* ++ ID_OUI_FROM_DATABASE=RafaelMicro ++ + OUI:A047D7* + ID_OUI_FROM_DATABASE=Best IT World (India) Pvt Ltd + +@@ -99251,6 +99380,9 @@ OUI:A49BF5* + OUI:A49D49* + ID_OUI_FROM_DATABASE=Ketra, Inc. + ++OUI:A49E69* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:A49EDB* + ID_OUI_FROM_DATABASE=AutoCrib, Inc. + +@@ -102977,6 +103109,9 @@ OUI:B439D6* + OUI:B43A28* + ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd + ++OUI:B43A31* ++ ID_OUI_FROM_DATABASE=Silicon Laboratories ++ + OUI:B43AE2* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -104523,7 +104658,7 @@ OUI:B8D812E* + ID_OUI_FROM_DATABASE=ZheJiang FangTai Electirc Co., Ltd + + OUI:B8D812F* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=IEEE Registration Authority + + OUI:B8D94D* + ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS +@@ -105537,7 +105672,7 @@ OUI:BCD713* + ID_OUI_FROM_DATABASE=Owl Labs + + OUI:BCD767* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=BAE Systems Apllied Intelligence + + OUI:BCD7A5* + ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company +@@ -106524,7 +106659,7 @@ OUI:C0D391A* + ID_OUI_FROM_DATABASE=Alpha Audiotronics, Inc. + + OUI:C0D391B* +- ID_OUI_FROM_DATABASE=Private ++ ID_OUI_FROM_DATABASE=Celliber Technologies Pvt Limited + + OUI:C0D391C* + ID_OUI_FROM_DATABASE=Zhinengguo technology company limited +@@ -107723,6 +107858,9 @@ OUI:C4EEF5* + OUI:C4EF70* + ID_OUI_FROM_DATABASE=Home Skinovations + ++OUI:C4EFDA* ++ ID_OUI_FROM_DATABASE=Honeywell ++ + OUI:C4F081* + ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD + +@@ -109346,6 +109484,9 @@ OUI:CC5D57* + OUI:CC5D78* + ID_OUI_FROM_DATABASE=JTD Consulting + ++OUI:CC5EF8* ++ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ + OUI:CC5FBF* + ID_OUI_FROM_DATABASE=Topwise 3G Communication Co., Ltd. + +@@ -111330,7 +111471,7 @@ OUI:D42C46* + ID_OUI_FROM_DATABASE=BUFFALO.INC + + OUI:D42DC5* +- ID_OUI_FROM_DATABASE=Panasonic i-PRO Sensing Solutions Co., Ltd. ++ ID_OUI_FROM_DATABASE=i-PRO Co., Ltd. + + OUI:D42F23* + ID_OUI_FROM_DATABASE=Akenori PTE Ltd +@@ -112481,6 +112622,9 @@ OUI:D8539A* + OUI:D8543A* + ID_OUI_FROM_DATABASE=Texas Instruments + ++OUI:D85482* ++ ID_OUI_FROM_DATABASE=Oxit, LLC ++ + OUI:D854A2* + ID_OUI_FROM_DATABASE=Extreme Networks, Inc. + +@@ -113123,6 +113267,9 @@ OUI:D8F3BC* + OUI:D8F3DB* + ID_OUI_FROM_DATABASE=Post CH AG + ++OUI:D8F507* ++ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD ++ + OUI:D8F710* + ID_OUI_FROM_DATABASE=Libre Wireless Technologies Inc. + +@@ -113891,6 +114038,9 @@ OUI:DCB54F* + OUI:DCB72E* + ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd + ++OUI:DCB7AC* ++ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company ++ + OUI:DCB7FC* + ID_OUI_FROM_DATABASE=Alps Electric (Ireland) Ltd + +@@ -114101,6 +114251,9 @@ OUI:DCE55B* + OUI:DCE578* + ID_OUI_FROM_DATABASE=Experimental Factory of Scientific Engineering and Special Design Department + ++OUI:DCE650* ++ ID_OUI_FROM_DATABASE=Extreme Networks, Inc. ++ + OUI:DCE71C* + ID_OUI_FROM_DATABASE=AUG Elektronik GmbH + +@@ -114464,6 +114617,9 @@ OUI:E046E5* + OUI:E046EE* + ID_OUI_FROM_DATABASE=NETGEAR + ++OUI:E04735* ++ ID_OUI_FROM_DATABASE=Ericsson AB ++ + OUI:E048AF* + ID_OUI_FROM_DATABASE=Premietech Limited + +@@ -114938,6 +115094,9 @@ OUI:E0B9BA* + OUI:E0B9E5* + ID_OUI_FROM_DATABASE=Technicolor Delivery Technologies Belgium NV + ++OUI:E0BAAD* ++ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd. ++ + OUI:E0BAB4* + ID_OUI_FROM_DATABASE=Arrcus, Inc + +@@ -116705,6 +116864,9 @@ OUI:E884C6* + OUI:E8854B* + ID_OUI_FROM_DATABASE=Apple, Inc. + ++OUI:E886CF* ++ ID_OUI_FROM_DATABASE=Nokia ++ + OUI:E887A3* + ID_OUI_FROM_DATABASE=Loxley Public Company Limited + +@@ -117299,6 +117461,9 @@ OUI:EC1D7F* + OUI:EC1D8B* + ID_OUI_FROM_DATABASE=Cisco Systems, Inc + ++OUI:EC1D9E* ++ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co.,Ltd. ++ + OUI:EC1F72* + ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND) + +@@ -119309,6 +119474,9 @@ OUI:F417B8* + OUI:F419E2* + ID_OUI_FROM_DATABASE=Volterra + ++OUI:F41AB0* ++ ID_OUI_FROM_DATABASE=Shenzhen Xingguodu Technology Co., Ltd. ++ + OUI:F41BA1* + ID_OUI_FROM_DATABASE=Apple, Inc. + +@@ -119369,6 +119537,9 @@ OUI:F42A7D* + OUI:F42B48* + ID_OUI_FROM_DATABASE=Ubiqam + ++OUI:F42B7D* ++ ID_OUI_FROM_DATABASE=Chipsguide technology CO.,LTD. ++ + OUI:F42C56* + ID_OUI_FROM_DATABASE=SENOR TECH CO LTD + +diff --git a/hwdb.d/20-acpi-vendor.hwdb.patch b/hwdb.d/20-acpi-vendor.hwdb.patch +index 35f3430268..f884cd8240 100644 +--- a/hwdb.d/20-acpi-vendor.hwdb.patch ++++ b/hwdb.d/20-acpi-vendor.hwdb.patch +@@ -1,5 +1,5 @@ +---- 20-acpi-vendor.hwdb.base 2022-05-13 17:14:22.098059674 +0100 +-+++ 20-acpi-vendor.hwdb 2022-05-13 17:14:22.102059756 +0100 ++--- 20-acpi-vendor.hwdb.base 2022-05-21 12:43:45.053612968 +0100 +++++ 20-acpi-vendor.hwdb 2022-05-21 12:43:45.057613062 +0100 + @@ -3,6 +3,8 @@ + # Data imported from: + # https://uefi.org/uefi-pnp-export +diff --git a/hwdb.d/20-pci-vendor-model.hwdb b/hwdb.d/20-pci-vendor-model.hwdb +index 926247eefc..1344fab356 100644 +--- a/hwdb.d/20-pci-vendor-model.hwdb ++++ b/hwdb.d/20-pci-vendor-model.hwdb +@@ -2967,7 +2967,7 @@ pci:v00001002d000013E9* + ID_MODEL_FROM_DATABASE=Ariel + + pci:v00001002d000013FE* +- ID_MODEL_FROM_DATABASE=Cyan Skillfish ++ ID_MODEL_FROM_DATABASE=Cyan Skillfish [BC-250] + + pci:v00001002d00001478* + ID_MODEL_FROM_DATABASE=Navi 10 XL Upstream Port of PCI Express Switch +@@ -2975,6 +2975,9 @@ pci:v00001002d00001478* + pci:v00001002d00001479* + ID_MODEL_FROM_DATABASE=Navi 10 XL Downstream Port of PCI Express Switch + ++pci:v00001002d00001506* ++ ID_MODEL_FROM_DATABASE=Mendocino ++ + pci:v00001002d0000154C* + ID_MODEL_FROM_DATABASE=Kryptos [Radeon RX 350] + +@@ -2993,6 +2996,9 @@ pci:v00001002d00001552* + pci:v00001002d00001561* + ID_MODEL_FROM_DATABASE=Anubis + ++pci:v00001002d000015BF* ++ ID_MODEL_FROM_DATABASE=Phoenix ++ + pci:v00001002d000015D8* + ID_MODEL_FROM_DATABASE=Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] + +@@ -3077,6 +3083,9 @@ pci:v00001002d0000164C* + pci:v00001002d0000164D* + ID_MODEL_FROM_DATABASE=Rembrandt + ++pci:v00001002d0000164F* ++ ID_MODEL_FROM_DATABASE=Phoenix ++ + pci:v00001002d00001681* + ID_MODEL_FROM_DATABASE=Rembrandt [Radeon 680M] + +@@ -11006,6 +11015,9 @@ pci:v00001002d00007312* + pci:v00001002d00007314* + ID_MODEL_FROM_DATABASE=Navi 10 USB + ++pci:v00001002d0000731E* ++ ID_MODEL_FROM_DATABASE=TDC-150 ++ + pci:v00001002d0000731F* + ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] + +@@ -11040,7 +11052,7 @@ pci:v00001002d0000734F* + ID_MODEL_FROM_DATABASE=Navi 14 [Radeon Pro W5300M] + + pci:v00001002d00007360* +- ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M / V520] ++ ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M/V520/BC-160] + + pci:v00001002d00007362* + ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro V520] +@@ -11054,6 +11066,9 @@ pci:v00001002d0000738C* + pci:v00001002d0000738E* + ID_MODEL_FROM_DATABASE=Arcturus GL-XL [Instinct MI100] + ++pci:v00001002d000073A1* ++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon Pro V620] ++ + pci:v00001002d000073A2* + ID_MODEL_FROM_DATABASE=Navi 21 Pro-XTA [Radeon Pro W6900X] + +@@ -11069,6 +11084,9 @@ pci:v00001002d000073A5* + pci:v00001002d000073AB* + ID_MODEL_FROM_DATABASE=Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo] + ++pci:v00001002d000073AE* ++ ID_MODEL_FROM_DATABASE=Navi 21 [Radeon Pro V620 MxGPU] ++ + pci:v00001002d000073AF* + ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6900 XT] + +@@ -11096,6 +11114,9 @@ pci:v00001002d000073C3* + pci:v00001002d000073C4* + ID_MODEL_FROM_DATABASE=Navi 22 USB + ++pci:v00001002d000073CE* ++ ID_MODEL_FROM_DATABASE=Navi22-XL SRIOV MxGPU ++ + pci:v00001002d000073DF* + ID_MODEL_FROM_DATABASE=Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M] + +@@ -11135,6 +11156,12 @@ pci:v00001002d00007421* + pci:v00001002d00007422* + ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6400] + ++pci:v00001002d00007423* ++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon PRO W6300/W6300M] ++ ++pci:v00001002d00007424* ++ ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6300] ++ + pci:v00001002d0000743F* + ID_MODEL_FROM_DATABASE=Navi 24 [Radeon RX 6400 / 6500 XT] + +@@ -14255,6 +14282,9 @@ pci:v00001022d00001482* + pci:v00001022d00001483* + ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge + ++pci:v00001022d00001483sv000001DEsd0000FFF9* ++ ID_MODEL_FROM_DATABASE=Starship/Matisse GPP Bridge (Gimlet Baseboard) ++ + pci:v00001022d00001484* + ID_MODEL_FROM_DATABASE=Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B] + +@@ -16211,6 +16241,9 @@ pci:v00001028d00000016sv00001028sd00001F24* + pci:v00001028d00000073* + ID_MODEL_FROM_DATABASE=NV-RAM Adapter + ++pci:v00001028d00001028* ++ ID_MODEL_FROM_DATABASE=PCIe Bridge riser ++ + pci:v00001029* + ID_VENDOR_FROM_DATABASE=Siemens Nixdorf IS + +@@ -38525,9 +38558,24 @@ pci:v000010EEd00003FC5* + pci:v000010EEd00003FC6* + ID_MODEL_FROM_DATABASE=RME Hammerfall DSP MADI + ++pci:v000010EEd00005000* ++ ID_MODEL_FROM_DATABASE=Alveo U200 XDMA Platform ++ ++pci:v000010EEd00005004* ++ ID_MODEL_FROM_DATABASE=Alveo U250 XDMA Platform ++ + pci:v000010EEd00005005* + ID_MODEL_FROM_DATABASE=Alveo U250 + ++pci:v000010EEd0000500C* ++ ID_MODEL_FROM_DATABASE=Alveo U280 XDMA Platform ++ ++pci:v000010EEd00005020* ++ ID_MODEL_FROM_DATABASE=Alveo U50 XMDA Platform ++ ++pci:v000010EEd0000505C* ++ ID_MODEL_FROM_DATABASE=Alveo U55C ++ + pci:v000010EEd00007038* + ID_MODEL_FROM_DATABASE=FPGA Card XC7VX690T + +@@ -38546,6 +38594,18 @@ pci:v000010EEd00008380* + pci:v000010EEd00008381* + ID_MODEL_FROM_DATABASE=Ellips Santos Frame Grabber + ++pci:v000010EEd0000D000* ++ ID_MODEL_FROM_DATABASE=Alveo U200 Golden Image ++ ++pci:v000010EEd0000D004* ++ ID_MODEL_FROM_DATABASE=Alveo U250 Golden Image ++ ++pci:v000010EEd0000D00C* ++ ID_MODEL_FROM_DATABASE=Alveo U280 Golden Image ++ ++pci:v000010EEd0000D020* ++ ID_MODEL_FROM_DATABASE=Alveo U50 Golden Image ++ + pci:v000010EEd0000D154* + ID_MODEL_FROM_DATABASE=Copley Controls CAN card (PCI-CAN-02) + +@@ -55572,7 +55632,7 @@ pci:v00001425d00006092* + ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller + + pci:v00001425d00006092sv000001DEsd0000FFF9* +- ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6) ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet Baseboard) + + pci:v00001425d00006401* + ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Ethernet Controller +@@ -55650,7 +55710,7 @@ pci:v00001425d00006492* + ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller + + pci:v00001425d00006492sv000001DEsd0000FFF9* +- ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet T6) ++ ID_MODEL_FROM_DATABASE=T62100-KR Unified Wire Ethernet Controller (Gimlet Baseboard) + + pci:v00001425d00006501* + ID_MODEL_FROM_DATABASE=T6225-CR Unified Wire Storage Controller +@@ -68978,6 +69038,9 @@ pci:v00001ADEd00003038sv00004254sd00000552* + pci:v00001AE0* + ID_VENDOR_FROM_DATABASE=Google, Inc. + ++pci:v00001AE0d0000001F* ++ ID_MODEL_FROM_DATABASE=NVMe device ++ + pci:v00001AE0d00000042* + ID_MODEL_FROM_DATABASE=Compute Engine Virtual Ethernet [gVNIC] + +@@ -69563,6 +69626,9 @@ pci:v00001B4Bd00002241sv00001028sd00002151* + pci:v00001B4Bd00002241sv00001028sd00002196* + ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ROR-N100) + ++pci:v00001B4Bd00002241sv00001B4Bsd00002241* ++ ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (Santa Cruz NVMe Host Adapter) ++ + pci:v00001B4Bd00002241sv00001D49sd00000306* + ID_MODEL_FROM_DATABASE=88NR2241 Non-Volatile memory controller (ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit) + +@@ -71486,6 +71552,9 @@ pci:v00001DA3d00001000* + pci:v00001DA3d00001010* + ID_MODEL_FROM_DATABASE=HL-2000 AI Training Accelerator [Gaudi secured] + ++pci:v00001DA8* ++ ID_VENDOR_FROM_DATABASE=Corigine, Inc. ++ + pci:v00001DAD* + ID_VENDOR_FROM_DATABASE=Fungible + +@@ -72932,6 +73001,9 @@ pci:v00001F3Fd00009032* + pci:v00001F3Fd00009032sv00001F3Fsd000000A1* + ID_MODEL_FROM_DATABASE=SDI5.1 (Dual Port 100GE SDI5.1) + ++pci:v00001F40* ++ ID_VENDOR_FROM_DATABASE=Netac Technology Co.,Ltd ++ + pci:v00001FAA* + ID_VENDOR_FROM_DATABASE=Hexaflake (Shanghai) Information Technology Co., Ltd. + +@@ -82070,6 +82142,9 @@ pci:v00008086d000015FFsv00008086sd0000000B* + pci:v00008086d000015FFsv00008086sd0000000C* + ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L for OCP 3.0) + ++pci:v00008086d000015FFsv00008086sd0000000D* ++ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet 10G 2P X710-T2L-t OCP) ++ + pci:v00008086d000015FFsv00008086sd0000000F* + ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L for OCP 3.0) + +@@ -92505,10 +92580,28 @@ pci:v00008086d000031A8sv00001849sd000031A8* + ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor USB 3.0 xHCI Controller + + pci:v00008086d000031AC* +- ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 0 + + pci:v00008086d000031AE* +- ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO I2C Host Controller ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 1 ++ ++pci:v00008086d000031B0* ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 2 ++ ++pci:v00008086d000031B2* ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 3 ++ ++pci:v00008086d000031B4* ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 4 ++ ++pci:v00008086d000031B6* ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 5 ++ ++pci:v00008086d000031B8* ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 6 ++ ++pci:v00008086d000031BA* ++ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor I2C 7 + + pci:v00008086d000031BC* + ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO UART Host Controller +@@ -96944,6 +97037,9 @@ pci:v00008086d00008818* + pci:v00008086d00008819* + ID_MODEL_FROM_DATABASE=Platform Controller Hub EG20T IEEE 1588 Hardware Assist + ++pci:v00008086d00008A03* ++ ID_MODEL_FROM_DATABASE=Processor Power and Thermal Controller ++ + pci:v00008086d00008A0D* + ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #1 + +diff --git a/hwdb.d/20-usb-vendor-model.hwdb b/hwdb.d/20-usb-vendor-model.hwdb +index ee890a8f28..a9b2eabd54 100644 +--- a/hwdb.d/20-usb-vendor-model.hwdb ++++ b/hwdb.d/20-usb-vendor-model.hwdb +@@ -51843,7 +51843,7 @@ usb:v1391p1000* + ID_MODEL_FROM_DATABASE=URTC-1000 + + usb:v1395* +- ID_VENDOR_FROM_DATABASE=Sennheiser Communications ++ ID_VENDOR_FROM_DATABASE=DSEA A/S + + usb:v1395p0025* + ID_MODEL_FROM_DATABASE=Headset [PC 8] +@@ -51969,7 +51969,7 @@ usb:v1395p0067* + ID_MODEL_FROM_DATABASE=SP 20 D MS + + usb:v1395p006B* +- ID_MODEL_FROM_DATABASE=SC5x5 MS ++ ID_MODEL_FROM_DATABASE=SC6x5 + + usb:v1395p0072* + ID_MODEL_FROM_DATABASE=Headset +diff --git a/hwdb.d/ma-large.txt b/hwdb.d/ma-large.txt +index 8481ff91b9..d98eb3f384 100644 +--- a/hwdb.d/ma-large.txt ++++ b/hwdb.d/ma-large.txt +@@ -31745,12 +31745,6 @@ FC1CA1 (base 16) Nokia + Kanata Ontario K2K 2E6 + CA + +-D4-2D-C5 (hex) Panasonic i-PRO Sensing Solutions Co., Ltd. +-D42DC5 (base 16) Panasonic i-PRO Sensing Solutions Co., Ltd. +- 4-1-62 Minoshima, Hakata-ku +- Fukuoka City 812-8531 +- JP +- + E8-D0-3C (hex) Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd + E8D03C (base 16) Shenzhen Jingxun Software Telecommunication Technology Co.,Ltd + 3/F,A5 Building Zhiyuan Community No.1001,Xueyuan Road Nanshan District +@@ -32141,9 +32135,6 @@ F06728 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + DONG GUAN GUANG DONG 523860 + CN + +-BC-D7-67 (hex) Private +-BCD767 (base 16) Private +- + 9C-E1-76 (hex) Cisco Systems, Inc + 9CE176 (base 16) Cisco Systems, Inc + 80 West Tasman Dr. +@@ -37388,6 +37379,12 @@ DC8084 (base 16) Apple, Inc. + Ernakulam KL 686662 + IN + ++E4-DA-DF (hex) Taicang T&W Electronics ++E4DADF (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 ++ CN ++ + 7C-35-F8 (hex) Zhejiang Tmall Technology Co., Ltd. + 7C35F8 (base 16) Zhejiang Tmall Technology Co., Ltd. + No.969 Wenyi West Road, Wuchang Street, Yuhang District +@@ -37412,12 +37409,6 @@ C85895 (base 16) Motorola Mobility LLC, a Lenovo Company + Chicago IL 60654 + US + +-E4-DA-DF (hex) Taicang T&W Electronics +-E4DADF (base 16) Taicang T&W Electronics +- 89# Jiang Nan RD +- Suzhou Jiangsu 215412 +- CN +- + A8-53-7D (hex) Mist Systems, Inc. + A8537D (base 16) Mist Systems, Inc. + 1601 South De Anza Blvd, Suite 248 +@@ -37448,6 +37439,12 @@ E8D322 (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + ++30-2B-DC (hex) Top-Unum Electronics Co., LTD ++302BDC (base 16) Top-Unum Electronics Co., LTD ++ No. 58, Ln. 137, Jianshan Rd., Yingge Dist., ++ New Taipei City 239, Taiwan 239 ++ CN ++ + 8C-15-53 (hex) Beijing Memblaze Technology Co Ltd + 8C1553 (base 16) Beijing Memblaze Technology Co Ltd + Building B2,Dongsheng Park, 66 Xixiaokou Road, Haidian +@@ -37496,24 +37493,6 @@ E8EBD3 (base 16) Mellanox Technologies, Inc. + Sunnyvale CA 94085 + US + +-30-2B-DC (hex) Top-Unum Electronics Co., LTD +-302BDC (base 16) Top-Unum Electronics Co., LTD +- No. 58, Ln. 137, Jianshan Rd., Yingge Dist., +- New Taipei City 239, Taiwan 239 +- CN +- +-90-F7-B2 (hex) New H3C Technologies Co., Ltd +-90F7B2 (base 16) New H3C Technologies Co., Ltd +- 466 Changhe Road, Binjiang District +- Hangzhou Zhejiang 310052 +- CN +- +-04-E3-1A (hex) Sagemcom Broadband SAS +-04E31A (base 16) Sagemcom Broadband SAS +- 250, route de l'Empereur +- Rueil Malmaison Cedex hauts de seine 92848 +- FR +- + C0-06-0C (hex) HUAWEI TECHNOLOGIES CO.,LTD + C0060C (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -37532,18 +37511,24 @@ B0A4F0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + DONG GUAN GUANG DONG 523860 + CN + ++90-F7-B2 (hex) New H3C Technologies Co., Ltd ++90F7B2 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++04-E3-1A (hex) Sagemcom Broadband SAS ++04E31A (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ + 6C-99-9D (hex) Amazon Technologies Inc. + 6C999D (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + +-6C-93-08 (hex) IEEE Registration Authority +-6C9308 (base 16) IEEE Registration Authority +- 445 Hoes Lane +- Piscataway NJ 08554 +- US +- + 7C-6A-60 (hex) China Mobile Group Device Co.,Ltd. + 7C6A60 (base 16) China Mobile Group Device Co.,Ltd. + 32 Xuanwumen West Street,Xicheng District +@@ -37562,20 +37547,14 @@ B0A4F0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + York YO30 4RY + GB + +-D8-E2-DF (hex) Microsoft Corporation +-D8E2DF (base 16) Microsoft Corporation +- One Microsoft Way +- REDMOND WA 98052 +- US +- +-1C-61-B4 (hex) TP-Link Corporation Limited +-1C61B4 (base 16) TP-Link Corporation Limited ++9C-A2-F4 (hex) TP-Link Corporation Limited ++9CA2F4 (base 16) TP-Link Corporation Limited + Room 901,9/F.New East Ocean Centre, 9 Science Museum Road + Tsim Sha Tsui Kowloon 999077 + HK + +-9C-A2-F4 (hex) TP-Link Corporation Limited +-9CA2F4 (base 16) TP-Link Corporation Limited ++1C-61-B4 (hex) TP-Link Corporation Limited ++1C61B4 (base 16) TP-Link Corporation Limited + Room 901,9/F.New East Ocean Centre, 9 Science Museum Road + Tsim Sha Tsui Kowloon 999077 + HK +@@ -37586,23 +37565,29 @@ B4695F (base 16) TCT mobile ltd + Hui Zhou Guang Dong 516006 + CN + ++D8-E2-DF (hex) Microsoft Corporation ++D8E2DF (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ ++6C-93-08 (hex) IEEE Registration Authority ++6C9308 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ + 38-8F-30 (hex) Samsung Electronics Co.,Ltd + 388F30 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong + Gumi Gyeongbuk 730-350 + KR + +-A0-44-66 (hex) Intellics +-A04466 (base 16) Intellics +- 697, Pangyo-ro, Bundang-gu +- Seongnam-si Gyeonggi-do 13511 +- KR +- +-44-6D-7F (hex) Amazon Technologies Inc. +-446D7F (base 16) Amazon Technologies Inc. +- P.O Box 8102 +- Reno 89507 +- US ++24-06-F2 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++2406F2 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN + + 84-C6-92 (hex) Texas Instruments + 84C692 (base 16) Texas Instruments +@@ -37622,10 +37607,40 @@ A04466 (base 16) Intellics + London E14 5EY + GB + +-24-06-F2 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-2406F2 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 ++A0-44-66 (hex) Intellics ++A04466 (base 16) Intellics ++ 697, Pangyo-ro, Bundang-gu ++ Seongnam-si Gyeonggi-do 13511 ++ KR ++ ++CC-66-18 (hex) Adtran Inc ++CC6618 (base 16) Adtran Inc ++ 901 Explorer Blvd. ++ Huntsville AL 35806-2807 ++ US ++ ++C0-C1-70 (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++C0C170 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++50-42-89 (hex) zte corporation ++504289 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++30-8E-7A (hex) Shenzhen iComm Semiconductor CO.,LTD ++308E7A (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++2C-DD-5F (hex) Shenzhen iComm Semiconductor CO.,LTD ++2CDD5F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 + CN + + C0-6D-ED (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. +@@ -37634,6 +37649,18 @@ C06DED (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. + Hangzhou Zhejiang 310052 + CN + ++44-6D-7F (hex) Amazon Technologies Inc. ++446D7F (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno 89507 ++ US ++ ++E0-27-6C (hex) Guangzhou Shiyuan Electronic Technology Company Limited ++E0276C (base 16) Guangzhou Shiyuan Electronic Technology Company Limited ++ No.6, 4th Yunpu Road, Yunpu industry District ++ Guangzhou Guangdong 510530 ++ CN ++ + 90-93-5A (hex) ARRIS Group, Inc. + 90935A (base 16) ARRIS Group, Inc. + 6450 Sequence Drive +@@ -37652,42 +37679,12 @@ AC8FA9 (base 16) Nokia Solutions and Networks GmbH & Co. KG + Sunnyvale CA 94089 + US + +-C0-C1-70 (hex) Shenzhen SuperElectron Technology Co.,Ltd. +-C0C170 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. +- 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city +- Shenzhen Guangdong 518000 +- CN +- +-50-42-89 (hex) zte corporation +-504289 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- +-44-29-1E (hex) AltoBeam (China) Inc. +-44291E (base 16) AltoBeam (China) Inc. +- B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian +- Beijing Beijing 100083 +- CN +- + 24-EB-ED (hex) HUAWEI TECHNOLOGIES CO.,LTD + 24EBED (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-30-8E-7A (hex) Shenzhen iComm Semiconductor CO.,LTD +-308E7A (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-2C-DD-5F (hex) Shenzhen iComm Semiconductor CO.,LTD +-2CDD5F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- + AC-51-AB (hex) HUAWEI TECHNOLOGIES CO.,LTD + AC51AB (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -37700,16 +37697,22 @@ AC51AB (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-CC-66-18 (hex) Adtran Inc +-CC6618 (base 16) Adtran Inc +- 901 Explorer Blvd. +- Huntsville AL 35806-2807 +- US ++F8-AD-24 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++F8AD24 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN + +-E0-27-6C (hex) Guangzhou Shiyuan Electronic Technology Company Limited +-E0276C (base 16) Guangzhou Shiyuan Electronic Technology Company Limited +- No.6, 4th Yunpu Road, Yunpu industry District +- Guangzhou Guangdong 510530 ++A8-C9-8A (hex) New H3C Technologies Co., Ltd ++A8C98A (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN ++ ++44-29-1E (hex) AltoBeam (China) Inc. ++44291E (base 16) AltoBeam (China) Inc. ++ B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian ++ Beijing Beijing 100083 + CN + + DC-8E-95 (hex) Silicon Laboratories +@@ -37718,6 +37721,12 @@ DC8E95 (base 16) Silicon Laboratories + Austin TX 78701 + US + ++7C-EF-40 (hex) Nextorage Corporation ++7CEF40 (base 16) Nextorage Corporation ++ Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku ++ Kawasaki City Kanagawa 210-0007 ++ JP ++ + 28-BE-43 (hex) vivo Mobile Communication Co., Ltd. + 28BE43 (base 16) vivo Mobile Communication Co., Ltd. + No.1, vivo Road, Chang'an +@@ -37730,11 +37739,11 @@ DC8E95 (base 16) Silicon Laboratories + DONG GUAN GUANG DONG 523860 + CN + +-F8-AD-24 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +-F8AD24 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +- No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. +- Chongqing China 401120 +- CN ++28-74-F5 (hex) Nokia Solutions and Networks GmbH & Co. KG ++2874F5 (base 16) Nokia Solutions and Networks GmbH & Co. KG ++ Werinherstrasse 91 ++ München Bavaria D-81541 ++ DE + + B0-1F-8C (hex) Aruba, a Hewlett Packard Enterprise Company + B01F8C (base 16) Aruba, a Hewlett Packard Enterprise Company +@@ -37742,11 +37751,11 @@ B01F8C (base 16) Aruba, a Hewlett Packard Enterprise Company + Santa Clara CA 95054 + US + +-A8-C9-8A (hex) New H3C Technologies Co., Ltd +-A8C98A (base 16) New H3C Technologies Co., Ltd +- 466 Changhe Road, Binjiang District +- Hangzhou Zhejiang 310052 +- CN ++C0-E0-1C (hex) IoT Security Group, SL ++C0E01C (base 16) IoT Security Group, SL ++ Calle Pez Dorado, 27, local 2 ++ Torremolinos Malaga 29620 ++ ES + + 00-26-04 (hex) WorldCast Systems + 002604 (base 16) WorldCast Systems +@@ -37754,11 +37763,23 @@ A8C98A (base 16) New H3C Technologies Co., Ltd + Mérignac 33700 + FR + +-7C-EF-40 (hex) Nextorage Corporation +-7CEF40 (base 16) Nextorage Corporation +- Kawasaki-eki-mae Tower Riverk 9F, 12-1, Ekimaehoncho, Kawasaki-ku +- Kawasaki City Kanagawa 210-0007 +- JP ++00-CB-7A (hex) Technicolor CH USA Inc. ++00CB7A (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ ++F8-AB-82 (hex) Xiaomi Communications Co Ltd ++F8AB82 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++EC-30-B3 (hex) Xiaomi Communications Co Ltd ++EC30B3 (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN + + 1C-AF-4A (hex) Samsung Electronics Co.,Ltd + 1CAF4A (base 16) Samsung Electronics Co.,Ltd +@@ -37772,17 +37793,17 @@ C8120B (base 16) Samsung Electronics Co.,Ltd + Suwon Gyeonggi-Do 16677 + KR + +-28-74-F5 (hex) Nokia Solutions and Networks GmbH & Co. KG +-2874F5 (base 16) Nokia Solutions and Networks GmbH & Co. KG +- Werinherstrasse 91 +- München Bavaria D-81541 +- DE ++90-2C-FB (hex) CanTops Co,.Ltd. ++902CFB (base 16) CanTops Co,.Ltd. ++ A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil ++ Yeongtong-gu Suwon-si, Gyonggi-do 1660 ++ KR + +-C0-E0-1C (hex) IoT Security Group, SL +-C0E01C (base 16) IoT Security Group, SL +- Calle Pez Dorado, 27, local 2 +- Torremolinos Malaga 29620 +- ES ++A8-A2-37 (hex) Arcadyan Corporation ++A8A237 (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW + + 00-00-BD (hex) RYOSEI, Ltd. + 0000BD (base 16) RYOSEI, Ltd. +@@ -37790,42 +37811,42 @@ C0E01C (base 16) IoT Security Group, SL + Amagasaki-shi Hyogo 660-0834 + JP + +-00-CB-7A (hex) Technicolor CH USA Inc. +-00CB7A (base 16) Technicolor CH USA Inc. +- 5030 Sugarloaf Parkway Bldg 6 +- Lawrenceville GA 30044 +- US +- + AC-CC-FC (hex) Amazon Technologies Inc. + ACCCFC (base 16) Amazon Technologies Inc. + P.O Box 8102 + Reno NV 89507 + US + +-90-2C-FB (hex) CanTops Co,.Ltd. +-902CFB (base 16) CanTops Co,.Ltd. +- A-1002 Digital Empire, 16, Deogyong-daero 1556beon-gil +- Yeongtong-gu Suwon-si, Gyonggi-do 1660 +- KR +- +-F8-AB-82 (hex) Xiaomi Communications Co Ltd +-F8AB82 (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 ++08-E6-3B (hex) zte corporation ++08E63B (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + +-EC-30-B3 (hex) Xiaomi Communications Co Ltd +-EC30B3 (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 ++88-C1-74 (hex) zte corporation ++88C174 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + ++C8-9E-61 (hex) Lyngsoe Systems LTd ++C89E61 (base 16) Lyngsoe Systems LTd ++ 101 Simona Dr., Unit 2 ++ Bolton Ontario L7E 4E8 ++ CA ++ + 9C-57-BC (hex) eero inc. + 9C57BC (base 16) eero inc. + 660 3rd Street + San Francisco CA 94107 + US + ++2C-82-17 (hex) Apple, Inc. ++2C8217 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + 14-2D-4D (hex) Apple, Inc. + 142D4D (base 16) Apple, Inc. + 1 Infinite Loop +@@ -37844,12 +37865,6 @@ B8211C (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-B0-3F-64 (hex) Apple, Inc. +-B03F64 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- + D4-5A-3F (hex) Juniper Networks + D45A3F (base 16) Juniper Networks + 1133 Innovation Way +@@ -37862,35 +37877,35 @@ E8DC6C (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-A8-A2-37 (hex) Arcadyan Corporation +-A8A237 (base 16) Arcadyan Corporation +- No.8, Sec.2, Guangfu Rd. +- Hsinchu City Hsinchu 30071 +- TW ++48-B4-C3 (hex) Aruba, a Hewlett Packard Enterprise Company ++48B4C3 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US + +-2C-82-17 (hex) Apple, Inc. +-2C8217 (base 16) Apple, Inc. ++B0-3F-64 (hex) Apple, Inc. ++B03F64 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-08-E6-3B (hex) zte corporation +-08E63B (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++68-A7-B4 (hex) Honor Device Co., Ltd. ++68A7B4 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 + CN + +-88-C1-74 (hex) zte corporation +-88C174 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++80-3C-20 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++803C20 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-C8-9E-61 (hex) Lyngsoe Systems LTd +-C89E61 (base 16) Lyngsoe Systems LTd +- 101 Simona Dr., Unit 2 +- Bolton Ontario L7E 4E8 +- CA ++A4-DD-58 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++A4DD58 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN + + E0-28-B1 (hex) Shenzhen Skyworth Digital Technology CO., Ltd + E028B1 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +@@ -37910,12 +37925,6 @@ C08D51 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-48-B4-C3 (hex) Aruba, a Hewlett Packard Enterprise Company +-48B4C3 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 +- US +- + 6C-15-24 (hex) IEEE Registration Authority + 6C1524 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -37928,6 +37937,12 @@ C08D51 (base 16) Amazon Technologies Inc. + Kanata Ontario K2K 2E6 + CA + ++00-12-93 (hex) ABB Switzerland Ltd. ++001293 (base 16) ABB Switzerland Ltd. ++ Via Luserte Sud 9 Quartino ++ Quartino 6572 ++ CH ++ + C0-E9-11 (hex) Private + C0E911 (base 16) Private + +@@ -37943,28 +37958,28 @@ C0E911 (base 16) Private + London SW1Y 4AR + GB + +-68-A7-B4 (hex) Honor Device Co., Ltd. +-68A7B4 (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 ++24-2C-FE (hex) Zhejiang Tmall Technology Co., Ltd. ++242CFE (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 + CN + +-80-3C-20 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-803C20 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 ++A0-42-D1 (hex) Huawei Device Co., Ltd. ++A042D1 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + +-A4-DD-58 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-A4DD58 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN ++2C-DC-78 (hex) Descartes Systems (USA) LLC ++2CDC78 (base 16) Descartes Systems (USA) LLC ++ 2030 Powers Ferry Road SE ++ Atlanta GA 303339 ++ US + +-24-2C-FE (hex) Zhejiang Tmall Technology Co., Ltd. +-242CFE (base 16) Zhejiang Tmall Technology Co., Ltd. +- No.969 Wenyi West Road, Wuchang Street, Yuhang District +- Hangzhou Zhejiang 310024 ++58-87-9F (hex) Huawei Device Co., Ltd. ++58879F (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + + E8-D8-7E (hex) Amazon Technologies Inc. +@@ -37973,59 +37988,47 @@ E8D87E (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-00-12-93 (hex) ABB Switzerland Ltd. +-001293 (base 16) ABB Switzerland Ltd. +- Via Luserte Sud 9 Quartino +- Quartino 6572 +- CH +- + 9C-1F-CA (hex) Hangzhou AlmightyDigit Technology Co., Ltd + 9C1FCA (base 16) Hangzhou AlmightyDigit Technology Co., Ltd + Room A0041, 10 / F, building 1, Haizhi center, Cangqian street, Yuhang District + Hangzhou Zhejiang 310000 + CN + +-2C-DC-78 (hex) Descartes Systems (USA) LLC +-2CDC78 (base 16) Descartes Systems (USA) LLC +- 2030 Powers Ferry Road SE +- Atlanta GA 303339 ++84-70-D7 (hex) eero inc. ++8470D7 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 + US + +-A0-42-D1 (hex) Huawei Device Co., Ltd. +-A042D1 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-58-87-9F (hex) Huawei Device Co., Ltd. +-58879F (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- + E0-6C-4E (hex) Shenzhen TINNO Mobile Technology Corp. + E06C4E (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili + Nanshan District, Shenzhen PRC 518053 + CN + ++58-1D-D8 (hex) Sagemcom Broadband SAS ++581DD8 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ + 80-6A-B0 (hex) Shenzhen TINNO Mobile Technology Corp. + 806AB0 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili + Nanshan District, Shenzhen PRC 518053 + CN + +-84-70-D7 (hex) eero inc. +-8470D7 (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 ++F4-B3-B1 (hex) Silicon Laboratories ++F4B3B1 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 + US + +-10-B2-32 (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. +-10B232 (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. +- No.218 Qianwangang Road +- Qingdao Shangdong 266510 +- CN ++04-69-8F (hex) Juniper Networks ++04698F (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US + + 14-9B-F3 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + 149BF3 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +@@ -38039,11 +38042,11 @@ E06C4E (base 16) Shenzhen TINNO Mobile Technology Corp. + Wuhan Hubei 430074 + CN + +-F4-B3-B1 (hex) Silicon Laboratories +-F4B3B1 (base 16) Silicon Laboratories +- 400 West Cesar Chavez Street +- Austin TX 78701 +- US ++10-B2-32 (hex) Qingdao Intelligent&Precise Electronics Co.,Ltd. ++10B232 (base 16) Qingdao Intelligent&Precise Electronics Co.,Ltd. ++ No.218 Qianwangang Road ++ Qingdao Shangdong 266510 ++ CN + + B8-50-D8 (hex) Beijing Xiaomi Mobile Software Co., Ltd + B850D8 (base 16) Beijing Xiaomi Mobile Software Co., Ltd +@@ -38051,36 +38054,6 @@ B850D8 (base 16) Beijing Xiaomi Mobile Software Co., Ltd + Beijing Beijing 100085 + CN + +-58-1D-D8 (hex) Sagemcom Broadband SAS +-581DD8 (base 16) Sagemcom Broadband SAS +- 250, route de l'Empereur +- Rueil Malmaison Cedex hauts de seine 92848 +- FR +- +-04-69-8F (hex) Juniper Networks +-04698F (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 +- US +- +-5C-53-C3 (hex) Ubee Interactive Co., Limited +-5C53C3 (base 16) Ubee Interactive Co., Limited +- Flat/RM 1202, 12/F, AT Tower, 180 Electric Road +- North Point 00000 +- HK +- +-AC-5A-F0 (hex) LG Electronics +-AC5AF0 (base 16) LG Electronics +- 222 LG-ro, JINWI-MYEON +- Pyeongtaek-si Gyeonggi-do 451-713 +- KR +- +-EC-A6-2F (hex) HUAWEI TECHNOLOGIES CO.,LTD +-ECA62F (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- + C0-9F-51 (hex) SERNET (SUZHOU) TECHNOLOGIES CORPORATION + C09F51 (base 16) SERNET (SUZHOU) TECHNOLOGIES CORPORATION + NO.8 Tangzhuang Road,Suzhou Industrial Park,Su ZhouCity,JiangSu Province,China +@@ -38099,17 +38072,11 @@ A0CDF3 (base 16) Murata Manufacturing Co., Ltd. + Nagaokakyo-shi Kyoto 617-8555 + JP + +-24-29-34 (hex) Google, Inc. +-242934 (base 16) Google, Inc. +- 1600 Amphitheatre Parkway +- Mountain View CA 94043 +- US +- +-38-0A-4F (hex) PRACHI ENTERPRISES +-380A4F (base 16) PRACHI ENTERPRISES +- B-141, 2nd FLOOR SECTOR-6 NOIDA +- NOIDA UTTARPRADESH 201301 +- IN ++B4-8A-0A (hex) Espressif Inc. ++B48A0A (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN + + C8-3A-1B (hex) Toshiba TEC Corporation Inc + C83A1B (base 16) Toshiba TEC Corporation Inc +@@ -38117,29 +38084,23 @@ C83A1B (base 16) Toshiba TEC Corporation Inc + Shinagawa-ku Tokyo 141-8664 + JP + +-B4-8A-0A (hex) Espressif Inc. +-B48A0A (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 ++EC-A6-2F (hex) HUAWEI TECHNOLOGIES CO.,LTD ++ECA62F (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-80-19-70 (hex) Samsung Electronics Co.,Ltd +-801970 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 ++AC-5A-F0 (hex) LG Electronics ++AC5AF0 (base 16) LG Electronics ++ 222 LG-ro, JINWI-MYEON ++ Pyeongtaek-si Gyeonggi-do 451-713 + KR + +-E0-F7-28 (hex) Amazon Technologies Inc. +-E0F728 (base 16) Amazon Technologies Inc. +- P.O Box 8102 +- Reno NV 89507 +- US +- +-1C-0E-D3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-1C0ED3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN ++5C-53-C3 (hex) Ubee Interactive Co., Limited ++5C53C3 (base 16) Ubee Interactive Co., Limited ++ Flat/RM 1202, 12/F, AT Tower, 180 Electric Road ++ North Point 00000 ++ HK + + 24-32-AE (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. + 2432AE (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. +@@ -38171,6 +38132,12 @@ AC936A (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + ++1C-0E-D3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++1C0ED3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ + 7C-4C-A5 (hex) SKY UK LIMITED + 7C4CA5 (base 16) SKY UK LIMITED + 130 Kings Road +@@ -38195,17 +38162,41 @@ C03E0F (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + +-D0-58-FC (hex) SKY UK LIMITED +-D058FC (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB ++24-29-34 (hex) Google, Inc. ++242934 (base 16) Google, Inc. ++ 1600 Amphitheatre Parkway ++ Mountain View CA 94043 ++ US + +-90-02-18 (hex) SKY UK LIMITED +-900218 (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB ++38-0A-4F (hex) PRACHI ENTERPRISES ++380A4F (base 16) PRACHI ENTERPRISES ++ B-141, 2nd FLOOR SECTOR-6 NOIDA ++ NOIDA UTTARPRADESH 201301 ++ IN ++ ++80-19-70 (hex) Samsung Electronics Co.,Ltd ++801970 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++E0-F7-28 (hex) Amazon Technologies Inc. ++E0F728 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++B8-FB-AF (hex) Xiamen IPRT Technology CO.,LTD ++B8FBAF (base 16) Xiamen IPRT Technology CO.,LTD ++ 3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China. ++ xiamen fujian 361000 ++ CN ++ ++34-85-18 (hex) Espressif Inc. ++348518 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN + + D4-DA-CD (hex) SKY UK LIMITED + D4DACD (base 16) SKY UK LIMITED +@@ -38231,66 +38222,6 @@ B04530 (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + +-A4-AE-11 (hex) Hon Hai Precision Industry Co., Ltd. +-A4AE11 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- +-7C-DE-78 (hex) New H3C Technologies Co., Ltd +-7CDE78 (base 16) New H3C Technologies Co., Ltd +- 466 Changhe Road, Binjiang District +- Hangzhou Zhejiang 310052 +- CN +- +-3C-E0-64 (hex) Texas Instruments +-3CE064 (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- +-E0-92-8F (hex) Texas Instruments +-E0928F (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- +-CC-03-7B (hex) Texas Instruments +-CC037B (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US +- +-58-1C-F8 (hex) Intel Corporate +-581CF8 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-AC-19-8E (hex) Intel Corporate +-AC198E (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-C8-5E-A9 (hex) Intel Corporate +-C85EA9 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-B8-FB-AF (hex) Xiamen IPRT Technology CO.,LTD +-B8FBAF (base 16) Xiamen IPRT Technology CO.,LTD +- 3~5Floor,No.101,Huili Industry Park,Meixi Road,Tongan District,Xiamen,China. +- xiamen fujian 361000 +- CN +- +-34-85-18 (hex) Espressif Inc. +-348518 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- + EC-E6-A2 (hex) Fiberhome Telecommunication Technologies Co.,LTD + ECE6A2 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road +@@ -38309,12 +38240,24 @@ E02E0B (base 16) Intel Corporate + Kulim Kedah 09000 + MY + +-CC-29-BD (hex) zte corporation +-CC29BD (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++A4-AE-11 (hex) Hon Hai Precision Industry Co., Ltd. ++A4AE11 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 + CN + ++D0-58-FC (hex) SKY UK LIMITED ++D058FC (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ ++90-02-18 (hex) SKY UK LIMITED ++900218 (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ + 38-5C-FB (hex) Silicon Laboratories + 385CFB (base 16) Silicon Laboratories + 400 West Cesar Chavez Street +@@ -38327,23 +38270,65 @@ C43D1A (base 16) Intel Corporate + Kulim Kedah 09000 + MY + ++BC-F8-8B (hex) zte corporation ++BCF88B (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ + 68-53-9D (hex) EM Microelectronic + 68539D (base 16) EM Microelectronic + Rue des Sors 3 + Marin-Epagnier Neuchatel 2074 + CH + ++E4-65-64 (hex) SHENZHEN KTC TECHNOLOGY CO.,LTD ++E46564 (base 16) SHENZHEN KTC TECHNOLOGY CO.,LTD ++ Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China ++ SHEN ZHEN GUANG DONG 518100 ++ CN ++ + C8-BF-4C (hex) Beijing Xiaomi Mobile Software Co., Ltd + C8BF4C (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District + Beijing Beijing 100085 + CN + +-E4-65-64 (hex) SHENZHEN KTC TECHNOLOGY CO.,LTD +-E46564 (base 16) SHENZHEN KTC TECHNOLOGY CO.,LTD +- Add: NO.4023, Wuhe Road, Bantian, Longgang District, Shenzhen, China +- SHEN ZHEN GUANG DONG 518100 +- CN ++58-1C-F8 (hex) Intel Corporate ++581CF8 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++AC-19-8E (hex) Intel Corporate ++AC198E (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++C8-5E-A9 (hex) Intel Corporate ++C85EA9 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++3C-E0-64 (hex) Texas Instruments ++3CE064 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++E0-92-8F (hex) Texas Instruments ++E0928F (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++CC-03-7B (hex) Texas Instruments ++CC037B (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US + + E0-51-D8 (hex) China Dragon Technology Limited + E051D8 (base 16) China Dragon Technology Limited +@@ -38351,17 +38336,17 @@ E051D8 (base 16) China Dragon Technology Limited + Shenzhen Guangdong 518104 + CN + +-BC-F8-8B (hex) zte corporation +-BCF88B (base 16) zte corporation ++CC-29-BD (hex) zte corporation ++CC29BD (base 16) zte corporation + 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China + shenzhen guangdong 518057 + CN + +-5C-60-BA (hex) HP Inc. +-5C60BA (base 16) HP Inc. +- 10300 Energy Dr +- Spring TX 77389 +- US ++7C-DE-78 (hex) New H3C Technologies Co., Ltd ++7CDE78 (base 16) New H3C Technologies Co., Ltd ++ 466 Changhe Road, Binjiang District ++ Hangzhou Zhejiang 310052 ++ CN + + E0-EF-02 (hex) Chengdu Quanjing Intelligent Technology Co.,Ltd + E0EF02 (base 16) Chengdu Quanjing Intelligent Technology Co.,Ltd +@@ -38375,6 +38360,18 @@ E0EF02 (base 16) Chengdu Quanjing Intelligent Technology Co.,Ltd + Hong Kong Hong Kong 999077 + HK + ++20-9C-B4 (hex) Aruba, a Hewlett Packard Enterprise Company ++209CB4 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++E8-CC-8C (hex) Chengdu Jiarui Hualian Communication Technology Co ++E8CC8C (base 16) Chengdu Jiarui Hualian Communication Technology Co ++ 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province ++ Chengdu Sichuan 610000 ++ CN ++ + A8-AB-B5 (hex) Apple, Inc. + A8ABB5 (base 16) Apple, Inc. + 1 Infinite Loop +@@ -38393,29 +38390,11 @@ A8ABB5 (base 16) Apple, Inc. + Kanata Ontario K2K 2E6 + CA + +-74-80-3F (hex) Renesas Electronics (Penang) Sdn. Bhd. +-74803F (base 16) Renesas Electronics (Penang) Sdn. Bhd. +- Phase 3, Bayan Lepas FIZ +- Bayan Lepas Penang 11900 +- MY +- +-04-43-FD (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-0443FD (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN +- +-A4-89-7E (hex) Guangzhou Yuhong Technology Co.,Ltd. +-A4897E (base 16) Guangzhou Yuhong Technology Co.,Ltd. +- Room 402, No. 11 Software Road, Tianhe District, Guangzhou +- Guangzhou Guangdong 510640 +- CN +- +-E8-CC-8C (hex) Chengdu Jiarui Hualian Communication Technology Co +-E8CC8C (base 16) Chengdu Jiarui Hualian Communication Technology Co +- 5th Floor, Building F, Huirong Plaza (Jinhua), No. 88, Section 3, Jinhua Road, Industrial Park, Jinjiang District, Chengdu, Sichuan Province +- Chengdu Sichuan 610000 +- CN ++B0-67-B5 (hex) Apple, Inc. ++B067B5 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US + + 5C-52-84 (hex) Apple, Inc. + 5C5284 (base 16) Apple, Inc. +@@ -38435,11 +38414,17 @@ C0956D (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-20-9C-B4 (hex) Aruba, a Hewlett Packard Enterprise Company +-209CB4 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 +- US ++04-43-FD (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++0443FD (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++74-80-3F (hex) Renesas Electronics (Penang) Sdn. Bhd. ++74803F (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY + + EC-A1-38 (hex) Amazon Technologies Inc. + ECA138 (base 16) Amazon Technologies Inc. +@@ -38447,12 +38432,18 @@ ECA138 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-B0-67-B5 (hex) Apple, Inc. +-B067B5 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 ++5C-60-BA (hex) HP Inc. ++5C60BA (base 16) HP Inc. ++ 10300 Energy Dr ++ Spring TX 77389 + US + ++A4-89-7E (hex) Guangzhou Yuhong Technology Co.,Ltd. ++A4897E (base 16) Guangzhou Yuhong Technology Co.,Ltd. ++ Room 402, No. 11 Software Road, Tianhe District, Guangzhou ++ Guangzhou Guangdong 510640 ++ CN ++ + 90-0A-62 (hex) Inventus Power Eletronica do Brasil LTDA + 900A62 (base 16) Inventus Power Eletronica do Brasil LTDA + Av Buriti, 4285 Distrito Industrial +@@ -38477,18 +38468,6 @@ B067B5 (base 16) Apple, Inc. + Shenzhen No.1079 Nanhai Road,Nanshan District 518067 + CN + +-50-5F-B5 (hex) ASKEY COMPUTER CORP +-505FB5 (base 16) ASKEY COMPUTER CORP +- 10F, NO. 119, JIANKANG RD., ZHONGHE DIST. +- NEW TAIPEI 235 +- TW +- +-88-DE-7C (hex) ASKEY COMPUTER CORP +-88DE7C (base 16) ASKEY COMPUTER CORP +- 10F, No.119, JIANKANG RD.,ZHINGHE DIST, +- NEW TAIPEI CITY 23585 +- TW +- + AC-31-84 (hex) Huawei Device Co., Ltd. + AC3184 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -38501,6 +38480,18 @@ AC3184 (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + ++50-5F-B5 (hex) ASKEY COMPUTER CORP ++505FB5 (base 16) ASKEY COMPUTER CORP ++ 10F, NO. 119, JIANKANG RD., ZHONGHE DIST. ++ NEW TAIPEI 235 ++ TW ++ ++88-DE-7C (hex) ASKEY COMPUTER CORP ++88DE7C (base 16) ASKEY COMPUTER CORP ++ 10F, No.119, JIANKANG RD.,ZHINGHE DIST, ++ NEW TAIPEI CITY 23585 ++ TW ++ + 48-1C-B9 (hex) SZ DJI TECHNOLOGY CO.,LTD + 481CB9 (base 16) SZ DJI TECHNOLOGY CO.,LTD + 6/F,HKUST SZ IER Bldg,9 Yuexing 1st Rd +@@ -38531,6 +38522,72 @@ B8208E (base 16) Panasonic Connect Co., Ltd. + San Mateo CA 94402 + US + ++E0-BA-AD (hex) Hangzhou Hikvision Digital Technology Co.,Ltd. ++E0BAAD (base 16) Hangzhou Hikvision Digital Technology Co.,Ltd. ++ No.555 Qianmo Road ++ Hangzhou Zhejiang 310052 ++ CN ++ ++08-91-15 (hex) Amazon Technologies Inc. ++089115 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++74-D4-23 (hex) Amazon Technologies Inc. ++74D423 (base 16) Amazon Technologies Inc. ++ P.O Box 8102 ++ Reno NV 89507 ++ US ++ ++EC-1D-9E (hex) Quectel Wireless Solutions Co.,Ltd. ++EC1D9E (base 16) Quectel Wireless Solutions Co.,Ltd. ++ 7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District ++ Shanghai 200233 ++ CN ++ ++BC-D7-67 (hex) BAE Systems Apllied Intelligence ++BCD767 (base 16) BAE Systems Apllied Intelligence ++ 170 Waterside House ++ Guildford Surrey GU2 7RQ ++ GB ++ ++2C-69-1D (hex) IEEE Registration Authority ++2C691D (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++D4-2D-C5 (hex) i-PRO Co., Ltd. ++D42DC5 (base 16) i-PRO Co., Ltd. ++ 4-1-62 Minoshima, Hakata-ku ++ Fukuoka City 812-8531 ++ JP ++ ++E0-47-35 (hex) Ericsson AB ++E04735 (base 16) Ericsson AB ++ Torshamnsgatan 36 ++ Stockholm SE-164 80 ++ SE ++ ++F4-2B-7D (hex) Chipsguide technology CO.,LTD. ++F42B7D (base 16) Chipsguide technology CO.,LTD. ++ No.758 in DongHua Design House, Nan Guang Road, Nan Shan Tone, ShenZhen, Guangdong, China ++ Shenzhen Guangdong 518002 ++ CN ++ ++8C-52-19 (hex) SHARP Corporation ++8C5219 (base 16) SHARP Corporation ++ 1 Takumi-cho, Sakai-ku ++ Sakai City Osaka 590-8522 ++ JP ++ ++A0-44-F3 (hex) RafaelMicro ++A044F3 (base 16) RafaelMicro ++ 8F.,No.28,Chenggong 12th St. ++ ChuBei City HsinChu County 30264 ++ TW ++ + 9C-FF-C2 (hex) AVI Systems GmbH + 9CFFC2 (base 16) AVI Systems GmbH + Dr. Franz Wilhelmstraße 2A +@@ -39272,9 +39329,6 @@ D0196A (base 16) Ciena Corporation + Shanghai Shanghai 201203 + CN + +-88-B4-36 (hex) Private +-88B436 (base 16) Private +- + 6C-AB-05 (hex) Cisco Systems, Inc + 6CAB05 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -69548,9 +69602,6 @@ A0224E (base 16) IEEE Registration Authority + Piscataway NJ 08554 + US + +-30-27-CF (hex) Private +-3027CF (base 16) Private +- + 38-43-E5 (hex) Grotech Inc + 3843E5 (base 16) Grotech Inc + 19, Ojeongongeop-gil +@@ -75452,6 +75503,24 @@ D850A1 (base 16) Hunan Danuo Technology Co.,LTD + Hong Kong Hong Kong 999077 + HK + ++7C-6C-F0 (hex) Shenzhen TINNO Mobile Technology Corp. ++7C6CF0 (base 16) Shenzhen TINNO Mobile Technology Corp. ++ 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen ++ Shenzhen guangdong 518053 ++ CN ++ ++00-C3-0A (hex) Xiaomi Communications Co Ltd ++00C30A (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++88-52-EB (hex) Xiaomi Communications Co Ltd ++8852EB (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ + B4-28-75 (hex) Futecho Solutions Private Limited + B42875 (base 16) Futecho Solutions Private Limited + 504, Commercial Complex, Savitri Cinema Compound, GK2 +@@ -75470,24 +75539,6 @@ B42875 (base 16) Futecho Solutions Private Limited + San Francisco CA 94107 + US + +-00-C3-0A (hex) Xiaomi Communications Co Ltd +-00C30A (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- +-88-52-EB (hex) Xiaomi Communications Co Ltd +-8852EB (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- +-7C-6C-F0 (hex) Shenzhen TINNO Mobile Technology Corp. +-7C6CF0 (base 16) Shenzhen TINNO Mobile Technology Corp. +- 4/F, H-3 Building, Qiao Cheng Eastern Industrial Park, Overseas Chinese Town, Shenzhen +- Shenzhen guangdong 518053 +- CN +- + 00-A0-A2 (hex) B810 S.R.L. + 00A0A2 (base 16) B810 S.R.L. + Via E. Lazzaretti 2/1 +@@ -75560,6 +75611,12 @@ DC9A7D (base 16) HISENSE VISUAL TECHNOLOGY CO.,LTD + Dongguan 523808 + CN + ++30-CB-36 (hex) Belden Singapore Pte. Ltd. ++30CB36 (base 16) Belden Singapore Pte. Ltd. ++ 151 Lorong Chuan #05-01 New Tech Park Singapore ++ Singapore 556741 ++ SG ++ + B8-3F-D2 (hex) Mellanox Technologies, Inc. + B83FD2 (base 16) Mellanox Technologies, Inc. + 350 Oakmead Parkway, Suite 100 +@@ -75572,12 +75629,6 @@ B83FD2 (base 16) Mellanox Technologies, Inc. + Chiyoda-ku Tokyo 100-0004 + JP + +-30-CB-36 (hex) Belden Singapore Pte. Ltd. +-30CB36 (base 16) Belden Singapore Pte. Ltd. +- 151 Lorong Chuan #05-01 New Tech Park Singapore +- Singapore 556741 +- SG +- + 8C-17-59 (hex) Intel Corporate + 8C1759 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -75590,11 +75641,29 @@ B83FD2 (base 16) Mellanox Technologies, Inc. + San Jose CA 95131 + US + +-BC-6E-6D (hex) EM Microelectronic +-BC6E6D (base 16) EM Microelectronic +- Rue des Sors 3 +- Marin-Epagnier Neuchatel 2074 +- CH ++6C-A4-01 (hex) essensys plc ++6CA401 (base 16) essensys plc ++ Aldgate Tower, Leman Street ++ London E1 8FA ++ GB ++ ++34-92-C2 (hex) Square Route Co., Ltd. ++3492C2 (base 16) Square Route Co., Ltd. ++ Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku ++ Tokyo Tokyo 108-0075 ++ JP ++ ++34-BD-20 (hex) Hangzhou Hikrobot Technology Co., Ltd. ++34BD20 (base 16) Hangzhou Hikrobot Technology Co., Ltd. ++ Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang ++ Hangzhou 310052 ++ CN ++ ++64-C2-69 (hex) eero inc. ++64C269 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US + + B0-4A-6A (hex) Samsung Electronics Co.,Ltd + B04A6A (base 16) Samsung Electronics Co.,Ltd +@@ -75614,48 +75683,30 @@ A8798D (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-34-92-C2 (hex) Square Route Co., Ltd. +-3492C2 (base 16) Square Route Co., Ltd. +- Area-Shinagawa 13F, 1-9-36, Konan, Minato-ku +- Tokyo Tokyo 108-0075 +- JP +- + 28-3D-C2 (hex) Samsung Electronics Co.,Ltd + 283DC2 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong + Gumi Gyeongbuk 730-350 + KR + ++BC-6E-6D (hex) EM Microelectronic ++BC6E6D (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ + 00-D4-9E (hex) Intel Corporate + 00D49E (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +-6C-A4-01 (hex) essensys plc +-6CA401 (base 16) essensys plc +- Aldgate Tower, Leman Street +- London E1 8FA +- GB +- + CC-F3-05 (hex) SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD + CCF305 (base 16) SHENZHEN TIAN XING CHUANG ZHAN ELECTRONIC CO.,LTD + Second floor, Building A, FengHangAvenue, Hangcheng Street, Bao'an District + Shenzhen Guangdong 518126 + CN + +-34-BD-20 (hex) Hangzhou Hikrobot Technology Co., Ltd. +-34BD20 (base 16) Hangzhou Hikrobot Technology Co., Ltd. +- Room 304, Unit B, Building 2, 399 Danfeng Road, Binjiang District, Hangzhou, Zhejiang +- Hangzhou 310052 +- CN +- +-64-C2-69 (hex) eero inc. +-64C269 (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 +- US +- + AC-2A-A1 (hex) Cisco Systems, Inc + AC2AA1 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -75674,34 +75725,16 @@ F8E94F (base 16) Cisco Systems, Inc + Kulim Kedah 09000 + MY + +-B8-D6-1A (hex) Espressif Inc. +-B8D61A (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- +-BC-F4-D4 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +-BCF4D4 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +- B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China +- Nanning Guangxi 530007 ++E0-6C-C5 (hex) Huawei Device Co., Ltd. ++E06CC5 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + +-D8-9C-8E (hex) Comcast Cable Corporation +-D89C8E (base 16) Comcast Cable Corporation +- 1800 Arch Street +- Philadelphia PA 19103 +- US +- +-74-56-3C (hex) GIGA-BYTE TECHNOLOGY CO.,LTD. +-74563C (base 16) GIGA-BYTE TECHNOLOGY CO.,LTD. +- Pin-Jen City, Taoyuan, Taiwan, R.O.C. +- Pin-Jen Taoyuan 324 +- TW +- +-EC-55-1C (hex) HUAWEI TECHNOLOGIES CO.,LTD +-EC551C (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 ++30-96-3B (hex) Huawei Device Co., Ltd. ++30963B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + + 8C-6B-DB (hex) Huawei Device Co., Ltd. +@@ -75728,24 +75761,6 @@ EC551C (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan Guangdong 523808 + CN + +-E0-6C-C5 (hex) Huawei Device Co., Ltd. +-E06CC5 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-30-96-3B (hex) Huawei Device Co., Ltd. +-30963B (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD +-90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- + 98-59-7A (hex) Intel Corporate + 98597A (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -75758,11 +75773,11 @@ E06CC5 (base 16) Huawei Device Co., Ltd. + Kulim Kedah 09000 + MY + +-B4-83-51 (hex) Intel Corporate +-B48351 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++B8-D6-1A (hex) Espressif Inc. ++B8D61A (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN + + 00-25-CA (hex) Laird Connectivity + 0025CA (base 16) Laird Connectivity +@@ -75770,42 +75785,84 @@ B48351 (base 16) Intel Corporate + Cedarburg WI 53012 + US + ++90-B5-7F (hex) Shenzhen iComm Semiconductor CO.,LTD ++90B57F (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++74-56-3C (hex) GIGA-BYTE TECHNOLOGY CO.,LTD. ++74563C (base 16) GIGA-BYTE TECHNOLOGY CO.,LTD. ++ Pin-Jen City, Taoyuan, Taiwan, R.O.C. ++ Pin-Jen Taoyuan 324 ++ TW ++ ++D8-9C-8E (hex) Comcast Cable Corporation ++D89C8E (base 16) Comcast Cable Corporation ++ 1800 Arch Street ++ Philadelphia PA 19103 ++ US ++ + 04-B9-7D (hex) AiVIS Co., Itd. + 04B97D (base 16) AiVIS Co., Itd. + 112, Dumipo-ro, Jung-gu + Incheon Incheon 22394 + KR + ++BC-F4-D4 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++BCF4D4 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ + C4-C0-63 (hex) New H3C Technologies Co., Ltd + C4C063 (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District + Hangzhou Zhejiang 310052 + CN + +-54-43-B2 (hex) Espressif Inc. +-5443B2 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 ++EC-55-1C (hex) HUAWEI TECHNOLOGIES CO.,LTD ++EC551C (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-C0-DD-8A (hex) Facebook Technologies, LLC +-C0DD8A (base 16) Facebook Technologies, LLC +- 1601 Willow Rd +- Menlo Park CA 94025 +- US +- + E0-79-8D (hex) Silicon Laboratories + E0798D (base 16) Silicon Laboratories + 400 West Cesar Chavez Street + Austin TX 78701 + US + ++B4-83-51 (hex) Intel Corporate ++B48351 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + 34-AD-61 (hex) CELESTICA INC. + 34AD61 (base 16) CELESTICA INC. + 1900-5140 Yonge Street PO Box 42 + Toronto Ontario M2N 6L7 + CA + ++54-43-B2 (hex) Espressif Inc. ++5443B2 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++C0-DD-8A (hex) Facebook Technologies, LLC ++C0DD8A (base 16) Facebook Technologies, LLC ++ 1601 Willow Rd ++ Menlo Park CA 94025 ++ US ++ ++AC-D3-1D (hex) Cisco Meraki ++ACD31D (base 16) Cisco Meraki ++ 500 Terry A. Francois Blvd ++ San Francisco 94158 ++ US ++ + 10-96-1A (hex) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. + 10961A (base 16) CHIPSEA TECHNOLOGIES (SHENZHEN) CORP. + 9F,BLOCK A,GARDEN CITY DIGITAL BUILDING,NO.1079 NANHAI ROAD,NANSHAN DISTRICT +@@ -75818,6 +75875,18 @@ BCE9E2 (base 16) Brocade Communications Systems LLC + San Jose CA 95131 + US + ++00-18-48 (hex) Vecima Networks Inc. ++001848 (base 16) Vecima Networks Inc. ++ 150 Cardinal Place ++ Saskatoon SK S7L 6H7 ++ CA ++ ++2C-55-3C (hex) Vecima Networks Inc. ++2C553C (base 16) Vecima Networks Inc. ++ 150 Cardinal Place ++ Saskatoon SK S7L 6H7 ++ CA ++ + AC-BF-71 (hex) Bose Corporation + ACBF71 (base 16) Bose Corporation + The Mountain +@@ -75830,12 +75899,6 @@ ACBF71 (base 16) Bose Corporation + Piscataway NJ 08554 + US + +-AC-D3-1D (hex) Cisco Meraki +-ACD31D (base 16) Cisco Meraki +- 500 Terry A. Francois Blvd +- San Francisco 94158 +- US +- + 74-84-69 (hex) Nintendo Co.,Ltd + 748469 (base 16) Nintendo Co.,Ltd + 11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU +@@ -75878,18 +75941,6 @@ B41974 (base 16) Apple, Inc. + Shenzhen Guangdong 518117 + CN + +-00-18-48 (hex) Vecima Networks Inc. +-001848 (base 16) Vecima Networks Inc. +- 150 Cardinal Place +- Saskatoon SK S7L 6H7 +- CA +- +-2C-55-3C (hex) Vecima Networks Inc. +-2C553C (base 16) Vecima Networks Inc. +- 150 Cardinal Place +- Saskatoon SK S7L 6H7 +- CA +- + 60-95-BD (hex) Apple, Inc. + 6095BD (base 16) Apple, Inc. + 1 Infinite Loop +@@ -75938,24 +75989,30 @@ D0989C (base 16) ConMet + Vancouver WA 98661 + US + ++1C-A4-10 (hex) Amlogic, Inc. ++1CA410 (base 16) Amlogic, Inc. ++ 2518 Mission College Blvd, Suite 120 ++ Santa Clara CA 95054 ++ US ++ + 24-26-D6 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 2426D6 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + ++70-A6-BD (hex) Honor Device Co., Ltd. ++70A6BD (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN ++ + EC-81-9C (hex) HUAWEI TECHNOLOGIES CO.,LTD + EC819C (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-1C-A4-10 (hex) Amlogic, Inc. +-1CA410 (base 16) Amlogic, Inc. +- 2518 Mission College Blvd, Suite 120 +- Santa Clara CA 95054 +- US +- + 20-0B-16 (hex) Texas Instruments + 200B16 (base 16) Texas Instruments + 12500 TI Blvd +@@ -75980,23 +76037,23 @@ F85548 (base 16) Texas Instruments + Dallas TX 75243 + US + +-70-A6-BD (hex) Honor Device Co., Ltd. +-70A6BD (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 +- CN +- + 4C-9E-6C (hex) BROADEX TECHNOLOGIES CO.LTD + 4C9E6C (base 16) BROADEX TECHNOLOGIES CO.LTD + NO.306 YATAI ROAD + JIAXING ZHEJIANG 314006 + CN + +-54-2F-04 (hex) Shanghai Longcheer Technology Co., Ltd. +-542F04 (base 16) Shanghai Longcheer Technology Co., Ltd. +- Bldg 1,No.401,Caobao RD,Xuhui Dist +- Shanghai 200233 +- CN ++AC-A3-2F (hex) Solidigm Technology ++ACA32F (base 16) Solidigm Technology ++ 1921 Corporate Center Circle, Suite 3B ++ Longmont 80501 ++ US ++ ++AC-71-2E (hex) Fortinet, Inc. ++AC712E (base 16) Fortinet, Inc. ++ 899 Kifer Road ++ Sunnyvale 94086 ++ US + + E4-B6-33 (hex) Wuxi Stars Microsystem Technology Co., Ltd + E4B633 (base 16) Wuxi Stars Microsystem Technology Co., Ltd +@@ -76016,10 +76073,16 @@ E4B633 (base 16) Wuxi Stars Microsystem Technology Co., Ltd + Dongguan Guangdong 523808 + CN + +-54-E1-5B (hex) Huawei Device Co., Ltd. +-54E15B (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++98-D9-3D (hex) Demant Enterprise A/S ++98D93D (base 16) Demant Enterprise A/S ++ Kongebakken 9 ++ Smorum 2765 ++ DK ++ ++B4-A6-78 (hex) Zhejiang Tmall Technology Co., Ltd. ++B4A678 (base 16) Zhejiang Tmall Technology Co., Ltd. ++ No.969 Wenyi West Road, Wuchang Street, Yuhang District ++ Hangzhou Zhejiang 310024 + CN + + AC-C4-BD (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +@@ -76028,11 +76091,17 @@ ACC4BD (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + DONG GUAN GUANG DONG 523860 + CN + +-AC-A3-2F (hex) Solidigm Technology +-ACA32F (base 16) Solidigm Technology +- 1921 Corporate Center Circle, Suite 3B +- Longmont 80501 +- US ++54-E1-5B (hex) Huawei Device Co., Ltd. ++54E15B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++54-2F-04 (hex) Shanghai Longcheer Technology Co., Ltd. ++542F04 (base 16) Shanghai Longcheer Technology Co., Ltd. ++ Bldg 1,No.401,Caobao RD,Xuhui Dist ++ Shanghai 200233 ++ CN + + C4-A1-0E (hex) IEEE Registration Authority + C4A10E (base 16) IEEE Registration Authority +@@ -76040,12 +76109,6 @@ C4A10E (base 16) IEEE Registration Authority + Piscataway NJ 08554 + US + +-AC-71-2E (hex) Fortinet, Inc. +-AC712E (base 16) Fortinet, Inc. +- 899 Kifer Road +- Sunnyvale 94086 +- US +- + 0C-EC-84 (hex) Shenzhen TINNO Mobile Technology Corp. + 0CEC84 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili +@@ -76076,18 +76139,6 @@ B43939 (base 16) Shenzhen TINNO Mobile Technology Corp. + HongKong 999077 + HK + +-98-D9-3D (hex) Demant Enterprise A/S +-98D93D (base 16) Demant Enterprise A/S +- Kongebakken 9 +- Smorum 2765 +- DK +- +-B4-A6-78 (hex) Zhejiang Tmall Technology Co., Ltd. +-B4A678 (base 16) Zhejiang Tmall Technology Co., Ltd. +- No.969 Wenyi West Road, Wuchang Street, Yuhang District +- Hangzhou Zhejiang 310024 +- CN +- + 88-F2-BD (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. + 88F2BD (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. + Midea Global Innovation Center,Beijiao Town,Shunde +@@ -76106,6 +76157,12 @@ A0F895 (base 16) Shenzhen TINNO Mobile Technology Corp. + NEW DELHI DELHI 110015 + IN + ++70-AC-08 (hex) Silicon Laboratories ++70AC08 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez Street ++ Austin TX 78701 ++ US ++ + 2C-07-F6 (hex) SKG Health Technologies Co., Ltd. + 2C07F6 (base 16) SKG Health Technologies Co., Ltd. + 23A Floor,Building 3,Zhongke R&D Park,No.009,Gaoxin South 1st Road, High-tech Zone Community,Yuehai street, Nanshan District,Shenzhen City,Guangdong Province,P.R.China +@@ -76124,6 +76181,24 @@ A47EFA (base 16) Withings + Issy-les-Moulineaux 92130 + FR + ++3C-26-E4 (hex) Cisco Systems, Inc ++3C26E4 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++38-91-B7 (hex) Cisco Systems, Inc ++3891B7 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++34-5D-A8 (hex) Cisco Systems, Inc ++345DA8 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ + 78-91-DE (hex) Guangdong ACIGA Science&Technology Co.,Ltd + 7891DE (base 16) Guangdong ACIGA Science&Technology Co.,Ltd + L203 Biguiyuan International Club, Beijiao Town, Shunde District +@@ -76136,12 +76211,6 @@ E0806B (base 16) Xiaomi Communications Co Ltd + Beijing Haidian District 100085 + CN + +-70-AC-08 (hex) Silicon Laboratories +-70AC08 (base 16) Silicon Laboratories +- 400 West Cesar Chavez Street +- Austin TX 78701 +- US +- + 70-50-E7 (hex) IEEE Registration Authority + 7050E7 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -76166,24 +76235,6 @@ B0E45C (base 16) Samsung Electronics Co.,Ltd + Suwon Gyeonggi-Do 16677 + KR + +-3C-26-E4 (hex) Cisco Systems, Inc +-3C26E4 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-38-91-B7 (hex) Cisco Systems, Inc +-3891B7 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-34-5D-A8 (hex) Cisco Systems, Inc +-345DA8 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- + BC-4C-A0 (hex) HUAWEI TECHNOLOGIES CO.,LTD + BC4CA0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -76196,6 +76247,18 @@ BC4CA0 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + ++C4-12-EC (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C412EC (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++6C-C2-42 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++6CC242 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ + 68-7F-F0 (hex) TP-Link Corporation Limited + 687FF0 (base 16) TP-Link Corporation Limited + Room 901,9/F.New East Ocean Centre, 9 Science Museum Road +@@ -76214,18 +76277,6 @@ DC360C (base 16) Hitron Technologies. Inc + Bayan Lepas Penang 11900 + MY + +-C4-12-EC (hex) HUAWEI TECHNOLOGIES CO.,LTD +-C412EC (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- +-60-CF-69 (hex) meerecompany +-60CF69 (base 16) meerecompany +- 69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of Korea +- Hwaseong-si 18630 +- KR +- + 4C-62-7B (hex) SmartCow AI Technologies Taiwan Ltd. + 4C627B (base 16) SmartCow AI Technologies Taiwan Ltd. + 16F., No. 102, Songlong Rd., Xinyi Dist., +@@ -76244,18 +76295,6 @@ F82B7F (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + +-40-C3-BC (hex) Huawei Device Co., Ltd. +-40C3BC (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-34-FE-1C (hex) CHOUNG HWA TECH CO.,LTD +-34FE1C (base 16) CHOUNG HWA TECH CO.,LTD +- #31 Jangja-ro, Namdong-gu +- Incheon-si 21532 +- KR +- + D8-68-A0 (hex) Samsung Electronics Co.,Ltd + D868A0 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -76268,10 +76307,10 @@ D868A0 (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-6C-C2-42 (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-6CC242 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 ++40-C3-BC (hex) Huawei Device Co., Ltd. ++40C3BC (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 + CN + + 28-53-E0 (hex) Sintela Ltd +@@ -76280,66 +76319,78 @@ D868A0 (base 16) Samsung Electronics Co.,Ltd + Pill Bristol BS20 0DH + GB + ++60-CF-69 (hex) meerecompany ++60CF69 (base 16) meerecompany ++ 69-12, Jeongmunsongsan-ro, Yanggam-myeon, Hwaseong-si, Gyeonggi-do, Republic of Korea ++ Hwaseong-si 18630 ++ KR ++ ++34-FE-1C (hex) CHOUNG HWA TECH CO.,LTD ++34FE1C (base 16) CHOUNG HWA TECH CO.,LTD ++ #31 Jangja-ro, Namdong-gu ++ Incheon-si 21532 ++ KR ++ + F4-93-9F (hex) Hon Hai Precision Industry Co., Ltd. + F4939F (base 16) Hon Hai Precision Industry Co., Ltd. + GuangDongShenZhen + ShenZhen GuangDong 518109 + CN + +-AC-4E-65 (hex) Fiberhome Telecommunication Technologies Co.,LTD +-AC4E65 (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 ++A4-AE-12 (hex) Hon Hai Precision Industry Co., Ltd. ++A4AE12 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 + CN + ++38-F0-C8 (hex) Logitech ++38F0C8 (base 16) Logitech ++ 7700 Gateway Blvd ++ Newark CA 94560 ++ US ++ + BC-5D-A3 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD + BC5DA3 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD + No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County + Chengdu Sichuan 611330 + CN + +-80-72-15 (hex) SKY UK LIMITED +-807215 (base 16) SKY UK LIMITED ++80-75-1F (hex) SKY UK LIMITED ++80751F (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-B0-3E-51 (hex) SKY UK LIMITED +-B03E51 (base 16) SKY UK LIMITED ++C0-A3-6E (hex) SKY UK LIMITED ++C0A36E (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-80-75-1F (hex) SKY UK LIMITED +-80751F (base 16) SKY UK LIMITED ++00-A3-88 (hex) SKY UK LIMITED ++00A388 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-A4-AE-12 (hex) Hon Hai Precision Industry Co., Ltd. +-A4AE12 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 ++AC-4E-65 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++AC4E65 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 + CN + +-C0-A3-6E (hex) SKY UK LIMITED +-C0A36E (base 16) SKY UK LIMITED ++80-72-15 (hex) SKY UK LIMITED ++807215 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-00-A3-88 (hex) SKY UK LIMITED +-00A388 (base 16) SKY UK LIMITED ++B0-3E-51 (hex) SKY UK LIMITED ++B03E51 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB + +-38-F0-C8 (hex) Logitech +-38F0C8 (base 16) Logitech +- 7700 Gateway Blvd +- Newark CA 94560 +- US +- + 1C-EF-03 (hex) Guangzhou V-SOLUTION Electronic Technology Co., Ltd. + 1CEF03 (base 16) Guangzhou V-SOLUTION Electronic Technology Co., Ltd. + Room 601,Originality Building B2, NO.162 Science Avenue,Science Town +@@ -76352,6 +76403,12 @@ C0A36E (base 16) SKY UK LIMITED + KYOTO KYOTO 601-8501 + JP + ++54-45-38 (hex) Texas Instruments ++544538 (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ + 74-13-EA (hex) Intel Corporate + 7413EA (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -76376,35 +76433,53 @@ B0DCEF (base 16) Intel Corporate + Kulim Kedah 09000 + MY + +-28-BC-05 (hex) BLU Products Inc +-28BC05 (base 16) BLU Products Inc +- 10814 NW 33rd Street +- Miami FL 33172 +- US +- + 2C-A7-74 (hex) Texas Instruments + 2CA774 (base 16) Texas Instruments + 12500 TI Blvd + Dallas TX 75243 + US + ++DC-F3-1C (hex) Texas Instruments ++DCF31C (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 ++ US ++ ++28-BC-05 (hex) BLU Products Inc ++28BC05 (base 16) BLU Products Inc ++ 10814 NW 33rd Street ++ Miami FL 33172 ++ US ++ + 18-4E-03 (hex) HMD Global Oy + 184E03 (base 16) HMD Global Oy + Bertel Jungin aukio 9 + Espoo 02600 + FI + ++40-22-D8 (hex) Espressif Inc. ++4022D8 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ + E0-08-71 (hex) Dongguan Liesheng Electronic Co., Ltd. + E00871 (base 16) Dongguan Liesheng Electronic Co., Ltd. + F5, Building B, North Block, Gaosheng Tech Park, No. 84 Zhongli Road, Nancheng District, Dongguan Ci + dongguan guangdong 523000 + CN + +-9C-95-6E (hex) Microchip Technology Inc. +-9C956E (base 16) Microchip Technology Inc. +- 2355 W. Chandler Blvd. +- Chandler AZ 85224 +- US ++90-65-60 (hex) EM Microelectronic ++906560 (base 16) EM Microelectronic ++ Rue des Sors 3 ++ Marin-Epagnier Neuchatel 2074 ++ CH ++ ++A0-FB-83 (hex) Honor Device Co., Ltd. ++A0FB83 (base 16) Honor Device Co., Ltd. ++ Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District ++ Shenzhen Guangdong 518040 ++ CN + + DC-0B-09 (hex) Cisco Systems, Inc + DC0B09 (base 16) Cisco Systems, Inc +@@ -76418,17 +76493,17 @@ DC0B09 (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-DC-F3-1C (hex) Texas Instruments +-DCF31C (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 ++88-0A-A3 (hex) Juniper Networks ++880AA3 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 + US + +-54-45-38 (hex) Texas Instruments +-544538 (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US ++04-D9-C8 (hex) Hon Hai Precision Industry Co., Ltd. ++04D9C8 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN + + 78-C2-13 (hex) Sagemcom Broadband SAS + 78C213 (base 16) Sagemcom Broadband SAS +@@ -76436,12 +76511,6 @@ DCF31C (base 16) Texas Instruments + Rueil Malmaison Cedex hauts de seine 92848 + FR + +-40-22-D8 (hex) Espressif Inc. +-4022D8 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- + A0-36-BC (hex) ASUSTek COMPUTER INC. + A036BC (base 16) ASUSTek COMPUTER INC. + 15,Li-Te Rd., Peitou, Taipei 112, Taiwan +@@ -76454,72 +76523,48 @@ A036BC (base 16) ASUSTek COMPUTER INC. + Cranbrook British Columbia V1C 2L9 + CA + ++9C-95-6E (hex) Microchip Technology Inc. ++9C956E (base 16) Microchip Technology Inc. ++ 2355 W. Chandler Blvd. ++ Chandler AZ 85224 ++ US ++ + 84-0B-BB (hex) MitraStar Technology Corp. + 840BBB (base 16) MitraStar Technology Corp. + No. 6, Innovation Road II, + Hsinchu 300 + TW + +-04-D9-C8 (hex) Hon Hai Precision Industry Co., Ltd. +-04D9C8 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- +-A0-FB-83 (hex) Honor Device Co., Ltd. +-A0FB83 (base 16) Honor Device Co., Ltd. +- Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District +- Shenzhen Guangdong 518040 +- CN +- +-9C-92-4F (hex) Apple, Inc. +-9C924F (base 16) Apple, Inc. ++70-B3-06 (hex) Apple, Inc. ++70B306 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-20-0E-2B (hex) Apple, Inc. +-200E2B (base 16) Apple, Inc. ++B8-49-6D (hex) Apple, Inc. ++B8496D (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-F0-D7-93 (hex) Apple, Inc. +-F0D793 (base 16) Apple, Inc. ++9C-92-4F (hex) Apple, Inc. ++9C924F (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-70-B3-06 (hex) Apple, Inc. +-70B306 (base 16) Apple, Inc. ++20-0E-2B (hex) Apple, Inc. ++200E2B (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-B8-49-6D (hex) Apple, Inc. +-B8496D (base 16) Apple, Inc. ++F0-D7-93 (hex) Apple, Inc. ++F0D793 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-90-65-60 (hex) EM Microelectronic +-906560 (base 16) EM Microelectronic +- Rue des Sors 3 +- Marin-Epagnier Neuchatel 2074 +- CH +- +-88-0A-A3 (hex) Juniper Networks +-880AA3 (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 +- US +- +-30-3D-51 (hex) IEEE Registration Authority +-303D51 (base 16) IEEE Registration Authority +- 445 Hoes Lane +- Piscataway NJ 08554 +- US +- + CC-D3-C1 (hex) Vestel Elektronik San ve Tic. A.S. + CCD3C1 (base 16) Vestel Elektronik San ve Tic. A.S. + Organize san +@@ -76532,12 +76577,48 @@ ECBE5F (base 16) Vestel Elektronik San ve Tic. A.S. + Manisa Turket 45030 + TR + ++A8-DC-5A (hex) Digital Watchdog ++A8DC5A (base 16) Digital Watchdog ++ 16220 Bloomfield Ave ++ Cerritos CA 90703 ++ US ++ ++1C-24-CD (hex) ASKEY COMPUTER CORP ++1C24CD (base 16) ASKEY COMPUTER CORP ++ 10F, No.119, JIANKANG RD.,ZHINGHE DIST, ++ NEW TAIPEI CITY 23585 ++ TW ++ ++30-3D-51 (hex) IEEE Registration Authority ++303D51 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ ++00-FB-F9 (hex) Axiado Corporation ++00FBF9 (base 16) Axiado Corporation ++ 2610 Orchard Parkway, Suite 300 ++ San Jose CA 95134 ++ US ++ ++44-71-47 (hex) Beijing Xiaomi Electronics Co.,Ltd ++447147 (base 16) Beijing Xiaomi Electronics Co.,Ltd ++ Xiaomi Campus ++ Beijing Beijing 100085 ++ CN ++ + F4-BB-C7 (hex) vivo Mobile Communication Co., Ltd. + F4BBC7 (base 16) vivo Mobile Communication Co., Ltd. + No.1, vivo Road, Chang'an + Dongguan Guangdong 523860 + CN + ++DC-AA-43 (hex) Shenzhen Terca Information Technology Co., Ltd. ++DCAA43 (base 16) Shenzhen Terca Information Technology Co., Ltd. ++ Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen ++ SHENZHEN GUANGDONG 518000 ++ CN ++ + 4C-36-4E (hex) Panasonic Connect Co., Ltd. + 4C364E (base 16) Panasonic Connect Co., Ltd. + 4-1-62 Minoshima, Hakata-ku +@@ -76550,34 +76631,34 @@ F4BBC7 (base 16) vivo Mobile Communication Co., Ltd. + shenzhen guangdong 518057 + CN + +-44-71-47 (hex) Beijing Xiaomi Electronics Co.,Ltd +-447147 (base 16) Beijing Xiaomi Electronics Co.,Ltd +- Xiaomi Campus +- Beijing Beijing 100085 +- CN +- +-A8-DC-5A (hex) Digital Watchdog +-A8DC5A (base 16) Digital Watchdog +- 16220 Bloomfield Ave +- Cerritos CA 90703 +- US ++88-B4-36 (hex) FUJIFILM Corporation ++88B436 (base 16) FUJIFILM Corporation ++ 1-324,Uetake,Kita-ku ++ Saitama Saitama 331-9624 ++ JP + +-1C-24-CD (hex) ASKEY COMPUTER CORP +-1C24CD (base 16) ASKEY COMPUTER CORP +- 10F, No.119, JIANKANG RD.,ZHINGHE DIST, +- NEW TAIPEI CITY 23585 +- TW ++30-27-CF (hex) Canopy Growth Corp ++3027CF (base 16) Canopy Growth Corp ++ 350 Leggett Drive ++ Ottawa Ontario K2K 2W7 ++ CA + +-DC-AA-43 (hex) Shenzhen Terca Information Technology Co., Ltd. +-DCAA43 (base 16) Shenzhen Terca Information Technology Co., Ltd. +- Room1401, Block A, Building 12 , Shenzhen Bay Technology and Eco-Park , No. 18 Keji South Road , Nanshan District , Shenzhen +- SHENZHEN GUANGDONG 518000 ++38-A8-9B (hex) Fiberhome Telecommunication Technologies Co.,LTD ++38A89B (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 + CN + +-00-FB-F9 (hex) Axiado Corporation +-00FBF9 (base 16) Axiado Corporation +- 2610 Orchard Parkway, Suite 300 +- San Jose CA 95134 ++64-37-A4 (hex) TOKYOSHUHA CO.,LTD. ++6437A4 (base 16) TOKYOSHUHA CO.,LTD. ++ 1-8-9 KANDAIZUMICHO ++ CHIYODA-KU TOKYO 101-0024 ++ JP ++ ++90-CA-FA (hex) Google, Inc. ++90CAFA (base 16) Google, Inc. ++ 1600 Amphitheatre Parkway ++ Mountain View CA 94043 + US + + 84-80-94 (hex) Meter, Inc. +@@ -113867,24 +113948,6 @@ B4B742 (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-50-C1-F0 (hex) NXP Semiconductor (Tianjin) LTD. +-50C1F0 (base 16) NXP Semiconductor (Tianjin) LTD. +- No.15 Xinghua Avenue, Xiqing Economic Development Area +- Tianjin 300385 +- CN +- +-F4-84-8D (hex) TP-LINK TECHNOLOGIES CO.,LTD. +-F4848D (base 16) TP-LINK TECHNOLOGIES CO.,LTD. +- Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan +- Shenzhen Guangdong 518057 +- CN +- +-58-11-22 (hex) ASUSTek COMPUTER INC. +-581122 (base 16) ASUSTek COMPUTER INC. +- 15,Li-Te Rd., Peitou, Taipei 112, Taiwan +- Taipei Taiwan 112 +- TW +- + 60-BE-B4 (hex) S-Bluetech co., limited + 60BEB4 (base 16) S-Bluetech co., limited + Room 202, Block A, Donghai Wang Mansion, 369 Bulonglu +@@ -113897,6 +113960,18 @@ F4848D (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Chongqing China 401120 + CN + ++50-C1-F0 (hex) NXP Semiconductor (Tianjin) LTD. ++50C1F0 (base 16) NXP Semiconductor (Tianjin) LTD. ++ No.15 Xinghua Avenue, Xiqing Economic Development Area ++ Tianjin 300385 ++ CN ++ ++F4-84-8D (hex) TP-LINK TECHNOLOGIES CO.,LTD. ++F4848D (base 16) TP-LINK TECHNOLOGIES CO.,LTD. ++ Building 24(floors 1,3,4,5)and 28(floors 1-4)Central Science and Technology Park,Shennan Road,Nanshan ++ Shenzhen Guangdong 518057 ++ CN ++ + A8-54-A2 (hex) Heimgard Technologies AS + A854A2 (base 16) Heimgard Technologies AS + Dronning Mauds gate 15 +@@ -113921,11 +113996,11 @@ B87EE5 (base 16) Intelbras + São José Santa Catarina 88104800 + BR + +-94-AB-FE (hex) Nokia +-94ABFE (base 16) Nokia +- 600 March Road +- Kanata Ontario K2K 2E6 +- CA ++58-11-22 (hex) ASUSTek COMPUTER INC. ++581122 (base 16) ASUSTek COMPUTER INC. ++ 15,Li-Te Rd., Peitou, Taipei 112, Taiwan ++ Taipei Taiwan 112 ++ TW + + 74-69-4A (hex) Sichuan Tianyi Comheart Telecom Co.,LTD + 74694A (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +@@ -113939,6 +114014,12 @@ B87EE5 (base 16) Intelbras + shenzhen 518000 + CN + ++94-AB-FE (hex) Nokia ++94ABFE (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ + 98-A9-2D (hex) New H3C Technologies Co., Ltd + 98A92D (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District +@@ -113963,18 +114044,6 @@ B87EE5 (base 16) Intelbras + Austin TX 78759 + US + +-E0-03-6B (hex) Samsung Electronics Co.,Ltd +-E0036B (base 16) Samsung Electronics Co.,Ltd +- 129, Samsung-ro, Youngtongl-Gu +- Suwon Gyeonggi-Do 16677 +- KR +- +-18-69-D4 (hex) Samsung Electronics Co.,Ltd +-1869D4 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- + D4-F0-EA (hex) Beijing Xiaomi Mobile Software Co., Ltd + D4F0EA (base 16) Beijing Xiaomi Mobile Software Co., Ltd + The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District +@@ -113987,6 +114056,12 @@ D4F0EA (base 16) Beijing Xiaomi Mobile Software Co., Ltd + Suzhou 215021 + CN + ++E0-03-6B (hex) Samsung Electronics Co.,Ltd ++E0036B (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ + 80-69-1A (hex) Belkin International Inc. + 80691A (base 16) Belkin International Inc. + 12045 East Waterfront Drive +@@ -114041,18 +114116,6 @@ E046EE (base 16) NETGEAR + San Jose CA 95134 + US + +-DC-BE-49 (hex) ITEL MOBILE LIMITED +-DCBE49 (base 16) ITEL MOBILE LIMITED +- RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K +- Hong Kong KOWLOON 999077 +- HK +- +-9C-95-61 (hex) Hui Zhou Gaoshengda Technology Co.,LTD +-9C9561 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD +- No.75,Zhongkai High-Tech Development District,Huizhou +- Hui Zhou Guangdong 516006 +- CN +- + 9C-4F-5F (hex) Google, Inc. + 9C4F5F (base 16) Google, Inc. + 15 rue Castel +@@ -114071,24 +114134,36 @@ A02942 (base 16) Intel Corporate + Hsichu Taiwan 300 + TW + ++04-63-D0 (hex) Huawei Device Co., Ltd. ++0463D0 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ + F0-D4-15 (hex) Intel Corporate + F0D415 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 + Kulim Kedah 09000 + MY + +-D4-D8-53 (hex) Intel Corporate +-D4D853 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++18-69-D4 (hex) Samsung Electronics Co.,Ltd ++1869D4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR + +-04-63-D0 (hex) Huawei Device Co., Ltd. +-0463D0 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++9C-95-61 (hex) Hui Zhou Gaoshengda Technology Co.,LTD ++9C9561 (base 16) Hui Zhou Gaoshengda Technology Co.,LTD ++ No.75,Zhongkai High-Tech Development District,Huizhou ++ Hui Zhou Guangdong 516006 + CN + ++DC-BE-49 (hex) ITEL MOBILE LIMITED ++DCBE49 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK ++ + 14-44-8F (hex) Edgecore Networks Corporation + 14448F (base 16) Edgecore Networks Corporation + 1 Creation RD 3. +@@ -114101,18 +114176,6 @@ D4D853 (base 16) Intel Corporate + Reno NV 89507 + US + +-C0-ED-E5 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +-C0EDE5 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +- NO.18 HAIBIN ROAD, +- DONG GUAN GUANG DONG 523860 +- CN +- +-10-A5-62 (hex) Iton Technology Corp. +-10A562 (base 16) Iton Technology Corp. +- Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District +- Shenzhen Guangdong 518116 +- CN +- + D4-A3-EB (hex) Shenzhen iComm Semiconductor CO.,LTD + D4A3EB (base 16) Shenzhen iComm Semiconductor CO.,LTD + Room 601,Block B ,Digital Building,Garden City +@@ -114143,6 +114206,12 @@ B89FCC (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Kanata Ontario K2K 2E6 + CA + ++D4-D8-53 (hex) Intel Corporate ++D4D853 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + 8C-76-3F (hex) ARRIS Group, Inc. + 8C763F (base 16) ARRIS Group, Inc. + 6450 Sequence Drive +@@ -114161,6 +114230,18 @@ C0A938 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + ++C0-ED-E5 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++C0EDE5 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ ++10-A5-62 (hex) Iton Technology Corp. ++10A562 (base 16) Iton Technology Corp. ++ Room 1302, Block A, Building 4, Tianan Cyber Park, Huangge Road,Longgang District ++ Shenzhen Guangdong 518116 ++ CN ++ + 5C-24-E2 (hex) Suzhou Denbom Electronic S&T Co., Ltd + 5C24E2 (base 16) Suzhou Denbom Electronic S&T Co., Ltd + 3F,Building 2, No.415,Changyang Street +@@ -114197,6 +114278,12 @@ BCC746 (base 16) Hon Hai Precision IND.CO.,LTD + New Taipei City Banqiao Dist. 220871 + TW + ++64-FD-96 (hex) Sagemcom Broadband SAS ++64FD96 (base 16) Sagemcom Broadband SAS ++ 250, route de l'Empereur ++ Rueil Malmaison Cedex hauts de seine 92848 ++ FR ++ + FC-B9-7E (hex) GE Appliances + FCB97E (base 16) GE Appliances + 4000 Buechel Bank Road +@@ -114215,12 +114302,6 @@ FCB97E (base 16) GE Appliances + Beijing 100089 + CN + +-64-FD-96 (hex) Sagemcom Broadband SAS +-64FD96 (base 16) Sagemcom Broadband SAS +- 250, route de l'Empereur +- Rueil Malmaison Cedex hauts de seine 92848 +- FR +- + C8-EB-EC (hex) Shenzhen YOUHUA Technology Co., Ltd + C8EBEC (base 16) Shenzhen YOUHUA Technology Co., Ltd + Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District +@@ -114233,24 +114314,6 @@ C8EBEC (base 16) Shenzhen YOUHUA Technology Co., Ltd + New Taipei City Taiwan 235 + TW + +-94-C5-A6 (hex) ITEL MOBILE LIMITED +-94C5A6 (base 16) ITEL MOBILE LIMITED +- RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K +- Hong Kong KOWLOON 999077 +- HK +- +-7C-EC-B1 (hex) Apple, Inc. +-7CECB1 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- +-5C-E9-1E (hex) Apple, Inc. +-5CE91E (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- + E0-D7-38 (hex) WireStar Networks + E0D738 (base 16) WireStar Networks + PO Box 10966 +@@ -114269,23 +114332,29 @@ E0D738 (base 16) WireStar Networks + SHANGHAI 201114 + CN + ++7C-EC-B1 (hex) Apple, Inc. ++7CECB1 (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ ++5C-E9-1E (hex) Apple, Inc. ++5CE91E (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US ++ + A8-B0-AE (hex) BizLink Special Cables Germany GmbH + A8B0AE (base 16) BizLink Special Cables Germany GmbH + Eschstrasse 1 + Friesoythe 26169 + DE + +-F0-B6-61 (hex) eero inc. +-F0B661 (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 +- US +- +-E0-6A-05 (hex) Shenzhen YOUHUA Technology Co., Ltd +-E06A05 (base 16) Shenzhen YOUHUA Technology Co., Ltd +- Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District +- Shenzhen Guangdong 518055 +- CN ++94-C5-A6 (hex) ITEL MOBILE LIMITED ++94C5A6 (base 16) ITEL MOBILE LIMITED ++ RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K ++ Hong Kong KOWLOON 999077 ++ HK + + 48-57-D2 (hex) Broadcom Limited + 4857D2 (base 16) Broadcom Limited +@@ -114311,6 +114380,12 @@ D834EE (base 16) SHURE INCORPORATED + NILES IL 60714 + US + ++F0-B6-61 (hex) eero inc. ++F0B661 (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ + 04-25-F0 (hex) Nokia + 0425F0 (base 16) Nokia + 600 March Road +@@ -114323,16 +114398,10 @@ D834EE (base 16) SHURE INCORPORATED + Kyoto 619-0237 + JP + +-40-3B-7B (hex) Huawei Device Co., Ltd. +-403B7B (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-08-30-CE (hex) Fiberhome Telecommunication Technologies Co.,LTD +-0830CE (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 ++E0-6A-05 (hex) Shenzhen YOUHUA Technology Co., Ltd ++E06A05 (base 16) Shenzhen YOUHUA Technology Co., Ltd ++ Room 407 Shenzhen University-town Business Park,Lishan Road,Taoyuan Street,Nanshan District ++ Shenzhen Guangdong 518055 + CN + + 90-CD-1F (hex) Quectel Wireless Solutions Co.,Ltd. +@@ -114365,6 +114434,18 @@ D834EE (base 16) SHURE INCORPORATED + Rueil Malmaison Cedex hauts de seine 92848 + FR + ++40-3B-7B (hex) Huawei Device Co., Ltd. ++403B7B (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++08-30-CE (hex) Fiberhome Telecommunication Technologies Co.,LTD ++0830CE (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ + B0-A2-E7 (hex) Shenzhen TINNO Mobile Technology Corp. + B0A2E7 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili +@@ -114383,24 +114464,12 @@ BC4101 (base 16) Shenzhen TINNO Mobile Technology Corp. + Nanshan District, Shenzhen PRC 518053 + CN + +-18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp. +-18D61C (base 16) Shenzhen TINNO Mobile Technology Corp. +- Building, No.33, Xiandong Rd, Xili +- Nanshan District, Shenzhen PRC 518053 +- CN +- + 74-97-79 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + 749779 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. + B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China + Nanning Guangxi 530007 + CN + +-34-CF-6C (hex) Hangzhou Taili wireless communication equipment Co.,Ltd +-34CF6C (base 16) Hangzhou Taili wireless communication equipment Co.,Ltd +- Room 1901, No.258, Zhonghe Middle Road, Shangcheng District, Hangzhou +- Hangzhou Zhejiang 310003 +- CN +- + F8-CD-C8 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD + F8CDC8 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD + No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +@@ -114413,10 +114482,16 @@ B0285B (base 16) JUHUA Technology Inc. + Shenzhen City Guangdong Province 518117 + CN + +-C8-24-96 (hex) Jiangsu Yinhe Electronics Co.,Ltd. +-C82496 (base 16) Jiangsu Yinhe Electronics Co.,Ltd. +- No.188 Nanhuan Road, TangQiao Town +- Zhangjiagang Jiangsu 215611 ++18-D6-1C (hex) Shenzhen TINNO Mobile Technology Corp. ++18D61C (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 ++ CN ++ ++34-CF-6C (hex) Hangzhou Taili wireless communication equipment Co.,Ltd ++34CF6C (base 16) Hangzhou Taili wireless communication equipment Co.,Ltd ++ Room 1901, No.258, Zhonghe Middle Road, Shangcheng District, Hangzhou ++ Hangzhou Zhejiang 310003 + CN + + E0-F6-78 (hex) Fiberhome Telecommunication Technologies Co.,LTD +@@ -114425,29 +114500,17 @@ E0F678 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + Wuhan Hubei 430074 + CN + +-40-22-30 (hex) Shenzhen SuperElectron Technology Co.,Ltd. +-402230 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. +- 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city +- Shenzhen Guangdong 518000 +- CN +- +-14-5B-B9 (hex) ConMet +-145BB9 (base 16) ConMet +- 5701 SE Columbia Way +- Vancouver WA 98661 +- US +- + 28-F7-D6 (hex) Fiberhome Telecommunication Technologies Co.,LTD + 28F7D6 (base 16) Fiberhome Telecommunication Technologies Co.,LTD + No.5 DongXin Road + Wuhan Hubei 430074 + CN + +-B8-B4-09 (hex) Samsung Electronics Co.,Ltd +-B8B409 (base 16) Samsung Electronics Co.,Ltd +- 129, Samsung-ro, Youngtongl-Gu +- Suwon Gyeonggi-Do 16677 +- KR ++C8-24-96 (hex) Jiangsu Yinhe Electronics Co.,Ltd. ++C82496 (base 16) Jiangsu Yinhe Electronics Co.,Ltd. ++ No.188 Nanhuan Road, TangQiao Town ++ Zhangjiagang Jiangsu 215611 ++ CN + + 24-18-C0 (hex) E. Wehrle GmbH + 2418C0 (base 16) E. Wehrle GmbH +@@ -114455,6 +114518,12 @@ B8B409 (base 16) Samsung Electronics Co.,Ltd + 78120 Furtwangen Baden-Württemberg 78120 + DE + ++14-5B-B9 (hex) ConMet ++145BB9 (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US ++ + AC-83-F0 (hex) Cobalt Digital Inc. + AC83F0 (base 16) Cobalt Digital Inc. + 2506 Galen Drive +@@ -114467,12 +114536,6 @@ AC15A2 (base 16) TP-Link Corporation Limited + Tsim Sha Tsui Kowloon 999077 + HK + +-AC-DF-9F (hex) Arcadyan Corporation +-ACDF9F (base 16) Arcadyan Corporation +- No.8, Sec.2, Guangfu Rd. +- Hsinchu City Hsinchu 30071 +- TW +- + B8-59-C8 (hex) 70mai Co.,Ltd. + B859C8 (base 16) 70mai Co.,Ltd. + Room 2220, building 2, No. 588, Zixing road +@@ -114485,11 +114548,23 @@ A8E207 (base 16) GOIP Global Services Pvt. Ltd. + Noida Uttar Pradesh 201301 + IN + +-74-E7-98 (hex) Juniper Networks +-74E798 (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 +- US ++40-22-30 (hex) Shenzhen SuperElectron Technology Co.,Ltd. ++402230 (base 16) Shenzhen SuperElectron Technology Co.,Ltd. ++ 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city ++ Shenzhen Guangdong 518000 ++ CN ++ ++B8-B4-09 (hex) Samsung Electronics Co.,Ltd ++B8B409 (base 16) Samsung Electronics Co.,Ltd ++ 129, Samsung-ro, Youngtongl-Gu ++ Suwon Gyeonggi-Do 16677 ++ KR ++ ++AC-DF-9F (hex) Arcadyan Corporation ++ACDF9F (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW + + D4-E2-2F (hex) Roku, Inc + D4E22F (base 16) Roku, Inc +@@ -114527,6 +114602,18 @@ C43CB0 (base 16) SHENZHEN BILIAN ELECTRONIC CO.,LTD + Mianyang Sichuan 622650 + CN + ++D8-7E-6F (hex) CASCINATION AG ++D87E6F (base 16) CASCINATION AG ++ Steigerhubelstrasse 3 ++ Bern Bern 3008 ++ CH ++ ++04-4F-7A (hex) China Mobile Group Device Co.,Ltd. ++044F7A (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ + 40-5E-F6 (hex) Samsung Electronics Co.,Ltd + 405EF6 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -114551,29 +114638,23 @@ C43CB0 (base 16) SHENZHEN BILIAN ELECTRONIC CO.,LTD + Reno NV 89507 + US + +-04-4F-7A (hex) China Mobile Group Device Co.,Ltd. +-044F7A (base 16) China Mobile Group Device Co.,Ltd. +- 32 Xuanwumen West Street,Xicheng District +- Beijing 100053 +- CN +- + C0-4E-30 (hex) Espressif Inc. + C04E30 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area + Shanghai Shanghai 201203 + CN + +-AC-60-6F (hex) Nokia Shanghai Bell Co., Ltd. +-AC606F (base 16) Nokia Shanghai Bell Co., Ltd. +- No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai +- Shanghai 201206 +- CN ++74-E7-98 (hex) Juniper Networks ++74E798 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US + +-D8-7E-6F (hex) CASCINATION AG +-D87E6F (base 16) CASCINATION AG +- Steigerhubelstrasse 3 +- Bern Bern 3008 +- CH ++E0-16-B1 (hex) Advanced Design Technology co.,ltd. ++E016B1 (base 16) Advanced Design Technology co.,ltd. ++ 1-1-3 Kotobukicho#10F Mitsukikotobukichobiru ++ Fucyu-city Tokyo 1830056 ++ JP + + 54-31-D4 (hex) TGW Mechanics GmbH + 5431D4 (base 16) TGW Mechanics GmbH +@@ -114587,17 +114668,17 @@ D87E6F (base 16) CASCINATION AG + Wuhan Hubei 430206 + CN + +-00-19-FB (hex) SKY UK LIMITED +-0019FB (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB ++C0-69-11 (hex) Arista Networks ++C06911 (base 16) Arista Networks ++ 5453 Great America Parkway ++ Santa Clara CA 95054 ++ US + +-78-3E-53 (hex) SKY UK LIMITED +-783E53 (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB ++E4-B5-55 (hex) Huawei Device Co., Ltd. ++E4B555 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN + + 24-A7-DC (hex) SKY UK LIMITED + 24A7DC (base 16) SKY UK LIMITED +@@ -114605,32 +114686,26 @@ D87E6F (base 16) CASCINATION AG + Brentwood Essex 08854 + GB + +-E0-16-B1 (hex) Advanced Design Technology co.,ltd. +-E016B1 (base 16) Advanced Design Technology co.,ltd. +- 1-1-3 Kotobukicho#10F Mitsukikotobukichobiru +- Fucyu-city Tokyo 1830056 +- JP ++38-A6-CE (hex) SKY UK LIMITED ++38A6CE (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB + +-E4-B5-55 (hex) Huawei Device Co., Ltd. +-E4B555 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++AC-60-6F (hex) Nokia Shanghai Bell Co., Ltd. ++AC606F (base 16) Nokia Shanghai Bell Co., Ltd. ++ No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai ++ Shanghai 201206 + CN + +-C0-69-11 (hex) Arista Networks +-C06911 (base 16) Arista Networks +- 5453 Great America Parkway +- Santa Clara CA 95054 +- US +- +-2C-93-FB (hex) Sercomm France Sarl +-2C93FB (base 16) Sercomm France Sarl +- 2/4 Rue Maurice Hartmann 92370 Issy Les Moulineaux France +- Moulineaux 92370 +- FR ++00-19-FB (hex) SKY UK LIMITED ++0019FB (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB + +-38-A6-CE (hex) SKY UK LIMITED +-38A6CE (base 16) SKY UK LIMITED ++78-3E-53 (hex) SKY UK LIMITED ++783E53 (base 16) SKY UK LIMITED + 130 Kings Road + Brentwood Essex 08854 + GB +@@ -114719,11 +114794,11 @@ BC69CB (base 16) Panasonic Electric Works Networks Co., Ltd. + Kulim Kedah 09000 + MY + +-58-2B-0A (hex) Texas Instruments +-582B0A (base 16) Texas Instruments +- 12500 TI Blvd +- Dallas TX 75243 +- US ++2C-93-FB (hex) Sercomm France Sarl ++2C93FB (base 16) Sercomm France Sarl ++ 2/4 Rue Maurice Hartmann 92370 Issy Les Moulineaux France ++ Moulineaux 92370 ++ FR + + B4-46-6B (hex) REALTIMEID AS + B4466B (base 16) REALTIMEID AS +@@ -114731,6 +114806,12 @@ B4466B (base 16) REALTIMEID AS + Snåsa 7760 + NO + ++90-6A-EB (hex) Microsoft Corporation ++906AEB (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ + C4-EB-39 (hex) Sagemcom Broadband SAS + C4EB39 (base 16) Sagemcom Broadband SAS + 250, route de l'Empereur +@@ -114743,11 +114824,17 @@ C4EB39 (base 16) Sagemcom Broadband SAS + Taipei City 10690 + TW + +-F0-C1-CE (hex) GoodWe Technologies CO., Ltd +-F0C1CE (base 16) GoodWe Technologies CO., Ltd +- No.90 Zijin Rd.,New District,Suzhou,215011,China +- Suzhou JiangSu 215011 +- CN ++08-9D-F4 (hex) Intel Corporate ++089DF4 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++DC-46-28 (hex) Intel Corporate ++DC4628 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + + 0C-91-92 (hex) Intel Corporate + 0C9192 (base 16) Intel Corporate +@@ -114767,24 +114854,24 @@ F0C1CE (base 16) GoodWe Technologies CO., Ltd + Shenzhen 518000 + CN + +-08-9D-F4 (hex) Intel Corporate +-089DF4 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- +-DC-46-28 (hex) Intel Corporate +-DC4628 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++F0-C1-CE (hex) GoodWe Technologies CO., Ltd ++F0C1CE (base 16) GoodWe Technologies CO., Ltd ++ No.90 Zijin Rd.,New District,Suzhou,215011,China ++ Suzhou JiangSu 215011 ++ CN + +-90-6A-EB (hex) Microsoft Corporation +-906AEB (base 16) Microsoft Corporation +- One Microsoft Way +- REDMOND WA 98052 ++58-2B-0A (hex) Texas Instruments ++582B0A (base 16) Texas Instruments ++ 12500 TI Blvd ++ Dallas TX 75243 + US + ++D8-E8-44 (hex) zte corporation ++D8E844 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ + E4-6A-35 (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + E46A35 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. +@@ -114809,18 +114896,6 @@ E838A0 (base 16) Vizio, Inc + Irvine CA 92618 + US + +-EC-C0-7A (hex) Laird Connectivity +-ECC07A (base 16) Laird Connectivity +- 3F.-1, No.145, Xianzheng 9th Rd., +- Zhubei 30251 +- TW +- +-68-B9-C2 (hex) Earda Technologies co Ltd +-68B9C2 (base 16) Earda Technologies co Ltd +- Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District +- Guangzhou Guangdong 511455 +- CN +- + C8-1E-C2 (hex) ITEL MOBILE LIMITED + C81EC2 (base 16) ITEL MOBILE LIMITED + RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING NO.7 KO FAI ROAD, YAU TONG, KLN, H.K +@@ -114833,10 +114908,10 @@ C81EC2 (base 16) ITEL MOBILE LIMITED + Hui Zhou Guangdong 516025 + CN + +-D8-E8-44 (hex) zte corporation +-D8E844 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++68-B9-C2 (hex) Earda Technologies co Ltd ++68B9C2 (base 16) Earda Technologies co Ltd ++ Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District ++ Guangzhou Guangdong 511455 + CN + + 68-83-CB (hex) Apple, Inc. +@@ -114857,11 +114932,11 @@ FC1263 (base 16) ASKEY COMPUTER CORP + Shanghai Shanghai 201114 + CN + +-C0-71-AA (hex) ShenZhen OnMicro Electronics Co.,Ltd. +-C071AA (base 16) ShenZhen OnMicro Electronics Co.,Ltd. +- Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District +- Shenzhen GuangDong 518057 +- CN ++EC-C0-7A (hex) Laird Connectivity ++ECC07A (base 16) Laird Connectivity ++ 3F.-1, No.145, Xianzheng 9th Rd., ++ Zhubei 30251 ++ TW + + 9C-05-91 (hex) Mellanox Technologies, Inc. + 9C0591 (base 16) Mellanox Technologies, Inc. +@@ -114869,28 +114944,22 @@ C071AA (base 16) ShenZhen OnMicro Electronics Co.,Ltd. + Sunnyvale CA 94085 + US + +-70-9C-45 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-709C45 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- + 00-09-DF (hex) Vestel Elektronik San ve Tic. A.S. + 0009DF (base 16) Vestel Elektronik San ve Tic. A.S. + Organize san + Manisa Turket 45030 + TR + +-A0-31-31 (hex) Procenne Digital Security +-A03131 (base 16) Procenne Digital Security +- Eski Buyukdere Cd. No:7/12 Maslak +- Istanbul Sariyer 34398 +- TR ++C0-71-AA (hex) ShenZhen OnMicro Electronics Co.,Ltd. ++C071AA (base 16) ShenZhen OnMicro Electronics Co.,Ltd. ++ Room 407-408, West Building, Skyworth Semiconductor Building, GaoXin South 4th Road, Yuehai Street, Nanshan District ++ Shenzhen GuangDong 518057 ++ CN + +-FC-07-36 (hex) Huawei Device Co., Ltd. +-FC0736 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 ++70-9C-45 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++709C45 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + + 94-A0-7D (hex) Huawei Device Co., Ltd. +@@ -114905,6 +114974,66 @@ FC0736 (base 16) Huawei Device Co., Ltd. + New Taipei 23674 + TW + ++FC-07-36 (hex) Huawei Device Co., Ltd. ++FC0736 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++A0-31-31 (hex) Procenne Digital Security ++A03131 (base 16) Procenne Digital Security ++ Eski Buyukdere Cd. No:7/12 Maslak ++ Istanbul Sariyer 34398 ++ TR ++ ++84-F4-4C (hex) International Integrated Systems., Inc. ++84F44C (base 16) International Integrated Systems., Inc. ++ 6F., No.7, Sec. 2, Xianmin Blvd., Banqiao Dist., ++ New Taipei City 22041 ++ TW ++ ++14-2D-79 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++142D79 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 ++ CN ++ ++DC-B7-AC (hex) Aruba, a Hewlett Packard Enterprise Company ++DCB7AC (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++A4-9E-69 (hex) Silicon Laboratories ++A49E69 (base 16) Silicon Laboratories ++ 400 W Cesar Chavez St, Silicon La ++ Austin TX 78701 ++ US ++ ++DC-E6-50 (hex) Extreme Networks, Inc. ++DCE650 (base 16) Extreme Networks, Inc. ++ 6480 Via Del Oro ++ San Jose CA 95119 ++ US ++ ++48-73-10 (hex) Juniper Networks ++487310 (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 ++ US ++ ++7C-DC-CC (hex) Beijing Yixin Techology Co.,Ltd ++7CDCCC (base 16) Beijing Yixin Techology Co.,Ltd ++ Unit 907, Building 4, Building 2, No. 9 Fenghao East Road, Haidian District, Beijing ++ Beijing 100000 ++ CN ++ ++CC-5E-F8 (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++CC5EF8 (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ + F8-D0-27 (hex) Seiko Epson Corporation + F8D027 (base 16) Seiko Epson Corporation + 2070 Kotobuki Koaka +@@ -126533,12 +126662,6 @@ C81B6B (base 16) Innova Security + Sao Paulo Sao Paulo 02033000 + BR + +-34-38-AF (hex) Inlab Software GmbH +-3438AF (base 16) Inlab Software GmbH +- Josef-Wuerth-Str. 3 +- Gruenwald Bavaria 82031 +- DE +- + B4-A8-28 (hex) Shenzhen Concox Information Technology Co., Ltd + B4A828 (base 16) Shenzhen Concox Information Technology Co., Ltd + Floor 4th, Building B, Gaoxinqi Industrial Park, Liuxian 1st Road, district 67, Bao’an, Shenzhen, Guangdong,China +@@ -148637,12 +148760,6 @@ FCD436 (base 16) Motorola Mobility LLC, a Lenovo Company + Nakano-ku Tokyo 164-8570 + JP + +-08-CB-E5 (hex) R3 - Reliable Realtime Radio Communications GmbH +-08CBE5 (base 16) R3 - Reliable Realtime Radio Communications GmbH +- Bismarckstrasse 10-12 +- Berlin Berlin 10625 +- DE +- + F0-23-AE (hex) AMPAK Technology,Inc. + F023AE (base 16) AMPAK Technology,Inc. + 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, +@@ -150446,12 +150563,6 @@ F02A2B (base 16) IEEE Registration Authority + Piscataway NJ 08554 + US + +-00-25-DF (hex) Private +-0025DF (base 16) Private +- 17800 N 85th St. +- Scottsdale AZ 85255 +- US +- + D0-49-7C (hex) OnePlus Technology (Shenzhen) Co., Ltd + D0497C (base 16) OnePlus Technology (Shenzhen) Co., Ltd + 18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING, +@@ -152186,10 +152297,10 @@ B4E265 (base 16) Shenzhen SDMC Technology Co.,LTD + Shenzhen GUANGDONG 518027 + CN + +-CC-60-C8 (hex) Microsoft Corporation +-CC60C8 (base 16) Microsoft Corporation +- One Microsoft Way +- REDMOND WA 98052 ++EC-7C-5C (hex) Juniper Networks ++EC7C5C (base 16) Juniper Networks ++ 1133 Innovation Way ++ Sunnyvale CA 94089 + US + + 00-EB-D8 (hex) MERCUSYS TECHNOLOGIES CO., LTD. +@@ -152198,6 +152309,12 @@ CC60C8 (base 16) Microsoft Corporation + Shenzhen Guangdong 518057 + CN + ++CC-60-C8 (hex) Microsoft Corporation ++CC60C8 (base 16) Microsoft Corporation ++ One Microsoft Way ++ REDMOND WA 98052 ++ US ++ + 6C-8D-77 (hex) Cisco Systems, Inc + 6C8D77 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -152216,12 +152333,6 @@ B417A8 (base 16) Facebook Technologies, LLC + Menlo Park CA 94025 + US + +-EC-7C-5C (hex) Juniper Networks +-EC7C5C (base 16) Juniper Networks +- 1133 Innovation Way +- Sunnyvale CA 94089 +- US +- + 10-54-D2 (hex) IEEE Registration Authority + 1054D2 (base 16) IEEE Registration Authority + 445 Hoes Lane +@@ -152240,6 +152351,12 @@ C4DF39 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Chongqing China 401120 + CN + ++10-63-4B (hex) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++10634B (base 16) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. ++ 3/F, Building R1-B, High-Tech Industrial Park, Nanshan District ++ Shenzhen Guangdong 518057 ++ CN ++ + 80-97-33 (hex) Shenzhen Elebao Technology Co., Ltd + 809733 (base 16) Shenzhen Elebao Technology Co., Ltd + F/6, Tower A, Zhihuichuangxin Center Bldg,Qianjin Road, XixiangTown, Bao’an District +@@ -152276,6 +152393,18 @@ D8365F (base 16) Intelbras + Moscow\ 117335 + RU + ++E8-4D-EC (hex) Xerox Corporation ++E84DEC (base 16) Xerox Corporation ++ 800 Phillips Rd ++ Webster NY 14450 ++ US ++ ++C8-B8-2F (hex) eero inc. ++C8B82F (base 16) eero inc. ++ 660 3rd Street ++ San Francisco CA 94107 ++ US ++ + 54-78-C9 (hex) AMPAK Technology,Inc. + 5478C9 (base 16) AMPAK Technology,Inc. + 3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou, +@@ -152300,54 +152429,60 @@ FC101A (base 16) Palo Alto Networks + Rueil Malmaison Cedex hauts de seine 92848 + FR + +-10-63-4B (hex) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. +-10634B (base 16) SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD. +- 3/F, Building R1-B, High-Tech Industrial Park, Nanshan District +- Shenzhen Guangdong 518057 ++B8-5D-C3 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++B85DC3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 + CN + +-E8-4D-EC (hex) Xerox Corporation +-E84DEC (base 16) Xerox Corporation +- 800 Phillips Rd +- Webster NY 14450 +- US +- +-C8-B8-2F (hex) eero inc. +-C8B82F (base 16) eero inc. +- 660 3rd Street +- San Francisco CA 94107 +- US +- + B4-3A-E2 (hex) HUAWEI TECHNOLOGIES CO.,LTD + B43AE2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + ++D0-A4-6F (hex) China Dragon Technology Limited ++D0A46F (base 16) China Dragon Technology Limited ++ B4 Bldg.Haoshan 1st Industry Park, ++ Shenzhen Guangdong 518104 ++ CN ++ + F0-C8-B5 (hex) HUAWEI TECHNOLOGIES CO.,LTD + F0C8B5 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-B8-5D-C3 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-B85DC3 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 ++2C-60-CD (hex) NR ELECTRIC CO., LTD ++2C60CD (base 16) NR ELECTRIC CO., LTD ++ 69,Suyuan Avenue ++ Nanjing Jiangsu 211102 ++ CN ++ ++8C-1E-80 (hex) Cisco Systems, Inc ++8C1E80 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++A4-1E-E1 (hex) Taicang T&W Electronics ++A41EE1 (base 16) Taicang T&W Electronics ++ 89# Jiang Nan RD ++ Suzhou Jiangsu 215412 + CN + ++E8-FB-1C (hex) AzureWave Technology Inc. ++E8FB1C (base 16) AzureWave Technology Inc. ++ 8F., No. 94, Baozhong Rd. ++ New Taipei City Taiwan 231 ++ TW ++ + B4-A7-C6 (hex) SERVERCOM (INDIA) PRIVATE LIMITED + B4A7C6 (base 16) SERVERCOM (INDIA) PRIVATE LIMITED + E-43/1 OKHLA INDUSTRIAL AREA PHASE-II NEW DELHI SOUTH DELHI + NEW DELHI NA + IN + +-D0-A4-6F (hex) China Dragon Technology Limited +-D0A46F (base 16) China Dragon Technology Limited +- B4 Bldg.Haoshan 1st Industry Park, +- Shenzhen Guangdong 518104 +- CN +- + 1C-76-F2 (hex) Samsung Electronics Co.,Ltd + 1C76F2 (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu +@@ -152366,12 +152501,6 @@ D0A46F (base 16) China Dragon Technology Limited + Gumi Gyeongbuk 730-350 + KR + +-2C-60-CD (hex) NR ELECTRIC CO., LTD +-2C60CD (base 16) NR ELECTRIC CO., LTD +- 69,Suyuan Avenue +- Nanjing Jiangsu 211102 +- CN +- + 28-6B-35 (hex) Intel Corporate + 286B35 (base 16) Intel Corporate + Lot 8, Jalan Hi-Tech 2/3 +@@ -152384,18 +152513,6 @@ D0A46F (base 16) China Dragon Technology Limited + Piscataway NJ 08554 + US + +-A4-1E-E1 (hex) Taicang T&W Electronics +-A41EE1 (base 16) Taicang T&W Electronics +- 89# Jiang Nan RD +- Suzhou Jiangsu 215412 +- CN +- +-E8-FB-1C (hex) AzureWave Technology Inc. +-E8FB1C (base 16) AzureWave Technology Inc. +- 8F., No. 94, Baozhong Rd. +- New Taipei City Taiwan 231 +- TW +- + C0-EE-40 (hex) Laird Connectivity + C0EE40 (base 16) Laird Connectivity + 50 South Main St +@@ -152408,12 +152525,72 @@ A47D9F (base 16) Shenzhen iComm Semiconductor CO.,LTD + Shenzhen No.1079 Nanhai Road,Nanshan District 518067 + CN + ++84-EA-97 (hex) Shenzhen iComm Semiconductor CO.,LTD ++84EA97 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++14-B2-E5 (hex) Shenzhen iComm Semiconductor CO.,LTD ++14B2E5 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ ++E0-CB-56 (hex) Shenzhen iComm Semiconductor CO.,LTD ++E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD ++ Room 601,Block B ,Digital Building,Garden City ++ Shenzhen No.1079 Nanhai Road,Nanshan District 518067 ++ CN ++ + 30-04-5C (hex) Shenzhen SuperElectron Technology Co.,Ltd. + 30045C (base 16) Shenzhen SuperElectron Technology Co.,Ltd. + 1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city + Shenzhen Guangdong 518000 + CN + ++90-79-CF (hex) zte corporation ++9079CF (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++88-8F-A4 (hex) Huawei Device Co., Ltd. ++888FA4 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++3C-82-C0 (hex) Technicolor CH USA Inc. ++3C82C0 (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ ++C4-DE-E2 (hex) Espressif Inc. ++C4DEE2 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++68-B6-B3 (hex) Espressif Inc. ++68B6B3 (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 ++ CN ++ ++FC-A0-5A (hex) Oray.com co., LTD. ++FCA05A (base 16) Oray.com co., LTD. ++ 8008Rm, building No.1 GuoDing d. Yangpu District ++ Shanghai Shanghai 200433 ++ CN ++ ++90-48-6C (hex) Ring LLC ++90486C (base 16) Ring LLC ++ 1523 26th St ++ Santa Monica CA 90404 ++ US ++ + 3C-46-45 (hex) Shanghai Infinity Wireless Technologies Co.,Ltd. + 3C4645 (base 16) Shanghai Infinity Wireless Technologies Co.,Ltd. + Room 522, Building A, No.1687 Changyang Road, Yangpu District, Shanghai +@@ -152438,30 +152615,12 @@ A4F933 (base 16) Intel Corporate + Kulim Kedah 09000 + MY + +-88-8F-A4 (hex) Huawei Device Co., Ltd. +-888FA4 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- + 50-68-AC (hex) Huawei Device Co., Ltd. + 5068AC (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + +-90-79-CF (hex) zte corporation +-9079CF (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- +-8C-1E-80 (hex) Cisco Systems, Inc +-8C1E80 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- + 50-39-2F (hex) INGRAM MICRO SERVICES + 50392F (base 16) INGRAM MICRO SERVICES + 100 CHEMIN DE BAILLOT +@@ -152486,53 +152645,11 @@ FC8417 (base 16) Honor Device Co., Ltd. + San Diego CA 92121 + US + +-C4-DE-E2 (hex) Espressif Inc. +-C4DEE2 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- +-68-B6-B3 (hex) Espressif Inc. +-68B6B3 (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- +-FC-A0-5A (hex) Oray.com co., LTD. +-FCA05A (base 16) Oray.com co., LTD. +- 8008Rm, building No.1 GuoDing d. Yangpu District +- Shanghai Shanghai 200433 +- CN +- +-84-EA-97 (hex) Shenzhen iComm Semiconductor CO.,LTD +-84EA97 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-14-B2-E5 (hex) Shenzhen iComm Semiconductor CO.,LTD +-14B2E5 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-E0-CB-56 (hex) Shenzhen iComm Semiconductor CO.,LTD +-E0CB56 (base 16) Shenzhen iComm Semiconductor CO.,LTD +- Room 601,Block B ,Digital Building,Garden City +- Shenzhen No.1079 Nanhai Road,Nanshan District 518067 +- CN +- +-90-48-6C (hex) Ring LLC +-90486C (base 16) Ring LLC +- 1523 26th St +- Santa Monica CA 90404 +- US +- +-3C-82-C0 (hex) Technicolor CH USA Inc. +-3C82C0 (base 16) Technicolor CH USA Inc. +- 5030 Sugarloaf Parkway Bldg 6 +- Lawrenceville GA 30044 +- US ++AC-B5-66 (hex) Renesas Electronics (Penang) Sdn. Bhd. ++ACB566 (base 16) Renesas Electronics (Penang) Sdn. Bhd. ++ Phase 3, Bayan Lepas FIZ ++ Bayan Lepas Penang 11900 ++ MY + + 10-24-07 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 102407 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +@@ -152552,6 +152669,12 @@ D021AC (base 16) Yohana + Palo Alto CA 94304 + US + ++38-1F-26 (hex) IEEE Registration Authority ++381F26 (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ Piscataway NJ 08554 ++ US ++ + 7C-E1-52 (hex) THE GOODYEAR TIRE & RUBBER COMPANY + 7CE152 (base 16) THE GOODYEAR TIRE & RUBBER COMPANY + 200 Innovation Way +@@ -152570,17 +152693,17 @@ D021AC (base 16) Yohana + Mérignac 33700 + FR + +-AC-B5-66 (hex) Renesas Electronics (Penang) Sdn. Bhd. +-ACB566 (base 16) Renesas Electronics (Penang) Sdn. Bhd. +- Phase 3, Bayan Lepas FIZ +- Bayan Lepas Penang 11900 +- MY ++50-E6-36 (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH ++50E636 (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH ++ Alt-Moabit 95 ++ Berlin Berlin 10559 ++ DE + +-38-1F-26 (hex) IEEE Registration Authority +-381F26 (base 16) IEEE Registration Authority +- 445 Hoes Lane +- Piscataway NJ 08554 +- US ++78-20-BD (hex) Polysense (Beijing) Technologies Co. Ltd ++7820BD (base 16) Polysense (Beijing) Technologies Co. Ltd ++ 9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist. ++ Beijing 100085 ++ CN + + EC-21-25 (hex) Toshiba Corp. + EC2125 (base 16) Toshiba Corp. +@@ -152588,35 +152711,17 @@ EC2125 (base 16) Toshiba Corp. + Tokyo 105-8001 + JP + +-00-E5-F1 (hex) BUFFALO.INC +-00E5F1 (base 16) BUFFALO.INC +- AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku +- Nagoya Aichi Pref. 460-8315 +- JP +- +-34-EE-2A (hex) ConMet +-34EE2A (base 16) ConMet +- 5701 SE Columbia Way +- Vancouver WA 98661 +- US +- +-50-E6-36 (hex) AVM Audiovisuelles Marketing und Computersysteme GmbH +-50E636 (base 16) AVM Audiovisuelles Marketing und Computersysteme GmbH +- Alt-Moabit 95 +- Berlin Berlin 10559 +- DE +- + 68-4E-05 (hex) HUNAN FN-LINK TECHNOLOGY LIMITED + 684E05 (base 16) HUNAN FN-LINK TECHNOLOGY LIMITED + No.8, Litong Road, Liuyan Economic & Tec + Changsha HUNAN 410329 + CN + +-78-20-BD (hex) Polysense (Beijing) Technologies Co. Ltd +-7820BD (base 16) Polysense (Beijing) Technologies Co. Ltd +- 9  Shangdi 3rd Street, D508B3/5(4)F Bldg D, Haidian Dist. +- Beijing 100085 +- CN ++04-99-BB (hex) Apple, Inc. ++0499BB (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US + + F0-4D-D4 (hex) Sagemcom Broadband SAS + F04DD4 (base 16) Sagemcom Broadband SAS +@@ -152624,17 +152729,11 @@ F04DD4 (base 16) Sagemcom Broadband SAS + Rueil Malmaison Cedex hauts de seine 92848 + FR + +-AC-29-29 (hex) Infinix mobility limited +-AC2929 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- +-5C-1B-F4 (hex) Apple, Inc. +-5C1BF4 (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US ++00-E5-F1 (hex) BUFFALO.INC ++00E5F1 (base 16) BUFFALO.INC ++ AKAMONDORI Bld.,30-20,Ohsu 3-chome,Naka-ku ++ Nagoya Aichi Pref. 460-8315 ++ JP + + A8-51-AB (hex) Apple, Inc. + A851AB (base 16) Apple, Inc. +@@ -152642,35 +152741,17 @@ A851AB (base 16) Apple, Inc. + Cupertino CA 95014 + US + +-3C-CE-0D (hex) Shenzhen juduoping Technology Co.,Ltd +-3CCE0D (base 16) Shenzhen juduoping Technology Co.,Ltd +- Baoan Xin'an Streat +- Shenzhen 002052 +- CN +- +-04-99-BB (hex) Apple, Inc. +-0499BB (base 16) Apple, Inc. ++5C-1B-F4 (hex) Apple, Inc. ++5C1BF4 (base 16) Apple, Inc. + 1 Infinite Loop + Cupertino CA 95014 + US + +-60-E9-AA (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +-60E9AA (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. +- B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China +- Nanning Guangxi 530007 +- CN +- +-24-0F-5E (hex) Shenzhen z-router Technology Co., Ltd +-240F5E (base 16) Shenzhen z-router Technology Co., Ltd +- 406,Block A,Taojindi Building ,Tenglong Road,Longhua New District, +- Shenzhen GuangDong 518000 +- CN +- +-E8-3A-4B (hex) China Mobile Group Device Co.,Ltd. +-E83A4B (base 16) China Mobile Group Device Co.,Ltd. +- 32 Xuanwumen West Street,Xicheng District +- Beijing 100053 +- CN ++34-EE-2A (hex) ConMet ++34EE2A (base 16) ConMet ++ 5701 SE Columbia Way ++ Vancouver WA 98661 ++ US + + 78-66-9D (hex) Hui Zhou Gaoshengda Technology Co.,LTD + 78669D (base 16) Hui Zhou Gaoshengda Technology Co.,LTD +@@ -152684,30 +152765,30 @@ E83A4B (base 16) China Mobile Group Device Co.,Ltd. + Delft 2628 XJ + NL + +-00-0E-DD (hex) SHURE INCORPORATED +-000EDD (base 16) SHURE INCORPORATED +- 5800 W. TOUHY AVE. +- NILES IL 60714 +- US +- +-6C-97-6D (hex) Motorola Mobility LLC, a Lenovo Company +-6C976D (base 16) Motorola Mobility LLC, a Lenovo Company +- 222 West Merchandise Mart Plaza +- Chicago IL 60654 +- US +- +-64-11-A4 (hex) Motorola Mobility LLC, a Lenovo Company +-6411A4 (base 16) Motorola Mobility LLC, a Lenovo Company +- 222 West Merchandise Mart Plaza +- Chicago IL 60654 +- US +- + 90-49-92 (hex) YSTen Technology Co.,Ltd + 904992 (base 16) YSTen Technology Co.,Ltd + Room 1715,17/F North Star Times Tower,Chaoyang District,Beijing. + Beijing 100101 + CN + ++AC-29-29 (hex) Infinix mobility limited ++AC2929 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ ++3C-CE-0D (hex) Shenzhen juduoping Technology Co.,Ltd ++3CCE0D (base 16) Shenzhen juduoping Technology Co.,Ltd ++ Baoan Xin'an Streat ++ Shenzhen 002052 ++ CN ++ ++00-0E-DD (hex) SHURE INCORPORATED ++000EDD (base 16) SHURE INCORPORATED ++ 5800 W. TOUHY AVE. ++ NILES IL 60714 ++ US ++ + 18-FD-74 (hex) Routerboard.com + 18FD74 (base 16) Routerboard.com + Mikrotikls SIA +@@ -152738,6 +152819,42 @@ E4902A (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + ++E8-3A-4B (hex) China Mobile Group Device Co.,Ltd. ++E83A4B (base 16) China Mobile Group Device Co.,Ltd. ++ 32 Xuanwumen West Street,Xicheng District ++ Beijing 100053 ++ CN ++ ++60-E9-AA (hex) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++60E9AA (base 16) CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD. ++ B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China ++ Nanning Guangxi 530007 ++ CN ++ ++24-0F-5E (hex) Shenzhen z-router Technology Co., Ltd ++240F5E (base 16) Shenzhen z-router Technology Co., Ltd ++ 406,Block A,Taojindi Building ,Tenglong Road,Longhua New District, ++ Shenzhen GuangDong 518000 ++ CN ++ ++6C-97-6D (hex) Motorola Mobility LLC, a Lenovo Company ++6C976D (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ ++64-11-A4 (hex) Motorola Mobility LLC, a Lenovo Company ++6411A4 (base 16) Motorola Mobility LLC, a Lenovo Company ++ 222 West Merchandise Mart Plaza ++ Chicago IL 60654 ++ US ++ ++10-F0-68 (hex) Ruckus Wireless ++10F068 (base 16) Ruckus Wireless ++ 350 West Java Drive ++ Sunnyvale CA 94089 ++ US ++ + F0-87-7F (hex) Magnetar Technology Shenzhen Co., LTD. + F0877F (base 16) Magnetar Technology Shenzhen Co., LTD. + Room211, Building1, No.26 Puzai Road, Pingdi Longgang +@@ -152756,10 +152873,10 @@ C8D6B7 (base 16) Solidigm Technology + Longmont CO 80501 + US + +-10-F0-68 (hex) Ruckus Wireless +-10F068 (base 16) Ruckus Wireless +- 350 West Java Drive +- Sunnyvale CA 94089 ++60-5B-30 (hex) Dell Inc. ++605B30 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 + US + + 44-3C-9C (hex) Pintsch GmbH +@@ -152768,18 +152885,6 @@ C8D6B7 (base 16) Solidigm Technology + Dinslaken 46537 + DE + +-20-64-DE (hex) Sunitec Enterprise Co.,Ltd +-2064DE (base 16) Sunitec Enterprise Co.,Ltd +- 3F.,No.98-1,Mincyuan Rd.Sindian City +- Taipei County 231 231141 +- CN +- +-A4-0F-98 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +-A40F98 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD +- NO.18 HAIBIN ROAD, +- DONG GUAN GUANG DONG 523860 +- CN +- + D8-80-DC (hex) Huawei Device Co., Ltd. + D880DC (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -152810,6 +152915,12 @@ F46C68 (base 16) Wistron Neweb Corporation + shenzhen guangdong 518057 + CN + ++20-64-DE (hex) Sunitec Enterprise Co.,Ltd ++2064DE (base 16) Sunitec Enterprise Co.,Ltd ++ 3F.,No.98-1,Mincyuan Rd.Sindian City ++ Taipei County 231 231141 ++ CN ++ + 74-B7-25 (hex) Huawei Device Co., Ltd. + 74B725 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -152822,6 +152933,12 @@ F46C68 (base 16) Wistron Neweb Corporation + Dongguan Guangdong 523808 + CN + ++A4-0F-98 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++A40F98 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD ++ NO.18 HAIBIN ROAD, ++ DONG GUAN GUANG DONG 523860 ++ CN ++ + BC-44-34 (hex) Shenzhen TINNO Mobile Technology Corp. + BC4434 (base 16) Shenzhen TINNO Mobile Technology Corp. + Building, No.33, Xiandong Rd, Xili +@@ -152834,12 +152951,6 @@ BC4434 (base 16) Shenzhen TINNO Mobile Technology Corp. + Minato-ku Tokyo 108-0075 + JP + +-60-5B-30 (hex) Dell Inc. +-605B30 (base 16) Dell Inc. +- One Dell Way +- Round Rock TX 78682 +- US +- + 34-AC-11 (hex) China Mobile Group Device Co.,Ltd. + 34AC11 (base 16) China Mobile Group Device Co.,Ltd. + 32 Xuanwumen West Street,Xicheng District +@@ -152912,24 +153023,6 @@ DC71DD (base 16) AX Technologies + Singapore 556741 + SG + +-3C-69-D1 (hex) ADC Automotive Distance Control System GmbH +-3C69D1 (base 16) ADC Automotive Distance Control System GmbH +- Peter-Dornier Strasse 10 +- Lindau Bavaria 88131 +- DE +- +-04-BA-D6 (hex) D-Link Corporation +-04BAD6 (base 16) D-Link Corporation +- No.289, Sinhu 3rd Rd., Neihu District, +- Taipei City 114 +- TW +- +-30-3F-5D (hex) PT HAN SUNG ELECTORONICS INDONESIA +-303F5D (base 16) PT HAN SUNG ELECTORONICS INDONESIA +- JL.PALEM 1 BLOK DS-6 +- KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN BEKASI JAWA BARAT 17550 +- ID +- + 30-7F-10 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + 307F10 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, +@@ -152954,23 +153047,35 @@ B0FBDD (base 16) Shenzhen SuperElectron Technology Co.,Ltd. + Shenzhen Guangdong 518000 + CN + ++3C-69-D1 (hex) ADC Automotive Distance Control System GmbH ++3C69D1 (base 16) ADC Automotive Distance Control System GmbH ++ Peter-Dornier Strasse 10 ++ Lindau Bavaria 88131 ++ DE ++ + E0-9C-8D (hex) Seakeeper, Inc. + E09C8D (base 16) Seakeeper, Inc. + 45310 Abell House Lane Suite 350 + California MD 20619 + US + ++04-BA-D6 (hex) D-Link Corporation ++04BAD6 (base 16) D-Link Corporation ++ No.289, Sinhu 3rd Rd., Neihu District, ++ Taipei City 114 ++ TW ++ + 34-3A-20 (hex) Aruba, a Hewlett Packard Enterprise Company + 343A20 (base 16) Aruba, a Hewlett Packard Enterprise Company + 3333 Scott Blvd + Santa Clara CA 95054 + US + +-7C-0C-92 (hex) Suzhou Mobydata Smart System Co.,Ltd. +-7C0C92 (base 16) Suzhou Mobydata Smart System Co.,Ltd. +- 3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China +- Suzhou Jingsu 215000 +- CN ++30-3F-5D (hex) PT HAN SUNG ELECTORONICS INDONESIA ++303F5D (base 16) PT HAN SUNG ELECTORONICS INDONESIA ++ JL.PALEM 1 BLOK DS-6 ++ KAWASAN INDUSTRI BATIK LIPPO CIKARANG, DESA CIBATU, KECAMATAN CIKARANG SELATAN BEKASI JAWA BARAT 17550 ++ ID + + 18-E9-1D (hex) HUAWEI TECHNOLOGIES CO.,LTD + 18E91D (base 16) HUAWEI TECHNOLOGIES CO.,LTD +@@ -152990,12 +153095,6 @@ F46ADD (base 16) Liteon Technology Corporation + New Taipei City Taiwan 23585 + TW + +-98-D7-42 (hex) Samsung Electronics Co.,Ltd +-98D742 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- + C8-2A-F1 (hex) TCT mobile ltd + C82AF1 (base 16) TCT mobile ltd + No.86 hechang 7th road, zhongkai, Hi-Tech District +@@ -153014,12 +153113,60 @@ A842E3 (base 16) Espressif Inc. + Shanghai Shanghai 201203 + CN + ++7C-0C-92 (hex) Suzhou Mobydata Smart System Co.,Ltd. ++7C0C92 (base 16) Suzhou Mobydata Smart System Co.,Ltd. ++ 3f,building E,Yida science Park,No.11 Jinpu Road,SIP,Suzhou,Jiangsu,China ++ Suzhou Jingsu 215000 ++ CN ++ + 04-26-05 (hex) Bosch Building Automation GmbH + 042605 (base 16) Bosch Building Automation GmbH + Kapellenweg 42 + Verl 33415 + DE + ++3C-FE-AC (hex) Cisco Systems, Inc ++3CFEAC (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++04-A7-41 (hex) Cisco Systems, Inc ++04A741 (base 16) Cisco Systems, Inc ++ 80 West Tasman Drive ++ San Jose CA 94568 ++ US ++ ++A0-88-9D (hex) Huawei Device Co., Ltd. ++A0889D (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ ++98-D7-42 (hex) Samsung Electronics Co.,Ltd ++98D742 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++D4-9B-74 (hex) Kinetic Technologies ++D49B74 (base 16) Kinetic Technologies ++ 6399 San Ignacio Ave #250 ++ San Jose CA 95119 ++ US ++ ++40-F8-DF (hex) CANON INC. ++40F8DF (base 16) CANON INC. ++ 30-2 Shimomaruko 3-chome, ++ Ohta-ku Tokyo 146-8501 ++ JP ++ ++20-47-ED (hex) SKY UK LIMITED ++2047ED (base 16) SKY UK LIMITED ++ 130 Kings Road ++ Brentwood Essex 08854 ++ GB ++ + A0-BD-CD (hex) SKY UK LIMITED + A0BDCD (base 16) SKY UK LIMITED + 130 Kings Road +@@ -153056,42 +153203,6 @@ A0BDCD (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + +-3C-FE-AC (hex) Cisco Systems, Inc +-3CFEAC (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-04-A7-41 (hex) Cisco Systems, Inc +-04A741 (base 16) Cisco Systems, Inc +- 80 West Tasman Drive +- San Jose CA 94568 +- US +- +-A0-88-9D (hex) Huawei Device Co., Ltd. +-A0889D (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- +-D4-9B-74 (hex) Kinetic Technologies +-D49B74 (base 16) Kinetic Technologies +- 6399 San Ignacio Ave #250 +- San Jose CA 95119 +- US +- +-20-47-ED (hex) SKY UK LIMITED +-2047ED (base 16) SKY UK LIMITED +- 130 Kings Road +- Brentwood Essex 08854 +- GB +- +-40-F8-DF (hex) CANON INC. +-40F8DF (base 16) CANON INC. +- 30-2 Shimomaruko 3-chome, +- Ohta-ku Tokyo 146-8501 +- JP +- + F4-6B-8C (hex) Hon Hai Precision Industry Co., Ltd. + F46B8C (base 16) Hon Hai Precision Industry Co., Ltd. + GuangDongShenZhen +@@ -153104,12 +153215,6 @@ F46B8C (base 16) Hon Hai Precision Industry Co., Ltd. + Calamba Lot 1 + PH + +-F4-3B-D8 (hex) Intel Corporate +-F43BD8 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- + 7C-67-AB (hex) Roku, Inc + 7C67AB (base 16) Roku, Inc + 1155 Coleman Ave +@@ -153122,6 +153227,18 @@ F43BD8 (base 16) Intel Corporate + Piscataway NJ 08554 + US + ++F4-3B-D8 (hex) Intel Corporate ++F43BD8 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++C8-4B-D6 (hex) Dell Inc. ++C84BD6 (base 16) Dell Inc. ++ One Dell Way ++ Round Rock TX 78682 ++ US ++ + E0-86-14 (hex) Novatel Wireless Solutions, Inc. + E08614 (base 16) Novatel Wireless Solutions, Inc. + 9710 Scranton Rd., Suite 200 +@@ -153134,18 +153251,6 @@ A8DE68 (base 16) Beijing Wide Technology Co.,Ltd + Beijing Beijing 100000 + CN + +-3C-4E-56 (hex) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD +-3C4E56 (base 16) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD +- Unit East Block22-24/F,Skyworth semiconductor design Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China +- SHENZHEN GUANGDONG 518057 +- CN +- +-C8-4B-D6 (hex) Dell Inc. +-C84BD6 (base 16) Dell Inc. +- One Dell Way +- Round Rock TX 78682 +- US +- + 6C-30-2A (hex) Texas Instruments + 6C302A (base 16) Texas Instruments + 12500 TI Blvd +@@ -153158,12 +153263,6 @@ C84BD6 (base 16) Dell Inc. + Dallas TX 75243 + US + +-08-B6-1F (hex) Espressif Inc. +-08B61F (base 16) Espressif Inc. +- Room 204, Building 2, 690 Bibo Rd, Pudong New Area +- Shanghai Shanghai 201203 +- CN +- + 94-4E-5B (hex) Ubee Interactive Co., Limited + 944E5B (base 16) Ubee Interactive Co., Limited + Flat/RM 1202, 12/F, AT Tower, 180 Electric Road +@@ -153200,10 +153299,16 @@ FC6179 (base 16) IEEE Registration Authority + Piscataway NJ 08554 + US + +-4C-72-74 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd +-4C7274 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd +- Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China +- ShenZHEN GuangDong 518104 ++3C-4E-56 (hex) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++3C4E56 (base 16) SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD ++ Unit East Block22-24/F,Skyworth semiconductor design Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China ++ SHENZHEN GUANGDONG 518057 ++ CN ++ ++08-B6-1F (hex) Espressif Inc. ++08B61F (base 16) Espressif Inc. ++ Room 204, Building 2, 690 Bibo Rd, Pudong New Area ++ Shanghai Shanghai 201203 + CN + + 98-A2-C0 (hex) Cisco Systems, Inc +@@ -153218,6 +153323,12 @@ EC74D7 (base 16) Grandstream Networks Inc + boston MA 02215 + US + ++4C-72-74 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd ++4C7274 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd ++ Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China ++ ShenZHEN GuangDong 518104 ++ CN ++ + 30-63-71 (hex) Shenzhenshi Xinzhongxin Technology Co.Ltd + 306371 (base 16) Shenzhenshi Xinzhongxin Technology Co.Ltd + Block 3, Dong Huan Industrial Park, Sha Jing Town, Bao’an District, Shenzhen City, Guangdong Province, China +@@ -153236,24 +153347,6 @@ EC74D7 (base 16) Grandstream Networks Inc + shenzhen guangdong 518057 + CN + +-5C-3E-1B (hex) Apple, Inc. +-5C3E1B (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- +-7C-2A-CA (hex) Apple, Inc. +-7C2ACA (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- +-28-8E-EC (hex) Apple, Inc. +-288EEC (base 16) Apple, Inc. +- 1 Infinite Loop +- Cupertino CA 95014 +- US +- + A0-8C-F2 (hex) YINUOLINK CO.,LTD + A08CF2 (base 16) YINUOLINK CO.,LTD + 3F, Bldg 5, Gaoxinjian Industrial Park, Fuyuan 1st Road, Heping, Fuhai, Bao'an +@@ -153278,22 +153371,22 @@ F4931C (base 16) Universal Electronics, Inc. + Santa Ana CA 92707 + US + +-C8-84-8C (hex) Ruckus Wireless +-C8848C (base 16) Ruckus Wireless +- 350 West Java Drive +- Sunnyvale CA 94089 ++5C-3E-1B (hex) Apple, Inc. ++5C3E1B (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 + US + +-B0-78-39 (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. +-B07839 (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. +- Midea Global Innovation Center,Beijiao Town,Shunde +- Foshan Guangdong 528311 +- CN ++7C-2A-CA (hex) Apple, Inc. ++7C2ACA (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 ++ US + +-74-9E-75 (hex) Aruba, a Hewlett Packard Enterprise Company +-749E75 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 ++28-8E-EC (hex) Apple, Inc. ++288EEC (base 16) Apple, Inc. ++ 1 Infinite Loop ++ Cupertino CA 95014 + US + + E0-5A-1B (hex) Espressif Inc. +@@ -153314,12 +153407,6 @@ CCBA6F (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-78-5C-5E (hex) HUAWEI TECHNOLOGIES CO.,LTD +-785C5E (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN +- + 98-81-8A (hex) Huawei Device Co., Ltd. + 98818A (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -153344,18 +153431,84 @@ B4C2F7 (base 16) Huawei Device Co., Ltd. + Shenzhen Guangdong 518000 + CN + ++70-11-0E (hex) zte corporation ++70110E (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ ++78-5C-5E (hex) HUAWEI TECHNOLOGIES CO.,LTD ++785C5E (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ ++C8-84-8C (hex) Ruckus Wireless ++C8848C (base 16) Ruckus Wireless ++ 350 West Java Drive ++ Sunnyvale CA 94089 ++ US ++ ++B0-78-39 (hex) GD Midea Air-Conditioning Equipment Co.,Ltd. ++B07839 (base 16) GD Midea Air-Conditioning Equipment Co.,Ltd. ++ Midea Global Innovation Center,Beijiao Town,Shunde ++ Foshan Guangdong 528311 ++ CN ++ ++74-9E-75 (hex) Aruba, a Hewlett Packard Enterprise Company ++749E75 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ + F4-1C-71 (hex) SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD + F41C71 (base 16) SHENZHEN SANMU COMMUNICATION TECHNOLOGY CO., LTD + 17/F,Block 1A,Software Industry Base, XueFu Road,Nanshan District, + Shenzhen GuangDong 518100 + CN + +-70-11-0E (hex) zte corporation +-70110E (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++00-25-DF (hex) Taser International Inc. ++0025DF (base 16) Taser International Inc. ++ 17800 N 85th St. ++ Scottsdale AZ 85255 ++ US ++ ++E8-86-CF (hex) Nokia ++E886CF (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++34-38-AF (hex) Inlab Networks GmbH ++3438AF (base 16) Inlab Networks GmbH ++ Josef-Wuerth-Str. 3 ++ Gruenwald Bavaria 82031 ++ DE ++ ++D8-F5-07 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++D8F507 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 + CN + ++C4-EF-DA (hex) Honeywell ++C4EFDA (base 16) Honeywell ++ 9680 Old Bailes Rd, Fort Mill, SC 29707 ++ Fort Mill SC 29707 ++ US ++ ++08-CB-E5 (hex) R3 Solutions GmbH ++08CBE5 (base 16) R3 Solutions GmbH ++ Kurfürstendamm 21 ++ Berlin 10719 ++ DE ++ ++D8-54-82 (hex) Oxit, LLC ++D85482 (base 16) Oxit, LLC ++ 3131 Westinghouse Blvd ++ Charlotte NC 28273 ++ US ++ + 7C-8A-E1 (hex) COMPAL INFORMATION (KUNSHAN) CO., LTD. + 7C8AE1 (base 16) COMPAL INFORMATION (KUNSHAN) CO., LTD. + NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE +@@ -154136,9 +154289,6 @@ D8D090 (base 16) Dell Inc. + Nagoya Aichi Pref. 460-8315 + JP + +-00-84-ED (hex) Private +-0084ED (base 16) Private +- + E0-02-A5 (hex) ABB Robotics + E002A5 (base 16) ABB Robotics + Hydrovägen 10 +@@ -190529,18 +190679,6 @@ BC6193 (base 16) Xiaomi Communications Co Ltd + Beijing Haidian District 100085 + CN + +-94-7F-D8 (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-947FD8 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 +- CN +- +-C8-54-A4 (hex) Infinix mobility limited +-C854A4 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- + EC-71-DB (hex) Reolink Innovation Limited + EC71DB (base 16) Reolink Innovation Limited + 705,7/F,FA YUEN COMMERCIAL BUILDING,75-77 FA YUEN STREET +@@ -190559,6 +190697,12 @@ F8E57E (base 16) Cisco Systems, Inc + Seoul Seocho-Gu #137-902 + KR + ++94-7F-D8 (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++947FD8 (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 ++ CN ++ + 38-5B-44 (hex) Silicon Laboratories + 385B44 (base 16) Silicon Laboratories + 400 West Cesar Chavez Street +@@ -190601,12 +190745,6 @@ EC6073 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Shenzhen Guangdong 518057 + CN + +-74-DD-CB (hex) China Leadshine Technology Co.,Ltd +-74DDCB (base 16) China Leadshine Technology Co.,Ltd +- 9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan? +- SHENZHEN 518000 +- CN +- + 10-4D-15 (hex) Viaanix Inc + 104D15 (base 16) Viaanix Inc + 434 N Main St. +@@ -190619,6 +190757,18 @@ EC6073 (base 16) TP-LINK TECHNOLOGIES CO.,LTD. + Shenzhen Nanshan District 518000 + CN + ++C8-54-A4 (hex) Infinix mobility limited ++C854A4 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK ++ ++A0-09-2E (hex) zte corporation ++A0092E (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 ++ CN ++ + B0-AF-F7 (hex) Shenzhen Yipingfang Network Technology Co., Ltd. + B0AFF7 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. + 21 / F, Kangjia R & D building, No.28, Keji South 12th Road, Nanshan District, Shenzhen City, Guangdong Province, China +@@ -190637,18 +190787,12 @@ B0AFF7 (base 16) Shenzhen Yipingfang Network Technology Co., Ltd. + Changsha HUNAN 410329 + CN + +-A0-09-2E (hex) zte corporation +-A0092E (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 ++74-DD-CB (hex) China Leadshine Technology Co.,Ltd ++74DDCB (base 16) China Leadshine Technology Co.,Ltd ++ 9-11, Building A3, Nanshan Ipark, No.1001 Xueyuan Avenue, Nanshan? ++ SHENZHEN 518000 + CN + +-14-75-5B (hex) Intel Corporate +-14755B (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- + A8-B1-3B (hex) HP Inc. + A8B13B (base 16) HP Inc. + 10300 Energy Dr +@@ -190667,12 +190811,6 @@ C43875 (base 16) Sonos, Inc. + Reno NV 89507 + US + +-20-89-8A (hex) Shenzhen Skyworth Digital Technology CO., Ltd +-20898A (base 16) Shenzhen Skyworth Digital Technology CO., Ltd +- 4F,Block A, Skyworth?Building, +- Shenzhen Guangdong 518057 +- CN +- + DC-A9-56 (hex) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + DCA956 (base 16) GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD + NO.18 HAIBIN ROAD, +@@ -190691,12 +190829,24 @@ BCD206 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-CC-82-7F (hex) Advantech Technology (CHINA) Co., Ltd. +-CC827F (base 16) Advantech Technology (CHINA) Co., Ltd. +- No.666, Han-Pu Rd. Yu-Shan +- Kun-Shan Jiang Su 215316 ++20-89-8A (hex) Shenzhen Skyworth Digital Technology CO., Ltd ++20898A (base 16) Shenzhen Skyworth Digital Technology CO., Ltd ++ 4F,Block A, Skyworth?Building, ++ Shenzhen Guangdong 518057 + CN + ++14-75-5B (hex) Intel Corporate ++14755B (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ ++F4-E2-04 (hex) COYOTE SYSTEM ++F4E204 (base 16) COYOTE SYSTEM ++ 1, rue Royale ++ Saint-Cloud 92210 ++ FR ++ + F8-4E-58 (hex) Samsung Electronics Co.,Ltd + F84E58 (base 16) Samsung Electronics Co.,Ltd + 129, Samsung-ro, Youngtongl-Gu +@@ -190709,29 +190859,11 @@ B47064 (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-4C-2E-5E (hex) Samsung Electronics Co.,Ltd +-4C2E5E (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- +-64-5D-F4 (hex) Samsung Electronics Co.,Ltd +-645DF4 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- +-D8-10-68 (hex) Murata Manufacturing Co., Ltd. +-D81068 (base 16) Murata Manufacturing Co., Ltd. +- 1-10-1, Higashikotari +- Nagaokakyo-shi Kyoto 617-8555 +- JP +- +-5C-04-5A (hex) Company NA Stage & Light +-5C045A (base 16) Company NA Stage & Light +- Lambertu 9 +- M?rupe LV-2167 +- LV ++CC-82-7F (hex) Advantech Technology (CHINA) Co., Ltd. ++CC827F (base 16) Advantech Technology (CHINA) Co., Ltd. ++ No.666, Han-Pu Rd. Yu-Shan ++ Kun-Shan Jiang Su 215316 ++ CN + + 88-3F-0C (hex) system a.v. co., ltd. + 883F0C (base 16) system a.v. co., ltd. +@@ -190751,11 +190883,17 @@ C8BE35 (base 16) Extreme Networks, Inc. + Kulim Kedah 09000 + MY + +-F4-E2-04 (hex) COYOTE SYSTEM +-F4E204 (base 16) COYOTE SYSTEM +- 1, rue Royale +- Saint-Cloud 92210 +- FR ++D8-10-68 (hex) Murata Manufacturing Co., Ltd. ++D81068 (base 16) Murata Manufacturing Co., Ltd. ++ 1-10-1, Higashikotari ++ Nagaokakyo-shi Kyoto 617-8555 ++ JP ++ ++5C-04-5A (hex) Company NA Stage & Light ++5C045A (base 16) Company NA Stage & Light ++ Lambertu 9 ++ M?rupe LV-2167 ++ LV + + 58-C3-56 (hex) EM Microelectronic + 58C356 (base 16) EM Microelectronic +@@ -190781,11 +190919,17 @@ CCDD58 (base 16) Robert Bosch GmbH + Stuttgart 70499 + DE + +-D4-E0-53 (hex) Aruba, a Hewlett Packard Enterprise Company +-D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company +- 3333 Scott Blvd +- Santa Clara CA 95054 +- US ++4C-2E-5E (hex) Samsung Electronics Co.,Ltd ++4C2E5E (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ ++64-5D-F4 (hex) Samsung Electronics Co.,Ltd ++645DF4 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR + + 88-FC-5D (hex) Cisco Systems, Inc + 88FC5D (base 16) Cisco Systems, Inc +@@ -190817,11 +190961,11 @@ F4C88A (base 16) Intel Corporate + Beijing 100053 + CN + +-50-28-4A (hex) Intel Corporate +-50284A (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++D4-E0-53 (hex) Aruba, a Hewlett Packard Enterprise Company ++D4E053 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US + + 5C-A4-F4 (hex) zte corporation + 5CA4F4 (base 16) zte corporation +@@ -190835,11 +190979,11 @@ F4C88A (base 16) Intel Corporate + kakuda-City Miyagi-Pref 981-1595 + JP + +-24-6C-60 (hex) Huawei Device Co., Ltd. +-246C60 (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN ++50-28-4A (hex) Intel Corporate ++50284A (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY + + 98-C9-7C (hex) Shenzhen iComm Semiconductor CO.,LTD + 98C97C (base 16) Shenzhen iComm Semiconductor CO.,LTD +@@ -190847,11 +190991,11 @@ F4C88A (base 16) Intel Corporate + Shenzhen No.1079 Nanhai Road,Nanshan District 518067 + CN + +-30-3E-A7 (hex) Intel Corporate +-303EA7 (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY ++24-6C-60 (hex) Huawei Device Co., Ltd. ++246C60 (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN + + 28-A3-31 (hex) Sierra Wireless + 28A331 (base 16) Sierra Wireless +@@ -190859,6 +191003,12 @@ F4C88A (base 16) Intel Corporate + Richmond BC V6V 3A4 + CA + ++18-34-AF (hex) Kaonmedia CO., LTD. ++1834AF (base 16) Kaonmedia CO., LTD. ++ 884-3, Seongnam-daero, Bundang-gu ++ Seongnam-si Gyeonggi-do 13517 ++ KR ++ + EC-62-60 (hex) Espressif Inc. + EC6260 (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area +@@ -190871,23 +191021,23 @@ B06E72 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Chongqing China 401120 + CN + ++30-3E-A7 (hex) Intel Corporate ++303EA7 (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + 60-7D-09 (hex) Luxshare Precision Industry Co., Ltd + 607D09 (base 16) Luxshare Precision Industry Co., Ltd + 2nd floor,A building,Sanyo New Industrial Area,West Area of Maoyi, Shajing Street,Bao'an District + Shenzhen City Guangdong Province 518100 + CN + +-18-34-AF (hex) Kaonmedia CO., LTD. +-1834AF (base 16) Kaonmedia CO., LTD. +- 884-3, Seongnam-daero, Bundang-gu +- Seongnam-si Gyeonggi-do 13517 +- KR +- +-28-82-7C (hex) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch +-28827C (base 16) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch +- No.17 Longmen Road +- Changzhou JiangSu 213164 +- CN ++CC-3E-79 (hex) ARRIS Group, Inc. ++CC3E79 (base 16) ARRIS Group, Inc. ++ 6450 Sequence Drive ++ San Diego CA 92121 ++ US + + 28-F5-D1 (hex) ARRIS Group, Inc. + 28F5D1 (base 16) ARRIS Group, Inc. +@@ -190901,6 +191051,12 @@ B06E72 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + San Diego CA 92121 + US + ++28-82-7C (hex) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++28827C (base 16) Bosch Automative products(Suzhou)Co.,Ltd Changzhou Branch ++ No.17 Longmen Road ++ Changzhou JiangSu 213164 ++ CN ++ + 90-D4-73 (hex) vivo Mobile Communication Co., Ltd. + 90D473 (base 16) vivo Mobile Communication Co., Ltd. + No.1, vivo Road, Chang'an +@@ -190913,30 +191069,6 @@ B06E72 (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Dongguan 523808 + CN + +-CC-3E-79 (hex) ARRIS Group, Inc. +-CC3E79 (base 16) ARRIS Group, Inc. +- 6450 Sequence Drive +- San Diego CA 92121 +- US +- +-00-16-A3 (hex) INGETEAM +-0016A3 (base 16) INGETEAM +- Parque Tecnologico de Bizkaia, Edificio 110 +- Zamudio Bizkaia 48170 +- ES +- +-F0-6C-5D (hex) Xiaomi Communications Co Ltd +-F06C5D (base 16) Xiaomi Communications Co Ltd +- #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road +- Beijing Haidian District 100085 +- CN +- +-24-CF-24 (hex) Beijing Xiaomi Mobile Software Co., Ltd +-24CF24 (base 16) Beijing Xiaomi Mobile Software Co., Ltd +- The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District +- Beijing Beijing 100085 +- CN +- + C8-F0-9E (hex) Espressif Inc. + C8F09E (base 16) Espressif Inc. + Room 204, Building 2, 690 Bibo Rd, Pudong New Area +@@ -190955,16 +191087,16 @@ DC5475 (base 16) Espressif Inc. + San Francisco 94158 + US + +-28-6F-40 (hex) Tonly Technology Co. Ltd +-286F40 (base 16) Tonly Technology Co. Ltd +- Section 37, Zhongkai Hi-Tech Development Zone +- Huizhou Guangdong 516006 +- CN ++00-16-A3 (hex) INGETEAM ++0016A3 (base 16) INGETEAM ++ Parque Tecnologico de Bizkaia, Edificio 110 ++ Zamudio Bizkaia 48170 ++ ES + +-0C-86-C7 (hex) Jabil Circuit (Guangzhou) Limited +-0C86C7 (base 16) Jabil Circuit (Guangzhou) Limited +- Huangpu 128, JunCheng Road +- GuangZhou Guangdong 510530 ++24-CF-24 (hex) Beijing Xiaomi Mobile Software Co., Ltd ++24CF24 (base 16) Beijing Xiaomi Mobile Software Co., Ltd ++ The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District ++ Beijing Beijing 100085 + CN + + 1C-0D-7D (hex) Apple, Inc. +@@ -190985,6 +191117,48 @@ DC5475 (base 16) Espressif Inc. + Cupertino CA 95014 + US + ++F0-6C-5D (hex) Xiaomi Communications Co Ltd ++F06C5D (base 16) Xiaomi Communications Co Ltd ++ #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road ++ Beijing Haidian District 100085 ++ CN ++ ++40-B0-2F (hex) Miele & Cie. KG ++40B02F (base 16) Miele & Cie. KG ++ Carl-Miele-Straße 29 ++ Gütersloh 33332 ++ DE ++ ++18-66-F0 (hex) Jupiter Systems ++1866F0 (base 16) Jupiter Systems ++ 31015 Huntwood Ave ++ Hayward CA 94544-7007 ++ US ++ ++74-60-4C (hex) RØDE ++74604C (base 16) RØDE ++ 107 Carnarvon St ++ Silverwater NSW 2128 ++ AU ++ ++28-6F-40 (hex) Tonly Technology Co. Ltd ++286F40 (base 16) Tonly Technology Co. Ltd ++ Section 37, Zhongkai Hi-Tech Development Zone ++ Huizhou Guangdong 516006 ++ CN ++ ++BC-C7-DA (hex) Earda Technologies co Ltd ++BCC7DA (base 16) Earda Technologies co Ltd ++ Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District ++ Guangzhou Guangdong 511455 ++ CN ++ ++0C-86-C7 (hex) Jabil Circuit (Guangzhou) Limited ++0C86C7 (base 16) Jabil Circuit (Guangzhou) Limited ++ Huangpu 128, JunCheng Road ++ GuangZhou Guangdong 510530 ++ CN ++ + 14-94-6C (hex) Apple, Inc. + 14946C (base 16) Apple, Inc. + 1 Infinite Loop +@@ -190997,17 +191171,11 @@ DC5475 (base 16) Espressif Inc. + Piscataway NJ 08554 + US + +-74-60-4C (hex) RØDE +-74604C (base 16) RØDE +- 107 Carnarvon St +- Silverwater NSW 2128 +- AU +- +-40-B0-2F (hex) Miele & Cie. KG +-40B02F (base 16) Miele & Cie. KG +- Carl-Miele-Straße 29 +- Gütersloh 33332 +- DE ++58-00-32 (hex) Genexis B.V. ++580032 (base 16) Genexis B.V. ++ Lodewijkstraat 1A ++ Eindhoven 5652AC ++ NL + + B4-7D-76 (hex) KNS Group LLC + B47D76 (base 16) KNS Group LLC +@@ -191021,6 +191189,18 @@ C0AD97 (base 16) TECNO MOBILE LIMITED + Hong Kong Hong Kong 999077 + HK + ++B0-38-E2 (hex) Wanan Hongsheng Electronic Co.Ltd ++B038E2 (base 16) Wanan Hongsheng Electronic Co.Ltd ++ 1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province ++ Wanan China/jiangxi 343800 ++ CN ++ ++4C-53-69 (hex) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++4C5369 (base 16) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd ++ No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China ++ ChongQing ChongQing 400025 ++ CN ++ + 70-A9-83 (hex) Cisco Systems, Inc + 70A983 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -191033,16 +191213,22 @@ BCFAEB (base 16) Cisco Systems, Inc + San Jose CA 94568 + US + +-18-66-F0 (hex) Jupiter Systems +-1866F0 (base 16) Jupiter Systems +- 31015 Huntwood Ave +- Hayward CA 94544-7007 +- US ++74-76-7D (hex) shenzhen kexint technology co.,ltd ++74767D (base 16) shenzhen kexint technology co.,ltd ++ 5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City ++ shenzhen guangdong 518000 ++ CN + +-BC-C7-DA (hex) Earda Technologies co Ltd +-BCC7DA (base 16) Earda Technologies co Ltd +- Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District +- Guangzhou Guangdong 511455 ++E0-48-D8 (hex) Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++E048D8 (base 16) Guangzhi Wulian Technology(Guangzhou) Co., Ltd ++ Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, ++ Guangzhou 510623 ++ CN ++ ++F8-E4-A4 (hex) Fiberhome Telecommunication Technologies Co.,LTD ++F8E4A4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD ++ No.5 DongXin Road ++ Wuhan Hubei 430074 + CN + + 84-85-53 (hex) Biznes Systema Telecom, LLC +@@ -191051,12 +191237,6 @@ BCC7DA (base 16) Earda Technologies co Ltd + Moscow 121087 + RU + +-58-00-32 (hex) Genexis B.V. +-580032 (base 16) Genexis B.V. +- Lodewijkstraat 1A +- Eindhoven 5652AC +- NL +- + D8-88-63 (hex) HUAWEI TECHNOLOGIES CO.,LTD + D88863 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -191075,36 +191255,6 @@ C03E50 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Dongguan 523808 + CN + +-4C-53-69 (hex) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd +-4C5369 (base 16) YanFeng Visteon(ChongQing) Automotive Electronic Co.,Ltd +- No.8,Gang’an 2nd Road,Jiangbei District,Chongqing,P.R.China +- ChongQing ChongQing 400025 +- CN +- +-74-76-7D (hex) shenzhen kexint technology co.,ltd +-74767D (base 16) shenzhen kexint technology co.,ltd +- 5th Floor, Building 2, Chunhu Industrial Park, Dongshen Road, Pinghu Street, Longgang District, Shenzhen City +- shenzhen guangdong 518000 +- CN +- +-B0-38-E2 (hex) Wanan Hongsheng Electronic Co.Ltd +-B038E2 (base 16) Wanan Hongsheng Electronic Co.Ltd +- 1st section of industrial pack,Wan'An County,Ji'An City,jiangxi province +- Wanan China/jiangxi 343800 +- CN +- +-E0-48-D8 (hex) Guangzhi Wulian Technology(Guangzhou) Co., Ltd +-E048D8 (base 16) Guangzhi Wulian Technology(Guangzhou) Co., Ltd +- Room 1407, Fuli yingkai building, No. 16, Huaxia Road, Tianhe District, +- Guangzhou 510623 +- CN +- +-F8-E4-A4 (hex) Fiberhome Telecommunication Technologies Co.,LTD +-F8E4A4 (base 16) Fiberhome Telecommunication Technologies Co.,LTD +- No.5 DongXin Road +- Wuhan Hubei 430074 +- CN +- + A0-C9-8B (hex) Nokia Solutions and Networks GmbH & Co. KG + A0C98B (base 16) Nokia Solutions and Networks GmbH & Co. KG + Werinherstrasse 91 +@@ -191117,18 +191267,6 @@ A0C98B (base 16) Nokia Solutions and Networks GmbH & Co. KG + Dongguan Guangdong 523808 + CN + +-B8-F0-B9 (hex) zte corporation +-B8F0B9 (base 16) zte corporation +- 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China +- shenzhen guangdong 518057 +- CN +- +-80-5B-65 (hex) LG Innotek +-805B65 (base 16) LG Innotek +- 26, Hanamsandan 5beon-ro +- Gwangju Gwangsan-gu 506-731 +- KR +- + 4C-9D-22 (hex) ACES Co.,Ltd + 4C9D22 (base 16) ACES Co.,Ltd + TianGong Avenue #916, Tianfu New Area +@@ -191141,22 +191279,28 @@ B8F0B9 (base 16) zte corporation + Shinagawa-ku Tokyo 141-8610 + JP + +-00-73-8D (hex) Shenzhen TINNO Mobile Technology Corp. +-00738D (base 16) Shenzhen TINNO Mobile Technology Corp. +- Building, No.33, Xiandong Rd, Xili +- Nanshan District, Shenzhen PRC 518053 ++B8-F0-B9 (hex) zte corporation ++B8F0B9 (base 16) zte corporation ++ 12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China ++ shenzhen guangdong 518057 + CN + ++80-5B-65 (hex) LG Innotek ++805B65 (base 16) LG Innotek ++ 26, Hanamsandan 5beon-ro ++ Gwangju Gwangsan-gu 506-731 ++ KR ++ + D4-43-0E (hex) Zhejiang Dahua Technology Co., Ltd. + D4430E (base 16) Zhejiang Dahua Technology Co., Ltd. + No.1199,Waterfront Road + Hangzhou Zhejiang 310053 + CN + +-F8-5E-0B (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +-F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. +- No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. +- Chongqing China 401120 ++00-73-8D (hex) Shenzhen TINNO Mobile Technology Corp. ++00738D (base 16) Shenzhen TINNO Mobile Technology Corp. ++ Building, No.33, Xiandong Rd, Xili ++ Nanshan District, Shenzhen PRC 518053 + CN + + 44-D3-AD (hex) Shenzhen TINNO Mobile Technology Corp. +@@ -191165,30 +191309,18 @@ F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. + Nanshan District, Shenzhen PRC 518053 + CN + ++F8-5E-0B (hex) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++F85E0B (base 16) Realme Chongqing Mobile Telecommunications Corp.,Ltd. ++ No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing. ++ Chongqing China 401120 ++ CN ++ + 94-D3-31 (hex) Xiaomi Communications Co Ltd + 94D331 (base 16) Xiaomi Communications Co Ltd + #019, 9th Floor, Building 6, 33 Xi'erqi Middle Road + Beijing Haidian District 100085 + CN + +-34-DD-04 (hex) Minut AB +-34DD04 (base 16) Minut AB +- Baltzarsgatan 23 +- Malmö 21136 +- SE +- +-60-1E-98 (hex) Axevast Technology +-601E98 (base 16) Axevast Technology +- 5F., No. 20, Guanqian Road, Zhongzheng District +- Taipei City 100007 +- TW +- +-A8-F7-D9 (hex) Mist Systems, Inc. +-A8F7D9 (base 16) Mist Systems, Inc. +- 1601 South De Anza Blvd, Suite 248 +- Cupertino CA 95014 +- US +- + 5C-8C-30 (hex) Taicang T&W Electronics + 5C8C30 (base 16) Taicang T&W Electronics + 89# Jiang Nan RD +@@ -191207,6 +191339,18 @@ A8F7D9 (base 16) Mist Systems, Inc. + San Jose CA 94568 + US + ++34-DD-04 (hex) Minut AB ++34DD04 (base 16) Minut AB ++ Baltzarsgatan 23 ++ Malmö 21136 ++ SE ++ ++E8-AC-23 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++E8AC23 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++ No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park ++ Dongguan 523808 ++ CN ++ + 68-D9-27 (hex) HUAWEI TECHNOLOGIES CO.,LTD + 68D927 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +@@ -191243,11 +191387,17 @@ A8F7D9 (base 16) Mist Systems, Inc. + Shanghai 200233 + CN + +-E8-AC-23 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-E8AC23 (base 16) HUAWEI TECHNOLOGIES CO.,LTD +- No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park +- Dongguan 523808 +- CN ++60-1E-98 (hex) Axevast Technology ++601E98 (base 16) Axevast Technology ++ 5F., No. 20, Guanqian Road, Zhongzheng District ++ Taipei City 100007 ++ TW ++ ++A8-F7-D9 (hex) Mist Systems, Inc. ++A8F7D9 (base 16) Mist Systems, Inc. ++ 1601 South De Anza Blvd, Suite 248 ++ Cupertino CA 95014 ++ US + + 2C-3B-70 (hex) AzureWave Technology Inc. + 2C3B70 (base 16) AzureWave Technology Inc. +@@ -191273,12 +191423,6 @@ F4227A (base 16) Guangdong Seneasy Intelligent Technology Co., Ltd. + Piscataway NJ 08554 + US + +-DC-8D-B7 (hex) ATW TECHNOLOGY, INC. +-DC8DB7 (base 16) ATW TECHNOLOGY, INC. +- 1F, No.236 Ba’ai Street, Shulin District +- New Taipei City 23845 +- TW +- + A4-75-B9 (hex) Samsung Electronics Co.,Ltd + A475B9 (base 16) Samsung Electronics Co.,Ltd + #94-1, Imsoo-Dong +@@ -191291,18 +191435,18 @@ A475B9 (base 16) Samsung Electronics Co.,Ltd + Gumi Gyeongbuk 730-350 + KR + +-1C-F8-D0 (hex) Samsung Electronics Co.,Ltd +-1CF8D0 (base 16) Samsung Electronics Co.,Ltd +- #94-1, Imsoo-Dong +- Gumi Gyeongbuk 730-350 +- KR +- + 6C-60-D0 (hex) Huawei Device Co., Ltd. + 6C60D0 (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone + Dongguan Guangdong 523808 + CN + ++1C-F8-D0 (hex) Samsung Electronics Co.,Ltd ++1CF8D0 (base 16) Samsung Electronics Co.,Ltd ++ #94-1, Imsoo-Dong ++ Gumi Gyeongbuk 730-350 ++ KR ++ + 64-0E-6A (hex) SECO-LARM USA Inc + 640E6A (base 16) SECO-LARM USA Inc + 16842 Millikan +@@ -191315,6 +191459,12 @@ A475B9 (base 16) Samsung Electronics Co.,Ltd + San Jose CA 95110 + US + ++DC-8D-B7 (hex) ATW TECHNOLOGY, INC. ++DC8DB7 (base 16) ATW TECHNOLOGY, INC. ++ 1F, No.236 Ba’ai Street, Shulin District ++ New Taipei City 23845 ++ TW ++ + 70-20-84 (hex) Hon Hai Precision Industry Co., Ltd. + 702084 (base 16) Hon Hai Precision Industry Co., Ltd. + GuangDongShenZhen +@@ -191327,6 +191477,12 @@ A475B9 (base 16) Samsung Electronics Co.,Ltd + ShenZhen GuangDong 518109 + CN + ++1C-A0-B8 (hex) Hon Hai Precision Industry Co., Ltd. ++1CA0B8 (base 16) Hon Hai Precision Industry Co., Ltd. ++ GuangDongShenZhen ++ ShenZhen GuangDong 518109 ++ CN ++ + 18-AA-1E (hex) Shenzhen Skyworth Digital Technology CO., Ltd + 18AA1E (base 16) Shenzhen Skyworth Digital Technology CO., Ltd + 4F,Block A, Skyworth?Building, +@@ -191345,18 +191501,6 @@ D452EE (base 16) SKY UK LIMITED + Brentwood Essex 08854 + GB + +-1C-A0-B8 (hex) Hon Hai Precision Industry Co., Ltd. +-1CA0B8 (base 16) Hon Hai Precision Industry Co., Ltd. +- GuangDongShenZhen +- ShenZhen GuangDong 518109 +- CN +- +-E8-EF-05 (hex) MIND TECH INTERNATIONAL LIMITED +-E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED +- FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK +- Hong Kong 999077 +- HK +- + 90-21-06 (hex) SKY UK LIMITED + 902106 (base 16) SKY UK LIMITED + 130 Kings Road +@@ -191375,17 +191519,11 @@ F08756 (base 16) Zyxel Communications Corporation + Hsichu Taiwan 300 + TW + +-18-C3-00 (hex) Nokia +-18C300 (base 16) Nokia +- 600 March Road +- Kanata Ontario K2K 2E6 +- CA +- +-D4-4D-77 (hex) Nokia +-D44D77 (base 16) Nokia +- 600 March Road +- Kanata Ontario K2K 2E6 +- CA ++E8-EF-05 (hex) MIND TECH INTERNATIONAL LIMITED ++E8EF05 (base 16) MIND TECH INTERNATIONAL LIMITED ++ FLAT E 2/F RIALTO MANSION 183 KING'S RD NORTH POINT HK ++ Hong Kong 999077 ++ HK + + 48-27-E2 (hex) Espressif Inc. + 4827E2 (base 16) Espressif Inc. +@@ -191393,12 +191531,6 @@ D44D77 (base 16) Nokia + Shanghai Shanghai 201203 + CN + +-F4-6D-3F (hex) Intel Corporate +-F46D3F (base 16) Intel Corporate +- Lot 8, Jalan Hi-Tech 2/3 +- Kulim Kedah 09000 +- MY +- + 58-B3-8F (hex) New H3C Technologies Co., Ltd + 58B38F (base 16) New H3C Technologies Co., Ltd + 466 Changhe Road, Binjiang District +@@ -191411,12 +191543,30 @@ F46D3F (base 16) Intel Corporate + Zhenjiang Jiangsu 212003 + CN + ++F4-6D-3F (hex) Intel Corporate ++F46D3F (base 16) Intel Corporate ++ Lot 8, Jalan Hi-Tech 2/3 ++ Kulim Kedah 09000 ++ MY ++ + 6C-72-4A (hex) Onkyo Technology K.K. + 6C724A (base 16) Onkyo Technology K.K. + Lux Building (5th floor),1-1-41 Kawamata + Higashiosaka City Osaka 577-0063 + JP + ++18-C3-00 (hex) Nokia ++18C300 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ ++D4-4D-77 (hex) Nokia ++D44D77 (base 16) Nokia ++ 600 March Road ++ Kanata Ontario K2K 2E6 ++ CA ++ + DC-05-39 (hex) Cisco Systems, Inc + DC0539 (base 16) Cisco Systems, Inc + 80 West Tasman Drive +@@ -191429,18 +191579,6 @@ DC0539 (base 16) Cisco Systems, Inc + East Greenwich RI 02818 + US + +-E0-F3-18 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD +-E0F318 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD +- No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County +- Chengdu Sichuan 611330 +- CN +- +-C4-64-F2 (hex) Infinix mobility limited +-C464F2 (base 16) Infinix mobility limited +- RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG +- HongKong HongKong 999077 +- HK +- + B0-1F-47 (hex) Heights Telecom T ltd + B01F47 (base 16) Heights Telecom T ltd + Moshe Lerer 15 +@@ -191495,11 +191633,17 @@ BC1541 (base 16) Nokia + Kanata Ontario K2K 2E6 + CA + +-94-6D-AE (hex) Mellanox Technologies, Inc. +-946DAE (base 16) Mellanox Technologies, Inc. +- 350 Oakmead Parkway, Suite 100 +- Sunnyvale CA 94085 +- US ++E0-F3-18 (hex) Sichuan Tianyi Comheart Telecom Co.,LTD ++E0F318 (base 16) Sichuan Tianyi Comheart Telecom Co.,LTD ++ No.198,First Section,Snow Mountain Avenue, Jinyuan Town, Dayi County ++ Chengdu Sichuan 611330 ++ CN ++ ++C4-64-F2 (hex) Infinix mobility limited ++C464F2 (base 16) Infinix mobility limited ++ RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG ++ HongKong HongKong 999077 ++ HK + + E4-A6-34 (hex) Universal Electronics, Inc. + E4A634 (base 16) Universal Electronics, Inc. +@@ -191513,50 +191657,44 @@ E4A634 (base 16) Universal Electronics, Inc. + Racho Santa MArgarita CA 92688 + US + +-50-63-91 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-506391 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++14-65-6A (hex) HUAWEI TECHNOLOGIES CO.,LTD ++14656A (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-E8-A3-4E (hex) HUAWEI TECHNOLOGIES CO.,LTD +-E8A34E (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++6C-B7-E2 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++6CB7E2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-04-18-92 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-041892 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++C4-75-EA (hex) HUAWEI TECHNOLOGIES CO.,LTD ++C475EA (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-14-65-6A (hex) HUAWEI TECHNOLOGIES CO.,LTD +-14656A (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++90-25-F2 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++9025F2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-AC-B6-87 (hex) Arcadyan Corporation +-ACB687 (base 16) Arcadyan Corporation +- No.8, Sec.2, Guangfu Rd. +- Hsinchu City Hsinchu 30071 +- TW +- +-6C-B7-E2 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-6CB7E2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++50-63-91 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++506391 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-C4-75-EA (hex) HUAWEI TECHNOLOGIES CO.,LTD +-C475EA (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++E8-A3-4E (hex) HUAWEI TECHNOLOGIES CO.,LTD ++E8A34E (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN + +-90-25-F2 (hex) HUAWEI TECHNOLOGIES CO.,LTD +-9025F2 (base 16) HUAWEI TECHNOLOGIES CO.,LTD ++04-18-92 (hex) HUAWEI TECHNOLOGIES CO.,LTD ++041892 (base 16) HUAWEI TECHNOLOGIES CO.,LTD + No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park + Dongguan 523808 + CN +@@ -191573,18 +191711,36 @@ C475EA (base 16) HUAWEI TECHNOLOGIES CO.,LTD + Hsinchu Hsinchu,Taiwan R.O.C. 30352 + TW + +-EC-E6-1D (hex) Huawei Device Co., Ltd. +-ECE61D (base 16) Huawei Device Co., Ltd. +- No.2 of Xincheng Road, Songshan Lake Zone +- Dongguan Guangdong 523808 +- CN +- + 48-6D-BB (hex) Vestel Elektronik San ve Tic. A.S. + 486DBB (base 16) Vestel Elektronik San ve Tic. A.S. + Organize san + Manisa Turket 45030 + TR + ++94-6D-AE (hex) Mellanox Technologies, Inc. ++946DAE (base 16) Mellanox Technologies, Inc. ++ 350 Oakmead Parkway, Suite 100 ++ Sunnyvale CA 94085 ++ US ++ ++00-84-ED (hex) LEXMARK INTERNATIONAL, INC. ++0084ED (base 16) LEXMARK INTERNATIONAL, INC. ++ 740 W. New Circle Rd. ++ Lexington KY 40550 ++ US ++ ++AC-B6-87 (hex) Arcadyan Corporation ++ACB687 (base 16) Arcadyan Corporation ++ No.8, Sec.2, Guangfu Rd. ++ Hsinchu City Hsinchu 30071 ++ TW ++ ++B4-3A-31 (hex) Silicon Laboratories ++B43A31 (base 16) Silicon Laboratories ++ 400 West Cesar Chavez ++ Austin TX 78701 ++ US ++ + 4C-63-AD (hex) Huawei Device Co., Ltd. + 4C63AD (base 16) Huawei Device Co., Ltd. + No.2 of Xincheng Road, Songshan Lake Zone +@@ -191597,8 +191753,38 @@ DCDB27 (base 16) Huawei Device Co., Ltd. + Dongguan Guangdong 523808 + CN + ++70-42-D3 (hex) Ruijie Networks Co.,LTD ++7042D3 (base 16) Ruijie Networks Co.,LTD ++ No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city ++ Fuzhou Fujian 350002 ++ CN ++ ++44-12-44 (hex) Aruba, a Hewlett Packard Enterprise Company ++441244 (base 16) Aruba, a Hewlett Packard Enterprise Company ++ 3333 Scott Blvd ++ Santa Clara CA 95054 ++ US ++ ++EC-E6-1D (hex) Huawei Device Co., Ltd. ++ECE61D (base 16) Huawei Device Co., Ltd. ++ No.2 of Xincheng Road, Songshan Lake Zone ++ Dongguan Guangdong 523808 ++ CN ++ + CC-96-E5 (hex) Dell Inc. + CC96E5 (base 16) Dell Inc. + One Dell Way + Round Rock TX 78682 + US ++ ++40-75-C3 (hex) Technicolor CH USA Inc. ++4075C3 (base 16) Technicolor CH USA Inc. ++ 5030 Sugarloaf Parkway Bldg 6 ++ Lawrenceville GA 30044 ++ US ++ ++F4-1A-B0 (hex) Shenzhen Xingguodu Technology Co., Ltd. ++F41AB0 (base 16) Shenzhen Xingguodu Technology Co., Ltd. ++ 18th Floor, Block B, Building 10, Shenzhen Bay Science and Technology Ecological Park, Nanshan District, Shenzhen ++ Shenzhen Guangdong 518000 ++ CN +diff --git a/hwdb.d/ma-medium.txt b/hwdb.d/ma-medium.txt +index 3ff16ce0bf..3c84424c58 100644 +--- a/hwdb.d/ma-medium.txt ++++ b/hwdb.d/ma-medium.txt +@@ -245,9 +245,6 @@ B00000-BFFFFF (base 16) KeyWest Networks, Inc + Orange CA 92865 + US + +-88-5D-90 (hex) Private +-F00000-FFFFFF (base 16) Private +- + 60-95-CE (hex) Beijing Sinomedisite Bio-tech Co.,Ltd + B00000-BFFFFF (base 16) Beijing Sinomedisite Bio-tech Co.,Ltd + No.9 Kangding Street,Economic-Technological Development Area +@@ -5078,6 +5075,36 @@ B00000-BFFFFF (base 16) Labman Automation + Stokesley North Yorkshire TS9 5NQ + GB + ++30-3D-51 (hex) Fink Telecom Services GmbH ++000000-0FFFFF (base 16) Fink Telecom Services GmbH ++ Paradieshofstrasse 101 ++ Basel 4054 ++ CH ++ ++30-3D-51 (hex) Amber-Link Network Technology Co.,Ltd. ++600000-6FFFFF (base 16) Amber-Link Network Technology Co.,Ltd. ++ Bld. #1, St. 356, Rd. Guo Shoujing ++ Shanghai China ++ CN ++ ++88-5D-90 (hex) IEEE Registration Authority ++F00000-FFFFFF (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ PISCATAWAY NJ 08854 ++ US ++ ++2C-69-1D (hex) IBM ++800000-8FFFFF (base 16) IBM ++ 9000 South Rita Rd ++ Tucson AZ 85744 ++ US ++ ++2C-69-1D (hex) SPEEDTECH CORP. ++400000-4FFFFF (base 16) SPEEDTECH CORP. ++ No. 568, Sec. 1, Minsheng N. Rd., Guishan Dist., Taoyuan City 338, Taiwan ++ Taoyuan 338 ++ TW ++ + 4C-4B-F9 (hex) Shenzhen dingsheng technology co., LTD + 400000-4FFFFF (base 16) Shenzhen dingsheng technology co., LTD + Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district +@@ -9926,6 +9953,30 @@ FC-61-79 (hex) Kvaliteta Systems and Solutions Private Limited + Trivandrum Kerala 695583 + IN + ++2C-69-1D (hex) Shenzhen Gigalight Technology Co., Ltd ++700000-7FFFFF (base 16) Shenzhen Gigalight Technology Co., Ltd ++ 2/f, Block F3, Changfeng Ind. Park, Liuxian 3 Rd., Shenzhen, Guangdong, China 1/f, Block F4, Changfeng Ind. Park, 68 Zone,Baoan District,Shenzhen,China ++ Shenzhen Guangdong 518100 ++ CN ++ ++2C-69-1D (hex) Panasonic Appliances Marketing Asia Pacific (A division of Panasonic Malaysia Sdn Bhd ++A00000-AFFFFF (base 16) Panasonic Appliances Marketing Asia Pacific (A division of Panasonic Malaysia Sdn Bhd ++ Lot 10, Jalan 13/2 ++ Petaling Jaya Selangor 46200 ++ MY ++ ++30-3D-51 (hex) TalkGo, Inc. ++C00000-CFFFFF (base 16) TalkGo, Inc. ++ 3518 Fremont Ave N#473 ++ Seattle WA 98103 ++ US ++ ++2C-69-1D (hex) KATEK SE ++100000-1FFFFF (base 16) KATEK SE ++ Promenadeplatz 12 ++ Munich 80333 ++ DE ++ + 20-85-93 (hex) UNILUMIN GROUP CO.,LTD + 300000-3FFFFF (base 16) UNILUMIN GROUP CO.,LTD + No.112 Yongfu Rd.,BaoanDistrict, +@@ -10319,9 +10370,6 @@ E00000-EFFFFF (base 16) ShenZhen Arts Changhua Intelligent Technology Co., + 8C-C8-F4 (hex) Private + 700000-7FFFFF (base 16) Private + +-98-02-D8 (hex) Private +-F00000-FFFFFF (base 16) Private +- + D8-86-0B (hex) Get SAT + 200000-2FFFFF (base 16) Get SAT + Hamada 12 +@@ -15083,6 +15131,42 @@ A00000-AFFFFF (base 16) TeraNXT Global India Pvt Ltd. + Rockwall TX 75032 + US + ++30-3D-51 (hex) Percent.com ++E00000-EFFFFF (base 16) Percent.com ++ 167/2, Fakirerpool D.I.T Extention Road, Motiheel ++ Dhaka Dhaka 1000 ++ BD ++ ++98-02-D8 (hex) IEEE Registration Authority ++F00000-FFFFFF (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ PISCATAWAY NJ 08854 ++ US ++ ++2C-69-1D (hex) Sunsa, Inc ++300000-3FFFFF (base 16) Sunsa, Inc ++ 3422 Fait Ave ++ Baltimore MD 21224 ++ US ++ ++2C-69-1D (hex) SHENZHEN EX-LINK TECHNOLOGY CO.,LTD ++900000-9FFFFF (base 16) SHENZHEN EX-LINK TECHNOLOGY CO.,LTD ++ 818 Building 2,Nanyou Fourth Industrial Zone,No 1124 ,Nanshan Avenue,Nanguang Community,Nanshan Street,Nanshan District,Shenzhen ++ SHENZHEN GUANGDONG 518052 ++ CN ++ ++2C-69-1D (hex) Aparian, Inc. ++C00000-CFFFFF (base 16) Aparian, Inc. ++ 2709 S Orange AveUnit D ++ Santa Ana CA 92707 ++ US ++ ++2C-69-1D (hex) Carnegie Robotics ++600000-6FFFFF (base 16) Carnegie Robotics ++ 4501 Hatfield Street ++ Pittsburgh PA 15201 ++ US ++ + 4C-4B-F9 (hex) Shandong Linkotech Electronic Co., Ltd. + 600000-6FFFFF (base 16) Shandong Linkotech Electronic Co., Ltd. + 22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone +@@ -15152,9 +15236,6 @@ F00000-FFFFFF (base 16) Private + 78-C2-C0 (hex) Private + F00000-FFFFFF (base 16) Private + +-14-1F-BA (hex) Private +-F00000-FFFFFF (base 16) Private +- + 58-FC-DB (hex) Private + F00000-FFFFFF (base 16) Private + +@@ -20099,6 +20180,42 @@ E00000-EFFFFF (base 16) ACCO Brands USA LLC + Mail box 15123 Haifa 3508409 + IL + ++2C-69-1D (hex) Hunan Xiangjiang Kunpeng Information Technology Co., Ltd. ++000000-0FFFFF (base 16) Hunan Xiangjiang Kunpeng Information Technology Co., Ltd. ++ Building 1# and Building 4#, No. 67 Ziyuan Road, Xueshi Street, Yuelu District, ++ Changsha Hunan 410006 ++ CN ++ ++30-3D-51 (hex) Destiny Automate Limited ++700000-7FFFFF (base 16) Destiny Automate Limited ++ Aw House, 6-8 Stuart Street ++ Luton Bedfordshire LU1 2SJ ++ GB ++ ++2C-69-1D (hex) Abode Systems Inc ++200000-2FFFFF (base 16) Abode Systems Inc ++ 2625 Middlefield Road ++ Palo Alto CA 94306 ++ US ++ ++14-1F-BA (hex) IEEE Registration Authority ++F00000-FFFFFF (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ PISCATAWAY NJ 08854 ++ US ++ ++2C-69-1D (hex) Shenzhen Daren HI-Tech Electronics Co., Ltd. ++B00000-BFFFFF (base 16) Shenzhen Daren HI-Tech Electronics Co., Ltd. ++ Room 401, No. 5, Jiayi Industrial Park, Guihua Community, Guanlan Street, Longhua District, Shenzhen ++ Shenzhen Guangdong 518109 ++ CN ++ ++2C-69-1D (hex) Ascentac Inc. ++D00000-DFFFFF (base 16) Ascentac Inc. ++ 11F.-1, No.80, Minzu 1st Rd., Sanmin Dist., Kaohsiung City 807, Taiwan (R.O.C.) ++ Kaohsiung City Taiwan 807 ++ TW ++ + 20-85-93 (hex) Great Lite International + 700000-7FFFFF (base 16) Great Lite International + 11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist., +@@ -20735,9 +20852,6 @@ B00000-BFFFFF (base 16) YINUO-LINK LIMITED + 80-0A-80 (hex) Private + F00000-FFFFFF (base 16) Private + +-C0-D3-91 (hex) Private +-B00000-BFFFFF (base 16) Private +- + 1C-FD-08 (hex) MESHBOX FOUNDATION PTE. LTD. + E00000-EFFFFF (base 16) MESHBOX FOUNDATION PTE. LTD. + 152 Beach Road #14-02 GATEWAY EAST TOWER +@@ -20780,9 +20894,6 @@ A00000-AFFFFF (base 16) Banmak Technogies Co.,Ltd + Huizhou Guangdong 516100 + CN + +-B8-D8-12 (hex) Private +-F00000-FFFFFF (base 16) Private +- + A8-3F-A1 (hex) Imecon Engineering SrL + 000000-0FFFFF (base 16) Imecon Engineering SrL + via Gerola 13/15 +@@ -25189,3 +25300,21 @@ D00000-DFFFFF (base 16) XOR UK Corporation Limited + Unit 11-12, Stanhope Gate, Stanhope Rd + Camberley Surrey GU15 3DW + GB ++ ++C0-D3-91 (hex) Celliber Technologies Pvt Limited ++B00000-BFFFFF (base 16) Celliber Technologies Pvt Limited ++ No.1027, 24th Main, 11th Cross, ++ Bangalore Karnataka 560102 ++ IN ++ ++2C-69-1D (hex) LG Electronics Inc. ++500000-5FFFFF (base 16) LG Electronics Inc. ++ LG Twin Towers, 128, Yeoui-daero, Yeongdeungpo-gu ++ Seoul 150-721 ++ KR ++ ++B8-D8-12 (hex) IEEE Registration Authority ++F00000-FFFFFF (base 16) IEEE Registration Authority ++ 445 Hoes Lane ++ PISCATAWAY NJ 08854 ++ US +diff --git a/hwdb.d/ma-small.txt b/hwdb.d/ma-small.txt +index dfaf330309..7492357661 100644 +--- a/hwdb.d/ma-small.txt ++++ b/hwdb.d/ma-small.txt +@@ -4010,9 +4010,6 @@ E6F000-E6FFFF (base 16) Amazon Technologies Inc. + Reno NV 89507 + US + +-70-B3-D5 (hex) Private +-11A000-11AFFF (base 16) Private +- + 70-B3-D5 (hex) Mettler Toledo + 4FC000-4FCFFF (base 16) Mettler Toledo + 1571 Northpointe Parkway +@@ -5957,6 +5954,12 @@ C35000-C35FFF (base 16) Peter Huber Kaeltemaschinenbau AG + Offenburg Ba-Wue 77656 + DE + ++70-B3-D5 (hex) Mahindra Electric Mobility Limited ++11A000-11AFFF (base 16) Mahindra Electric Mobility Limited ++ 690, Gold Hill Square, Hosur Road, Bommanahalli ++ Bangalore Karnataka 560068 ++ IN ++ + 70-B3-D5 (hex) EVCO SPA + A80000-A80FFF (base 16) EVCO SPA + VIA FELTRE N. 81 +@@ -11753,23 +11756,59 @@ CC6000-CC6FFF (base 16) Genius Vision Digital Private Limited + Houston TX 77024-7338 + US + ++8C-1F-64 (hex) GO development GmbH ++7BC000-7BCFFF (base 16) GO development GmbH ++ Zeppelinstraße 126 ++ Esslingen am Neckar 73730 ++ DE ++ + 8C-1F-64 (hex) Abode Systems Inc + B13000-B13FFF (base 16) Abode Systems Inc + 2625 Middlefield Road + Palo Alto CA 94306 + US + ++8C-1F-64 (hex) Ear Micro LLC ++58C000-58CFFF (base 16) Ear Micro LLC ++ 4043 Broadway ++ Kansas City MO 64111 ++ US ++ + 8C-1F-64 (hex) DAVE SRL + 0EF000-0EFFFF (base 16) DAVE SRL + VIA TALPONEDO 29/A + PORCIA PORDENONE 330850 + IT + +-8C-1F-64 (hex) GO development GmbH +-7BC000-7BCFFF (base 16) GO development GmbH +- Zeppelinstraße 126 +- Esslingen am Neckar 73730 +- DE ++8C-1F-64 (hex) Season Electronics Ltd ++6BB000-6BBFFF (base 16) Season Electronics Ltd ++ 600 Nest Business Park ++ Havant Hampshire PO9 5TL ++ GB ++ ++8C-1F-64 (hex) Integer.pl S.A. ++D5E000-D5EFFF (base 16) Integer.pl S.A. ++ Wielicka 28 ++ Krakow 30-552 ++ PL ++ ++8C-1F-64 (hex) Abbott Diagnostics Technologies AS ++300000-300FFF (base 16) Abbott Diagnostics Technologies AS ++ P. O. Box 6863 Rodeløkka ++ Oslo 0504 ++ NO ++ ++8C-1F-64 (hex) Suzhou Leamore Optronics Co., Ltd. ++662000-662FFF (base 16) Suzhou Leamore Optronics Co., Ltd. ++ Block 12-301, NO 99 Jinji Lake Road, Suzhou Industrial Park, Suzhou ++ Suzhou Jiangsu 215000 ++ CN ++ ++8C-1F-64 (hex) Breas Medical AB ++98F000-98FFFF (base 16) Breas Medical AB ++ Företagsvägen 1 ++ Mölnlycke SE-435 33 ++ SE + + 70-B3-D5 (hex) System West dba ICS Electronics + E06000-E06FFF (base 16) System West dba ICS Electronics +@@ -17534,10 +17573,10 @@ CD2000-CD2FFF (base 16) TRUMPF Huttinger GmbH + Co. KG, + Göttingen 37075 + DE + +-8C-1F-64 (hex) dinosys +-5CB000-5CBFFF (base 16) dinosys +- 501,35,Gwangnaruro 6-gil, +- Seoul Seoul 133-832 ++8C-1F-64 (hex) WonATech Co., Ltd. ++890000-890FFF (base 16) WonATech Co., Ltd. ++ 7, Neunganmal 1-gil ++ Seocho-gu Seoul 06801 + KR + + 8C-1F-64 (hex) HIROSAWA ELECTRIC Co.,Ltd. +@@ -17546,12 +17585,24 @@ CD2000-CD2FFF (base 16) TRUMPF Huttinger GmbH + Co. KG, + Otaku Tokyo 1440034 + JP + +-8C-1F-64 (hex) WonATech Co., Ltd. +-890000-890FFF (base 16) WonATech Co., Ltd. +- 7, Neunganmal 1-gil +- Seocho-gu Seoul 06801 ++8C-1F-64 (hex) dinosys ++5CB000-5CBFFF (base 16) dinosys ++ 501,35,Gwangnaruro 6-gil, ++ Seoul Seoul 133-832 + KR + ++8C-1F-64 (hex) Agramkow A/S ++8D5000-8D5FFF (base 16) Agramkow A/S ++ Augustenborg Landevej 19 ++ Sønderborg 6400 ++ DK ++ ++8C-1F-64 (hex) Gogo BA ++092000-092FFF (base 16) Gogo BA ++ 105 Edgeview Drive ++ Broomfield CO 80021 ++ US ++ + 70-B3-D5 (hex) YUYAMA MFG Co.,Ltd + BBB000-BBBFFF (base 16) YUYAMA MFG Co.,Ltd + 3-3-1 +@@ -23516,6 +23567,12 @@ CAF000-CAFFFF (base 16) BRS Sistemas Eletrônicos + Porto Alegre RS 91380-000 + BR + ++8C-1F-64 (hex) DORLET SAU ++1BD000-1BDFFF (base 16) DORLET SAU ++ Albert Eistein 34 ++ Alava SPAIN 01510 ++ ES ++ + 70-B3-D5 (hex) DISMUNTEL SAL + 92C000-92CFFF (base 16) DISMUNTEL SAL + Pol ind cotes +@@ -29251,3 +29308,9 @@ DFE000-DFEFFF (base 16) Nuvation Energy + 651 North Broad StreetSuite 206 + Middletown DE 19709 + US ++ ++8C-1F-64 (hex) Belden India Private Limited ++54A000-54AFFF (base 16) Belden India Private Limited ++ Plot No. D-228, Chakan MIDC Phase 2, ++ Village Bhamboli, Taluka:Khed Pune, Maharashtra 410 507 ++ IN +diff --git a/hwdb.d/pci.ids b/hwdb.d/pci.ids +index dddb2b639a..ba1be0bbc1 100644 +--- a/hwdb.d/pci.ids ++++ b/hwdb.d/pci.ids +@@ -1,8 +1,8 @@ + # + # List of PCI ID's + # +-# Version: 2022.05.09 +-# Date: 2022-05-09 03:15:02 ++# Version: 2022.05.18 ++# Date: 2022-05-18 03:15:02 + # + # Maintained by Albert Pool, Martin Mares, and other volunteers from + # the PCI ID Project at https://pci-ids.ucw.cz/. +@@ -1054,15 +1054,17 @@ + 131c Kaveri [Radeon R7 Graphics] + 131d Kaveri [Radeon R6 Graphics] + 13e9 Ariel +- 13fe Cyan Skillfish ++ 13fe Cyan Skillfish [BC-250] + 1478 Navi 10 XL Upstream Port of PCI Express Switch + 1479 Navi 10 XL Downstream Port of PCI Express Switch ++ 1506 Mendocino + 154c Kryptos [Radeon RX 350] + 1462 7c28 MS-7C28 Motherboard + 154e Garfield + 1551 Arlene + 1552 Pooky + 1561 Anubis ++ 15bf Phoenix + 15d8 Picasso/Raven 2 [Radeon Vega Series / Radeon Vega Mobile Series] + 103c 8615 Pavilion Laptop 15-cw1xxx + 17aa 3181 ThinkCentre M75n IoT +@@ -1092,6 +1094,7 @@ + 1640 Rembrandt Radeon High Definition Audio Controller + 164c Lucienne + 164d Rembrandt ++ 164f Phoenix + 1681 Rembrandt [Radeon 680M] + 1714 BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series] + 103c 168b ProBook 4535s +@@ -3754,6 +3757,7 @@ + 7310 Navi 10 [Radeon Pro W5700X] + 7312 Navi 10 [Radeon Pro W5700] + 7314 Navi 10 USB ++ 731e TDC-150 + 731f Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] + 1002 0b36 Reference RX 5700 XT + 1458 2313 Radeon RX 5700 XT Gaming OC +@@ -3765,16 +3769,18 @@ + 7341 Navi 14 [Radeon Pro W5500] + 7347 Navi 14 [Radeon Pro W5500M] + 734f Navi 14 [Radeon Pro W5300M] +- 7360 Navi 12 [Radeon Pro 5600M / V520] ++ 7360 Navi 12 [Radeon Pro 5600M/V520/BC-160] + 7362 Navi 12 [Radeon Pro V520] + 7388 Arcturus GL-XL + 738c Arcturus GL-XL [Instinct MI100] + 738e Arcturus GL-XL [Instinct MI100] ++ 73a1 Navi 21 [Radeon Pro V620] + 73a2 Navi 21 Pro-XTA [Radeon Pro W6900X] + 73a3 Navi 21 GL-XL [Radeon PRO W6800] + 73a4 Navi 21 USB + 73a5 Navi 21 [Radeon RX 6950 XT] + 73ab Navi 21 Pro-XLA [Radeon Pro W6800X/Radeon Pro W6800X Duo] ++ 73ae Navi 21 [Radeon Pro V620 MxGPU] + 73af Navi 21 [Radeon RX 6900 XT] + 148c 2414 Navi 21 XTXH [PowerColor Red Devil RX 6900 XT Ultimate] + 73bf Navi 21 [Radeon RX 6800/6800 XT / 6900 XT] +@@ -3784,6 +3790,7 @@ + 1eae 6701 XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black + 73c3 Navi 22 + 73c4 Navi 22 USB ++ 73ce Navi22-XL SRIOV MxGPU + 73df Navi 22 [Radeon RX 6700/6700 XT/6750 XT / 6800M] + 73e0 Navi 23 + 73e1 Navi 23 WKS-XM [Radeon PRO W6600M] +@@ -3797,6 +3804,8 @@ + 740f Aldebaran + 7421 Navi 24 [Radeon PRO W6500M] + 7422 Navi 24 [Radeon PRO W6400] ++ 7423 Navi 24 [Radeon PRO W6300/W6300M] ++ 7424 Navi 24 [Radeon RX 6300] + 743f Navi 24 [Radeon RX 6400 / 6500 XT] + 1da2 e457 PULSE AMD Radeon RX 6500 XT + 7833 RS350 Host Bridge +@@ -4851,6 +4860,7 @@ + 1481 Starship/Matisse IOMMU + 1482 Starship/Matisse PCIe Dummy Host Bridge + 1483 Starship/Matisse GPP Bridge ++ 01de fff9 Gimlet Baseboard + 1484 Starship/Matisse Internal PCIe GPP Bridge 0 to bus[E:B] + 1485 Starship/Matisse Reserved SPP + 1486 Starship/Matisse Cryptographic Coprocessor PSPCPP +@@ -5509,6 +5519,7 @@ + 1028 1f24 PERC S300 Controller + # NV-RAM Adapter used in Dell DR appliances + 0073 NV-RAM Adapter ++ 1028 PCIe Bridge riser + 1029 Siemens Nixdorf IS + 102a LSI Logic + 0000 HYDRA +@@ -13010,13 +13021,31 @@ + 3fc4 RME Digi9652 (Hammerfall) + 3fc5 RME Hammerfall DSP + 3fc6 RME Hammerfall DSP MADI ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ 5000 Alveo U200 XDMA Platform ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ 5004 Alveo U250 XDMA Platform + 5005 Alveo U250 ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ 500c Alveo U280 XDMA Platform ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ 5020 Alveo U50 XMDA Platform ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ 505c Alveo U55C + 7038 FPGA Card XC7VX690T + 17aa 402f FPGA XC7VX690T-3FFG1157E + 8019 Memory controller + 1eec 0201 VSEC10232X Dual-port 100Gb/s Etherent PCIe + 8380 Ellips ProfiXpress Profibus Master + 8381 Ellips Santos Frame Grabber ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ d000 Alveo U200 Golden Image ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ d004 Alveo U250 Golden Image ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ d00c Alveo U280 Golden Image ++# Reference: https://xilinx.github.io/Alveo-Cards/master/management-specification/appendix_a.html ++ d020 Alveo U50 Golden Image + d154 Copley Controls CAN card (PCI-CAN-02) + # SED is assigned Xilinx PCI device IDs ebf0 through ebff + ebf0 SED Systems Modulator/Demodulator +@@ -18774,7 +18803,7 @@ + 6089 T62100-6089 Unified Wire Ethernet Controller + 608a T62100-608a Unified Wire Ethernet Controller + 6092 T62100-KR Unified Wire Ethernet Controller +- 01de fff9 Gimlet T6 ++ 01de fff9 Gimlet Baseboard + 6401 T6225-CR Unified Wire Ethernet Controller + 6402 T6225-SO-CR Unified Wire Ethernet Controller + 6403 T6425-CR Unified Wire Ethernet Controller +@@ -18800,7 +18829,7 @@ + 6489 T62100-6089 Unified Wire Ethernet Controller + 648a T62100-608a Unified Wire Ethernet Controller + 6492 T62100-KR Unified Wire Ethernet Controller +- 01de fff9 Gimlet T6 ++ 01de fff9 Gimlet Baseboard + 6501 T6225-CR Unified Wire Storage Controller + 6502 T6225-SO-CR Unified Wire Storage Controller + 6503 T6425-CR Unified Wire Storage Controller +@@ -23378,6 +23407,8 @@ + 13c2 3016 TT-budget S2-4200 Twin + 4254 0552 S952 v3 + 1ae0 Google, Inc. ++# NVMe drive in GCP ++ 001f NVMe device + 0042 Compute Engine Virtual Ethernet [gVNIC] + abcd Airbrush Combined Paintbox IPU/Oscar Edge TPU [Pixel Neural Core] + 1ae3 SANBlaze Technology, Inc. +@@ -23619,6 +23650,7 @@ + 1028 2113 BOSS-N1 Modular + 1028 2151 BOSS-N1 Modular ET + 1028 2196 ROR-N100 ++ 1b4b 2241 Santa Cruz NVMe Host Adapter + 1d49 0306 ThinkSystem M.2 NVMe 2-Bay RAID Enablement Kit + 1d49 0307 ThinkSystem 7mm NVMe 2-Bay Rear RAID Enablement Kit + 9120 88SE9120 SATA 6Gb/s Controller +@@ -24324,6 +24356,7 @@ + 1000 HL-2000 AI Training Accelerator [Gaudi] + # PCIe accelerator card for Deep Learning training tasks with secured firmware + 1010 HL-2000 AI Training Accelerator [Gaudi secured] ++1da8 Corigine, Inc. + 1dad Fungible + 1db2 ATP ELECTRONICS INC + 1db7 Phytium Technology Co., Ltd. +@@ -24834,6 +24867,7 @@ + 1f3f 00a1 Dual Port 100GE SDI5.0 + 9032 SDI5.1 + 1f3f 00a1 Dual Port 100GE SDI5.1 ++1f40 Netac Technology Co.,Ltd + 1faa Hexaflake (Shanghai) Information Technology Co., Ltd. + 1fab Unifabrix Ltd. + 0000 Nexus Alpha IVPU +@@ -28042,6 +28076,7 @@ + 8086 000a Ethernet Network Adapter X710-T4L for OCP 3.0 + 8086 000b Ethernet Network Adapter X710-T2L for OCP 3.0 + 8086 000c Ethernet Network Adapter X710-T2L for OCP 3.0 ++ 8086 000d Ethernet 10G 2P X710-T2L-t OCP + 8086 000f Ethernet Network Adapter X710-T2L for OCP 3.0 + 8086 4009 Ethernet Network Adapter X710-T2L + 8086 4012 Ethernet Network Adapter X710-T4L for OCP 3.0 +@@ -31531,8 +31566,14 @@ + 31a2 Celeron/Pentium Silver Processor Integrated Sensor Solution + 31a8 Celeron/Pentium Silver Processor USB 3.0 xHCI Controller + 1849 31a8 Celeron/Pentium Silver Processor USB 3.0 xHCI Controller +- 31ac Celeron/Pentium Silver Processor Serial IO I2C Host Controller +- 31ae Celeron/Pentium Silver Processor Serial IO I2C Host Controller ++ 31ac Celeron/Pentium Silver Processor I2C 0 ++ 31ae Celeron/Pentium Silver Processor I2C 1 ++ 31b0 Celeron/Pentium Silver Processor I2C 2 ++ 31b2 Celeron/Pentium Silver Processor I2C 3 ++ 31b4 Celeron/Pentium Silver Processor I2C 4 ++ 31b6 Celeron/Pentium Silver Processor I2C 5 ++ 31b8 Celeron/Pentium Silver Processor I2C 6 ++ 31ba Celeron/Pentium Silver Processor I2C 7 + 31bc Celeron/Pentium Silver Processor Serial IO UART Host Controller + 31be Celeron/Pentium Silver Processor Serial IO UART Host Controller + 31c0 Celeron/Pentium Silver Processor Serial IO UART Host Controller +@@ -33012,6 +33053,7 @@ + 8817 Platform Controller Hub EG20T I2C Controller + 8818 Platform Controller Hub EG20T Controller Area Network (CAN) Controller + 8819 Platform Controller Hub EG20T IEEE 1588 Hardware Assist ++ 8a03 Processor Power and Thermal Controller + 8a0d Ice Lake Thunderbolt 3 NHI #1 + 8a12 Ice Lake-LP Processor Host Bridge/DRAM Registers + 8a13 Ice Lake Thunderbolt 3 USB Controller +diff --git a/hwdb.d/usb.ids b/hwdb.d/usb.ids +index 7f41fd0b07..07c927c993 100644 +--- a/hwdb.d/usb.ids ++++ b/hwdb.d/usb.ids +@@ -9,8 +9,8 @@ + # The latest version can be obtained from + # http://www.linux-usb.org/usb.ids + # +-# Version: 2022.05.09 +-# Date: 2022-05-09 20:34:10 ++# Version: 2022.05.20 ++# Date: 2022-05-20 20:34:10 + # + + # Vendors, devices and interfaces. Please keep sorted. +@@ -17301,7 +17301,7 @@ + a001 Bandit Action Camera Batt-Stick + 1391 IdealTEK, Inc. + 1000 URTC-1000 +-1395 Sennheiser Communications ++1395 DSEA A/S + 0025 Headset [PC 8] + 0026 SC230 + 0027 SC260 +@@ -17343,7 +17343,7 @@ + 0065 MB 660 + 0066 SP 20 D UC + 0067 SP 20 D MS +- 006b SC5x5 MS ++ 006b SC6x5 + 0072 Headset + 3556 USB Headset + 1397 BEHRINGER International GmbH diff --git a/SOURCES/0323-hwdb-Add-Google-Meet-speakermic.patch b/SOURCES/0323-hwdb-Add-Google-Meet-speakermic.patch new file mode 100644 index 0000000..8ea0ad9 --- /dev/null +++ b/SOURCES/0323-hwdb-Add-Google-Meet-speakermic.patch @@ -0,0 +1,30 @@ +From 45ba681f5f1a27f0b0b87bf961bce014fe73e056 Mon Sep 17 00:00:00 2001 +From: Pablo Ceballos +Date: Thu, 26 May 2022 22:23:35 +0000 +Subject: [PATCH] hwdb: Add Google Meet speakermic + +It has the same issue as the Google Hangouts Meet speakermic but a +different VID/PID. + +(cherry picked from commit 1a2134fb51ab1e84c213f2a309dab25da3a5369d) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 2e4f6f4293..7204e4ea2a 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -515,8 +515,9 @@ evdev:input:b0003v0458p0708* + # Google + ########################################################### + +-# Google Hangouts Meet speakermic ++# Google Hangouts Meet speakermic and Google Meet speakermic + evdev:input:b0003v18D1p8001* ++evdev:input:b0003v18D1p8007* + KEYBOARD_KEY_b002f=reserved # Disable micmute key + + ########################################################### diff --git a/SOURCES/0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch b/SOURCES/0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch new file mode 100644 index 0000000..50576aa --- /dev/null +++ b/SOURCES/0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch @@ -0,0 +1,31 @@ +From 3e7648919309c1dfc677a1d383ddba0937fa14a9 Mon Sep 17 00:00:00 2001 +From: Maccraft123 +Date: Thu, 2 Jun 2022 20:05:22 +0200 +Subject: [PATCH] hwdb: Add accel orientation quirk for the Aya Neo Next + +(cherry picked from commit cc9e3a55d3d3558c309b1ebbde0f2cc26d69ee54) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 104fe05187..3de4616f7f 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -170,6 +170,14 @@ sensor:modalias:acpi:BOSC0200*:dmi:*svn*ASUSTeK*:*pn*TP412UA:* + sensor:modalias:acpi:SMO8500*:dmi:*:svnStandard:pnWCBT1011::* + ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1 + ++######################################### ++# AYANEO ++######################################### ++ ++# AYANEO NEXT ++sensor:modalias:acpi:BMI0160*:dmi:*:svnAYANEO:pn*NEXT*:* ++ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 ++ + ######################################### + # Chuwi + ######################################### diff --git a/SOURCES/0325-hwdb-Add-HP-Dev-One.patch b/SOURCES/0325-hwdb-Add-HP-Dev-One.patch new file mode 100644 index 0000000..d14411e --- /dev/null +++ b/SOURCES/0325-hwdb-Add-HP-Dev-One.patch @@ -0,0 +1,31 @@ +From b6eda5abff85cb5764900d1da944096ece4b657c Mon Sep 17 00:00:00 2001 +From: Jeremy Soller +Date: Wed, 8 Jun 2022 07:59:46 -0600 +Subject: [PATCH] hwdb: Add HP Dev One + +This enables the microphone mute and programmable hotkey for the HP Dev +One. + +(cherry picked from commit 295e0291bff52a12d4ce7d7481c4da464002fbb6) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 7204e4ea2a..51c631929e 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -764,6 +764,11 @@ evdev:name:gpio-keys:phys:gpio-keys/input0:ev:23:dmi:*:svnHewlett-Packard:pnHPSt + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnOMEN*:pvr* + KEYBOARD_KEY_a1=!calc + ++# HP Dev One ++evdev:atkbd:dmi:*:rvnHP:rn8A78:* ++ KEYBOARD_KEY_81=f20 # Fn+F8; Microphone mute button ++ KEYBOARD_KEY_f9=prog1 # Fn+F12; Programmable hotkey ++ + ########################################################## + # Huawei + ########################################################## diff --git a/SOURCES/0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch b/SOURCES/0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch new file mode 100644 index 0000000..c7c5f5c --- /dev/null +++ b/SOURCES/0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch @@ -0,0 +1,27 @@ +From 82d43b95791c5303f6e83f9de496aa377cb56702 Mon Sep 17 00:00:00 2001 +From: Jan Luebbe +Date: Mon, 13 Jun 2022 16:40:18 +0200 +Subject: [PATCH] hwdb: analyzers: remove generic "STM Device in DFU Mode" + +The USB ID v0483pDF11 is used by the ROM code in many STMicroelectronics +devices (for firmware download) and not just signal analyzers. + +(cherry picked from commit 5d049ff9204b9aad48c62c296def4daa4b53005e) + +Related: #2087778 +--- + hwdb.d/70-analyzers.hwdb | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb +index 899ece3a01..0a1911507a 100644 +--- a/hwdb.d/70-analyzers.hwdb ++++ b/hwdb.d/70-analyzers.hwdb +@@ -29,7 +29,6 @@ usb:v1679p3001* + + # Power Delivery Analyzers + usb:v1679p6003* +-usb:v0483pDF11* + ID_SIGNAL_ANALYZER=1 + + ########################################################### diff --git a/SOURCES/0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch b/SOURCES/0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch new file mode 100644 index 0000000..daace34 --- /dev/null +++ b/SOURCES/0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch @@ -0,0 +1,27 @@ +From cdaf92f134f358ad681678162a4bbf50e4a6477a Mon Sep 17 00:00:00 2001 +From: Akihiko Odaki +Date: Sat, 11 Jun 2022 07:58:52 +0900 +Subject: [PATCH] hwdb: Add Lenovo ThinkPad C13 Yoga + +(cherry picked from commit c3b8113af061eaf696fec46a1a9f38600d588f32) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 3de4616f7f..971fac84d5 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -416,6 +416,10 @@ sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:* + sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnRammus*:* + ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 + ++# Lenovo ThinkPad C13 Yoga ++sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnMorphius*:* ++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 ++ + ######################################### + # GP-electronic + ######################################### diff --git a/SOURCES/0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch b/SOURCES/0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch new file mode 100644 index 0000000..77f71eb --- /dev/null +++ b/SOURCES/0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch @@ -0,0 +1,24 @@ +From 5278a0144c6824f430d74a60d67f61a921d464e7 Mon Sep 17 00:00:00 2001 +From: Michal Stanke +Date: Mon, 11 Jul 2022 14:11:12 +0200 +Subject: [PATCH] Fix automatic screen rotation for Asus Transformer T100TAM + +(cherry picked from commit 81706277965be18afd819f0e458baa6bf49fdc2e) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 971fac84d5..b1a83e8561 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -132,6 +132,7 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT300CHI:* + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnM80TA:* + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TA:* + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAF:* ++sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:*pnT100TAM:* + sensor:modalias:acpi:INVN6500*:dmi:*svnASUSTeK*:pnT200TA:* + ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 + diff --git a/SOURCES/0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch b/SOURCES/0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch new file mode 100644 index 0000000..735cb92 --- /dev/null +++ b/SOURCES/0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch @@ -0,0 +1,29 @@ +From 8e0965646e6e00945d866c1131a261f1c4cf4fca Mon Sep 17 00:00:00 2001 +From: Mitchell Freiderich +Date: Mon, 18 Jul 2022 01:03:44 -0500 +Subject: [PATCH] hwdb: Add Acer Aspire A317-33 (#24050) + +Enables the power button on the Acer Aspire 3 A317-33 + +(cherry picked from commit 0216462f0836596fb0b2bf7b819bfd1d5b45b951) + +Related: #2087778 +--- + hwdb.d/60-keyboard.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-keyboard.hwdb b/hwdb.d/60-keyboard.hwdb +index 51c631929e..095bb34cd8 100644 +--- a/hwdb.d/60-keyboard.hwdb ++++ b/hwdb.d/60-keyboard.hwdb +@@ -154,6 +154,10 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*8930:* + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspire*7750G:* + KEYBOARD_KEY_e0=!pageup + ++# Acer Aspire 3 A317-33 ++evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAspireA317-33:* ++ KEYBOARD_KEY_55=power ++ + # Acer Aspire One AO532h + evdev:atkbd:dmi:bvn*:bvr*:bd*:svnAcer*:pnAO532h:* + KEYBOARD_KEY_84=bluetooth diff --git a/SOURCES/0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch b/SOURCES/0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch new file mode 100644 index 0000000..7706be7 --- /dev/null +++ b/SOURCES/0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch @@ -0,0 +1,28 @@ +From c4ca5a1a08e052cb4c5be621a9128d3fe1bb8111 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Joaqu=C3=ADn=20Ignacio=20Aramend=C3=ADa?= + +Date: Sat, 30 Jul 2022 16:56:04 -0300 +Subject: [PATCH] Add ACCEL_MOUNT_MATRIX for OXP Mini + +(cherry picked from commit e18569cc7271ba8b2b2be90cbb285980915cf4a2) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index b1a83e8561..fc688ef4d3 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -767,6 +767,10 @@ sensor:modalias:acpi:BOSC0200*:dmi:*svnONE-NETBOOKTECHNOLOGYCO*:pnOne-Mix3Pro:* + sensor:modalias:acpi:BOSC0200*:dmi:bvnAmericanMegatrendsInc.:bvr5.12:bd07/17/2019:*svnDefaultstring:pnDefaultstring:pvrDefaultstring:rvnDefaultstring:rnDefaultstring:rvrDefaultstring:cvnDefaultstring:ct3:cvrDefaultstring:* + ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1 + ++# One-Netbook OneXPlayer Mini (and maybe others) ++sensor:modalias:acpi:BMI0160*:dmi:*:rnONEXPLAYER:rvrV01:* ++ ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, -1 ++ + ######################################### + # Peaq + ######################################### diff --git a/SOURCES/0331-Added-DERE-DBook-D10-24173.patch b/SOURCES/0331-Added-DERE-DBook-D10-24173.patch new file mode 100644 index 0000000..917f8e3 --- /dev/null +++ b/SOURCES/0331-Added-DERE-DBook-D10-24173.patch @@ -0,0 +1,33 @@ +From 8a7803d8c57ad39d05541ce6e6c0460eeae9da01 Mon Sep 17 00:00:00 2001 +From: Gio +Date: Wed, 3 Aug 2022 04:26:03 -0400 +Subject: [PATCH] Added DERE DBook D10 (#24173) + +* Added DERE DBook D10 + +(cherry picked from commit 2d2efed2eeebad6860e9fa4880d02286175dcffa) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index fc688ef4d3..1c3f6b62bb 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -339,6 +339,14 @@ sensor:modalias:acpi:INVN6500*:dmi:*svnDellInc.*:pnVenue8Pro3845:* + sensor:modalias:acpi:INVN6500*:dmi:*svnDell*:pnVenue10Pro5055:* + ACCEL_MOUNT_MATRIX=0, -1, 0; 1, 0, 0; 0, 0, 1 + ++######################################### ++# DERE ++######################################### ++ ++# DBook D10 ++sensor:modalias:acpi:KIOX000A*:dmi:bvnAmericanMegatrendsInternational,LLC.:bvrJP2V1.05:bd04/27/2022:br1.5:efr1.3:svnDefaultstring:* ++ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 ++ + ######################################### + # DEXP + ######################################### diff --git a/SOURCES/0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch b/SOURCES/0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch new file mode 100644 index 0000000..e76d47f --- /dev/null +++ b/SOURCES/0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch @@ -0,0 +1,28 @@ +From e70784afa017a3d721a2fd5202ae31b12d806069 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Tue, 9 Aug 2022 18:08:24 +0200 +Subject: [PATCH] hwdb: analyzers: Clarify the type of devices we want listed + +(cherry picked from commit 838d0fd3d5f890e986c631eda2a4945b0c661d19) + +Related: #2087778 +--- + hwdb.d/70-analyzers.hwdb | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb +index 0a1911507a..7f31ca3ea3 100644 +--- a/hwdb.d/70-analyzers.hwdb ++++ b/hwdb.d/70-analyzers.hwdb +@@ -1,8 +1,9 @@ + # This file is part of systemd. + # + # Database for signal analyzers (protocol analyzers, logic analyzers, +-# oscilloscopes, multimeters, bench power supplies, etc.) that should +-# be accessible to the seat owner. ++# oscilloscopes, multimeters, bench power supplies, etc.) or just ++# anything that has to do with electronics and that should be ++# accessible to the seat owner. + # + # Permitted keys: + # Specify if a device is a signal analyzer diff --git a/SOURCES/0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch b/SOURCES/0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch new file mode 100644 index 0000000..41c4845 --- /dev/null +++ b/SOURCES/0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch @@ -0,0 +1,38 @@ +From 056b1d368b14e9664b69499cbcba49bc04be7e52 Mon Sep 17 00:00:00 2001 +From: Bastien Nocera +Date: Thu, 21 Apr 2022 11:11:22 +0200 +Subject: [PATCH] hwdb: Add Greaseweazle "drives" to the list of analyzers + +They're floppy disk flux readers and writers used in digital +preservation and can be broadly considered to be "analyzers" of magnetic +fluxes. + +This will have the intended side-effect of giving access to the device +to users at the console, obsoleting: +https://github.com/keirf/greaseweazle/blob/master/scripts/49-greaseweazle.rules + +(cherry picked from commit 9ab755dce50bfb6f1f614f57fe3a8b65b570b5b9) + +Related: #2087778 +--- + hwdb.d/70-analyzers.hwdb | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/hwdb.d/70-analyzers.hwdb b/hwdb.d/70-analyzers.hwdb +index 7f31ca3ea3..821ebcb1ca 100644 +--- a/hwdb.d/70-analyzers.hwdb ++++ b/hwdb.d/70-analyzers.hwdb +@@ -9,6 +9,13 @@ + # Specify if a device is a signal analyzer + # ID_SIGNAL_ANALYZER=1|0 + ++########################################################### ++# Greaseweazle ++########################################################### ++# Greaseweazle ++usb:v1209p4D69* ++ ID_SIGNAL_ANALYZER=1 ++ + ########################################################### + # Total Phase + ########################################################### diff --git a/SOURCES/0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch b/SOURCES/0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch new file mode 100644 index 0000000..d5073b0 --- /dev/null +++ b/SOURCES/0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch @@ -0,0 +1,59 @@ +From f06a6ff8b3dba8ba48ca5bb6ebaa04a86b4c06d6 Mon Sep 17 00:00:00 2001 +From: Alper Nebi Yasak +Date: Wed, 10 Aug 2022 22:09:32 +0300 +Subject: [PATCH] hwdb: Apply existing accel orientation quirk to all + Chromebooks + +The cros-ec-accel and cros-ec-accel-legacy kernel modules internally +correct for the board-specific accelerometer mounting orientations. +Their sensor outputs are in a standard reference frame consistent across +different boards, so the orientation matrix already added for a number +of devices should apply to every device using cros-ec accelerometers. +The different matrix for the 'Nocturne' board seems to be an error. + +Replace the existing hwdb rules for select Chromebooks with generic +rules that apply to all Chromebooks. + +(cherry picked from commit 1800f7098a3e91a1d28697ef11a15e4b4193d21f) + +Related: #2087778 +--- + hwdb.d/60-sensor.hwdb | 22 ++++------------------ + 1 file changed, 4 insertions(+), 18 deletions(-) + +diff --git a/hwdb.d/60-sensor.hwdb b/hwdb.d/60-sensor.hwdb +index 1c3f6b62bb..7978675943 100644 +--- a/hwdb.d/60-sensor.hwdb ++++ b/hwdb.d/60-sensor.hwdb +@@ -406,27 +406,13 @@ sensor:modalias:acpi:KXCJ9000*:dmi:*:bvrZY-8-BI-PX4S70VTR400-X423B-005-D:*:rvnAM + ######################################### + # Google Chromebooks + ######################################### +-sensor:modalias:platform:cros-ec-accel:dmi:*:svnGOOGLE:* +- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 +- +-# caroline board (Samsung Chromebook Pro) reports itself as svnGoogle +-sensor:modalias:platform:cros-ec-accel:dmi:*:svnGoogle:pnCaroline*:* +- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 +- +-# Dell Inspiron Chromebook 14 2-in-1 +-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnVayne*:* +- ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 +- +-# nocturne board (Google Pixel Slate) +-sensor:modalias:platform:cros-ec-accel:dmi:*Google_Nocturne*:* +- ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1 + +-# rammus board (Asus Chromebook Flip C433) +-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnRammus*:* ++# CrOS EC & kernel drivers internally correct for per-board sensor orientations, ++# but they return values in the inverse direction (Android & W3C specs vs HID). ++sensor:modalias:platform:cros-ec-accel:* + ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 + +-# Lenovo ThinkPad C13 Yoga +-sensor:modalias:platform:cros-ec-accel:dmi:*svnGoogle:pnMorphius*:* ++sensor:modalias:platform:cros-ec-accel-legacy:* + ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1 + + ######################################### diff --git a/SOURCES/0335-shared-install-fix-crash-when-reenable-is-called-wit.patch b/SOURCES/0335-shared-install-fix-crash-when-reenable-is-called-wit.patch new file mode 100644 index 0000000..de44419 --- /dev/null +++ b/SOURCES/0335-shared-install-fix-crash-when-reenable-is-called-wit.patch @@ -0,0 +1,26 @@ +From b419d118455739757b1b426989964123d2e94869 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= +Date: Tue, 12 Apr 2022 20:42:32 +0200 +Subject: [PATCH] shared/install: fix crash when reenable is called without + --root + +(cherry picked from commit 6e961aeb262521742a4cd92e4620de193f159f7c) + +Resolves: #2120222 +--- + src/shared/install.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/shared/install.c b/src/shared/install.c +index d3661521a9..b8d18d1484 100644 +--- a/src/shared/install.c ++++ b/src/shared/install.c +@@ -2827,7 +2827,7 @@ static int normalize_linked_files( + return r; + + const char *p = NULL; +- if (i && i->path) ++ if (i && i->path && i->root) + /* Use startswith here, because we know that paths are normalized, and + * path_startswith() would give us a relative path, but we need an absolute path + * relative to i->root. diff --git a/SOURCES/0336-scope-allow-unprivileged-delegation-on-scopes.patch b/SOURCES/0336-scope-allow-unprivileged-delegation-on-scopes.patch new file mode 100644 index 0000000..d11b642 --- /dev/null +++ b/SOURCES/0336-scope-allow-unprivileged-delegation-on-scopes.patch @@ -0,0 +1,343 @@ +From f23d0328e563fa5534377297153daa098664147f Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 1 Jun 2022 10:15:06 +0200 +Subject: [PATCH] scope: allow unprivileged delegation on scopes + +Previously it was possible to set delegate property for scope, but you +were not able to allow unprivileged process to manage the scope's cgroup +hierarchy. This is useful when launching manager process that will run +unprivileged but is supposed to manage its own (scope) sub-hierarchy. + +Fixes #21683 + +(cherry picked from commit 03860190fefce8bbea3a6f0e77919b882ade517c) + +Resolves: #2120604 +--- + src/basic/unit-def.c | 1 + + src/basic/unit-def.h | 1 + + src/core/dbus-scope.c | 6 ++ + src/core/scope.c | 130 ++++++++++++++++++++++++++++++++----- + src/core/scope.h | 3 + + src/shared/bus-unit-util.c | 5 ++ + test/units/testsuite-19.sh | 14 ++++ + 7 files changed, 143 insertions(+), 17 deletions(-) + +diff --git a/src/basic/unit-def.c b/src/basic/unit-def.c +index 2667e61dc4..9408141842 100644 +--- a/src/basic/unit-def.c ++++ b/src/basic/unit-def.c +@@ -170,6 +170,7 @@ DEFINE_STRING_TABLE_LOOKUP(path_state, PathState); + static const char* const scope_state_table[_SCOPE_STATE_MAX] = { + [SCOPE_DEAD] = "dead", + [SCOPE_RUNNING] = "running", ++ [SCOPE_START_CHOWN] = "start-chown", + [SCOPE_ABANDONED] = "abandoned", + [SCOPE_STOP_SIGTERM] = "stop-sigterm", + [SCOPE_STOP_SIGKILL] = "stop-sigkill", +diff --git a/src/basic/unit-def.h b/src/basic/unit-def.h +index f80e554d2b..5fcd51c095 100644 +--- a/src/basic/unit-def.h ++++ b/src/basic/unit-def.h +@@ -114,6 +114,7 @@ typedef enum PathState { + + typedef enum ScopeState { + SCOPE_DEAD, ++ SCOPE_START_CHOWN, + SCOPE_RUNNING, + SCOPE_ABANDONED, + SCOPE_STOP_SIGTERM, +diff --git a/src/core/dbus-scope.c b/src/core/dbus-scope.c +index 109ad6f2ef..0f59622166 100644 +--- a/src/core/dbus-scope.c ++++ b/src/core/dbus-scope.c +@@ -186,6 +186,12 @@ int bus_scope_set_property( + r = bus_kill_context_set_transient_property(u, &s->kill_context, name, message, flags, error); + if (r != 0) + return r; ++ ++ if (streq(name, "User")) ++ return bus_set_transient_user_relaxed(u, name, &s->user, message, flags, error); ++ ++ if (streq(name, "Group")) ++ return bus_set_transient_user_relaxed(u, name, &s->group, message, flags, error); + } + + return 0; +diff --git a/src/core/scope.c b/src/core/scope.c +index 63d3288caf..a4da45ac43 100644 +--- a/src/core/scope.c ++++ b/src/core/scope.c +@@ -6,6 +6,7 @@ + #include "alloc-util.h" + #include "dbus-scope.h" + #include "dbus-unit.h" ++#include "exit-status.h" + #include "load-dropin.h" + #include "log.h" + #include "process-util.h" +@@ -18,9 +19,11 @@ + #include "strv.h" + #include "unit-name.h" + #include "unit.h" ++#include "user-util.h" + + static const UnitActiveState state_translation_table[_SCOPE_STATE_MAX] = { + [SCOPE_DEAD] = UNIT_INACTIVE, ++ [SCOPE_START_CHOWN] = UNIT_ACTIVATING, + [SCOPE_RUNNING] = UNIT_ACTIVE, + [SCOPE_ABANDONED] = UNIT_ACTIVE, + [SCOPE_STOP_SIGTERM] = UNIT_DEACTIVATING, +@@ -39,6 +42,7 @@ static void scope_init(Unit *u) { + s->runtime_max_usec = USEC_INFINITY; + s->timeout_stop_usec = u->manager->default_timeout_stop_usec; + u->ignore_on_isolate = true; ++ s->user = s->group = NULL; + } + + static void scope_done(Unit *u) { +@@ -50,6 +54,9 @@ static void scope_done(Unit *u) { + s->controller_track = sd_bus_track_unref(s->controller_track); + + s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source); ++ ++ s->user = mfree(s->user); ++ s->group = mfree(s->group); + } + + static usec_t scope_running_timeout(Scope *s) { +@@ -107,7 +114,7 @@ static void scope_set_state(Scope *s, ScopeState state) { + old_state = s->state; + s->state = state; + +- if (!IN_SET(state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL)) ++ if (!IN_SET(state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL, SCOPE_START_CHOWN)) + s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source); + + if (IN_SET(state, SCOPE_DEAD, SCOPE_FAILED)) { +@@ -353,26 +360,72 @@ fail: + scope_enter_dead(s, SCOPE_FAILURE_RESOURCES); + } + +-static int scope_start(Unit *u) { +- Scope *s = SCOPE(u); ++static int scope_enter_start_chown(Scope *s) { ++ Unit *u = UNIT(s); ++ pid_t pid; + int r; + + assert(s); ++ assert(s->user); + +- if (unit_has_name(u, SPECIAL_INIT_SCOPE)) +- return -EPERM; ++ r = scope_arm_timer(s, usec_add(now(CLOCK_MONOTONIC), u->manager->default_timeout_start_usec)); ++ if (r < 0) ++ return r; + +- if (s->state == SCOPE_FAILED) +- return -EPERM; ++ r = unit_fork_helper_process(u, "(sd-chown-cgroup)", &pid); ++ if (r < 0) ++ goto fail; + +- /* We can't fulfill this right now, please try again later */ +- if (IN_SET(s->state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL)) +- return -EAGAIN; ++ if (r == 0) { ++ uid_t uid = UID_INVALID; ++ gid_t gid = GID_INVALID; + +- assert(s->state == SCOPE_DEAD); ++ if (!isempty(s->user)) { ++ const char *user = s->user; + +- if (!u->transient && !MANAGER_IS_RELOADING(u->manager)) +- return -ENOENT; ++ r = get_user_creds(&user, &uid, &gid, NULL, NULL, 0); ++ if (r < 0) { ++ log_unit_error_errno(UNIT(s), r, "Failed to resolve user \"%s\": %m", user); ++ _exit(EXIT_USER); ++ } ++ } ++ ++ if (!isempty(s->group)) { ++ const char *group = s->group; ++ ++ r = get_group_creds(&group, &gid, 0); ++ if (r < 0) { ++ log_unit_error_errno(UNIT(s), r, "Failed to resolve group \"%s\": %m", group); ++ _exit(EXIT_GROUP); ++ } ++ } ++ ++ r = cg_set_access(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, uid, gid); ++ if (r < 0) { ++ log_unit_error_errno(UNIT(s), r, "Failed to adjust control group access: %m"); ++ _exit(EXIT_CGROUP); ++ } ++ ++ _exit(EXIT_SUCCESS); ++ } ++ ++ r = unit_watch_pid(UNIT(s), pid, true); ++ if (r < 0) ++ goto fail; ++ ++ scope_set_state(s, SCOPE_START_CHOWN); ++ ++ return 1; ++fail: ++ s->timer_event_source = sd_event_source_disable_unref(s->timer_event_source); ++ return r; ++} ++ ++static int scope_enter_running(Scope *s) { ++ Unit *u = UNIT(s); ++ int r; ++ ++ assert(s); + + (void) bus_scope_track_controller(s); + +@@ -380,9 +433,6 @@ static int scope_start(Unit *u) { + if (r < 0) + return r; + +- (void) unit_realize_cgroup(u); +- (void) unit_reset_accounting(u); +- + unit_export_state_files(u); + + r = unit_attach_pids_to_cgroup(u, u->pids, NULL); +@@ -416,6 +466,37 @@ static int scope_start(Unit *u) { + return 1; + } + ++static int scope_start(Unit *u) { ++ Scope *s = SCOPE(u); ++ ++ assert(s); ++ ++ if (unit_has_name(u, SPECIAL_INIT_SCOPE)) ++ return -EPERM; ++ ++ if (s->state == SCOPE_FAILED) ++ return -EPERM; ++ ++ /* We can't fulfill this right now, please try again later */ ++ if (IN_SET(s->state, SCOPE_STOP_SIGTERM, SCOPE_STOP_SIGKILL)) ++ return -EAGAIN; ++ ++ assert(s->state == SCOPE_DEAD); ++ ++ if (!u->transient && !MANAGER_IS_RELOADING(u->manager)) ++ return -ENOENT; ++ ++ (void) unit_realize_cgroup(u); ++ (void) unit_reset_accounting(u); ++ ++ /* We check only for User= option to keep behavior consistent with logic for service units, ++ * i.e. having 'Delegate=true Group=foo' w/o specifing User= has no effect. */ ++ if (s->user && unit_cgroup_delegate(u)) ++ return scope_enter_start_chown(s); ++ ++ return scope_enter_running(s); ++} ++ + static int scope_stop(Unit *u) { + Scope *s = SCOPE(u); + +@@ -547,7 +628,17 @@ static void scope_notify_cgroup_empty_event(Unit *u) { + } + + static void scope_sigchld_event(Unit *u, pid_t pid, int code, int status) { +- assert(u); ++ Scope *s = SCOPE(u); ++ ++ assert(s); ++ ++ if (s->state == SCOPE_START_CHOWN) { ++ if (!is_clean_exit(code, status, EXIT_CLEAN_COMMAND, NULL)) ++ scope_enter_dead(s, SCOPE_FAILURE_RESOURCES); ++ else ++ scope_enter_running(s); ++ return; ++ } + + /* If we get a SIGCHLD event for one of the processes we were interested in, then we look for others to + * watch, under the assumption that we'll sooner or later get a SIGCHLD for them, as the original +@@ -585,6 +676,11 @@ static int scope_dispatch_timer(sd_event_source *source, usec_t usec, void *user + scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT); + break; + ++ case SCOPE_START_CHOWN: ++ log_unit_warning(UNIT(s), "User lookup timed out. Entering failed state."); ++ scope_enter_dead(s, SCOPE_FAILURE_TIMEOUT); ++ break; ++ + default: + assert_not_reached(); + } +diff --git a/src/core/scope.h b/src/core/scope.h +index 03a9ba4324..def1541652 100644 +--- a/src/core/scope.h ++++ b/src/core/scope.h +@@ -34,6 +34,9 @@ struct Scope { + bool was_abandoned; + + sd_event_source *timer_event_source; ++ ++ char *user; ++ char *group; + }; + + extern const UnitVTable scope_vtable; +diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c +index c211fe34d5..33b0b947b7 100644 +--- a/src/shared/bus-unit-util.c ++++ b/src/shared/bus-unit-util.c +@@ -2130,6 +2130,11 @@ static int bus_append_scope_property(sd_bus_message *m, const char *field, const + if (streq(field, "TimeoutStopSec")) + return bus_append_parse_sec_rename(m, field, eq); + ++ /* Scope units don't have execution context but we still want to allow setting these two, ++ * so let's handle them separately. */ ++ if (STR_IN_SET(field, "User", "Group")) ++ return bus_append_string(m, field, eq); ++ + return 0; + } + +diff --git a/test/units/testsuite-19.sh b/test/units/testsuite-19.sh +index ee4eb8431e..6ce6d3d429 100755 +--- a/test/units/testsuite-19.sh ++++ b/test/units/testsuite-19.sh +@@ -3,6 +3,16 @@ + set -eux + set -o pipefail + ++test_scope_unpriv_delegation() { ++ useradd test ||: ++ trap "userdel -r test" RETURN ++ ++ systemd-run --uid=test -p User=test -p Delegate=yes --slice workload.slice --unit workload0.scope --scope \ ++ test -w /sys/fs/cgroup/workload.slice/workload0.scope -a \ ++ -w /sys/fs/cgroup/workload.slice/workload0.scope/cgroup.procs -a \ ++ -w /sys/fs/cgroup/workload.slice/workload0.scope/cgroup.subtree_control ++} ++ + if grep -q cgroup2 /proc/filesystems ; then + systemd-run --wait --unit=test0.service -p "DynamicUser=1" -p "Delegate=" \ + test -w /sys/fs/cgroup/system.slice/test0.service/ -a \ +@@ -31,6 +41,10 @@ if grep -q cgroup2 /proc/filesystems ; then + + # And now check again, "io" should have vanished + grep -qv io /sys/fs/cgroup/system.slice/cgroup.controllers ++ ++ # Check that unprivileged delegation works for scopes ++ test_scope_unpriv_delegation ++ + else + echo "Skipping TEST-19-DELEGATE, as the kernel doesn't actually support cgroup v2" >&2 + fi diff --git a/SOURCES/0337-udev-net_id-add-rhel-9.1-naming-scheme.patch b/SOURCES/0337-udev-net_id-add-rhel-9.1-naming-scheme.patch new file mode 100644 index 0000000..65725c9 --- /dev/null +++ b/SOURCES/0337-udev-net_id-add-rhel-9.1-naming-scheme.patch @@ -0,0 +1,55 @@ +From ef6d76202a28d374a96c4dff1e40c7bd4551de0c Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Wed, 24 Aug 2022 17:18:47 +0200 +Subject: [PATCH] udev/net_id: add "rhel-9.1" naming scheme + +RHEL-only + +Resolves: #2121144 +--- + man/systemd.net-naming-scheme.xml | 6 ++++++ + src/shared/netif-naming-scheme.c | 1 + + src/shared/netif-naming-scheme.h | 1 + + 3 files changed, 8 insertions(+) + +diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml +index 73d08b681d..23bfcead1f 100644 +--- a/man/systemd.net-naming-scheme.xml ++++ b/man/systemd.net-naming-scheme.xml +@@ -415,6 +415,12 @@ + + + ++ ++ rhel-9.1 ++ ++ Same as naming scheme rhel-9.0. ++ ++ + + + Note that latest may be used to denote the latest scheme known (to this +diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c +index 44d011a9b7..adda731f63 100644 +--- a/src/shared/netif-naming-scheme.c ++++ b/src/shared/netif-naming-scheme.c +@@ -24,6 +24,7 @@ static const NamingScheme naming_schemes[] = { + { "v249", NAMING_V249 }, + { "v250", NAMING_V250 }, + { "rhel-9.0", NAMING_RHEL_9_0 }, ++ { "rhel-9.1", NAMING_RHEL_9_1 }, + /* … add more schemes here, as the logic to name devices is updated … */ + + EXTRA_NET_NAMING_MAP +diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h +index 5c86cb4545..f27c0593c3 100644 +--- a/src/shared/netif-naming-scheme.h ++++ b/src/shared/netif-naming-scheme.h +@@ -49,6 +49,7 @@ typedef enum NamingSchemeFlags { + NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY, + NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF, + NAMING_RHEL_9_0 = NAMING_V250 | NAMING_BRIDGE_MULTIFUNCTION_SLOT, ++ NAMING_RHEL_9_1 = NAMING_RHEL_9_0, + + EXTRA_NET_NAMING_SCHEMES + diff --git a/SOURCES/systemd-user b/SOURCES/systemd-user index 2725df9..8607d4f 100644 --- a/SOURCES/systemd-user +++ b/SOURCES/systemd-user @@ -2,6 +2,7 @@ # # Used by systemd --user instances. +account sufficient pam_unix.so no_pass_expiry account include system-auth session required pam_selinux.so close diff --git a/SPECS/systemd.spec b/SPECS/systemd.spec index a1d9caf..cb1a3f8 100644 --- a/SPECS/systemd.spec +++ b/SPECS/systemd.spec @@ -21,7 +21,7 @@ Name: systemd Url: https://www.freedesktop.org/wiki/Software/systemd Version: 250 -Release: 4%{?dist} +Release: 11%{?dist} # For a breakdown of the licensing, see README License: LGPLv2+ and MIT and GPLv2+ Summary: System and Service Manager @@ -111,6 +111,310 @@ Patch0030: 0030-Net-naming-scheme-for-RHEL-9.0.patch Patch0031: 0031-core-decrease-log-level-of-messages-about-use-of-Kil.patch Patch0032: 0032-ci-replace-apt-key-with-signed-by.patch Patch0033: 0033-ci-fix-clang-13-installation.patch +Patch0034: 0034-test-check-systemd-RPM-macros.patch +Patch0035: 0035-test-do-not-assume-x86-64-arch-in-TEST-58-REPART.patch +Patch0036: 0036-tests-add-repart-tests-for-block-devices-with-1024-2.patch +Patch0037: 0037-test-accept-both-unpadded-and-padded-partition-sizes.patch +Patch0038: 0038-test-lvm-2.03.15-dropped-the-static-autoactivation.patch +Patch0039: 0039-test-accept-GC-ed-units-in-newer-LVM.patch +Patch0040: 0040-shared-Add-more-dlopen-tests.patch +Patch0041: 0041-systemctl-Show-how-long-a-service-ran-for-after-it-e.patch +Patch0042: 0042-time-util-introduce-TIMESTAMP_UNIX.patch +Patch0043: 0043-systemctl-man-update-docs-for-timestamp.patch +Patch0044: 0044-systemctl-make-timestamp-affect-the-show-verb-as-wel.patch +Patch0045: 0045-tests-allow-running-all-the-services-with-SYSTEMD_LO.patch +Patch0046: 0046-coredump-raise-the-coredump-save-size-on-64bit-syste.patch +Patch0047: 0047-repart-fix-sector-size-handling.patch +Patch0048: 0048-mkdir-allow-to-create-directory-whose-path-contains-.patch +Patch0049: 0049-mkdir-CHASE_NONEXISTENT-cannot-used-in-chase_symlink.patch +Patch0050: 0050-meson-move-efi-file-lists-closer-to-where-they-are-u.patch +Patch0051: 0051-meson-move-efi-summary-section-to-src-boot-efi.patch +Patch0052: 0052-meson-report-SBAT-settings.patch +Patch0053: 0053-boot-Build-BCD-parser-only-on-arches-supported-by-Wi.patch +Patch0054: 0054-meson-Remove-efi-cc-option.patch +Patch0055: 0055-meson-Get-objcopy-location-from-compiler.patch +Patch0056: 0056-meson-Use-files-for-source-lists-for-boot-and-fundam.patch +Patch0057: 0057-meson-Use-files-for-tests.patch +Patch0058: 0058-tests-add-fuzz-bcd.patch +Patch0059: 0059-meson-Use-files-for-fuzzers.patch +Patch0060: 0060-meson-Add-check-argument-to-remaining-run_command-ca.patch +Patch0061: 0061-meson-Use-echo-to-list-files.patch +Patch0062: 0062-test-add-a-test-for-mkdir_p.patch +Patch0063: 0063-util-another-set-of-CVE-2021-4034-assert-s.patch +Patch0064: 0064-basic-update-CIFS-magic.patch +Patch0065: 0065-shared-be-extra-paranoid-and-check-if-argc-0.patch +Patch0066: 0066-core-check-if-argc-0-and-argv-0-is-set.patch +Patch0067: 0067-core-check-argc-argv-uncoditionally.patch +Patch0068: 0068-test-temporary-workaround-for-21819.patch +Patch0069: 0069-test-don-t-leak-local-variable-to-outer-scopes.patch +Patch0070: 0070-tree-wide-don-t-use-strjoina-on-getenv-values.patch +Patch0071: 0071-man-clarify-Environmentfile-format.patch +Patch0072: 0072-test-load-fragment-add-a-basic-test-for-config_parse.patch +Patch0073: 0073-core-execute-use-_cleanup_-in-exec_context_load_envi.patch +Patch0074: 0074-test-env-file-add-tests-for-quoting-in-env-files.patch +Patch0075: 0075-core-shorten-long-unit-names-that-are-based-on-paths.patch +Patch0076: 0076-tests-add-test-case-for-long-unit-names.patch +Patch0077: 0077-tests-reflect-that-we-can-now-handle-devices-with-ve.patch +Patch0078: 0078-test-extend-the-hashed-unit-names-coverage-a-bit.patch +Patch0079: 0079-Revert-kernel-install-also-remove-modules.builtin.al.patch +Patch0080: 0080-Revert-kernel-install-prefer-boot-over-boot-efi-for-.patch +Patch0081: 0081-kernel-install-50-depmod-port-to-bin-sh.patch +Patch0082: 0082-kernel-install-90-loaderentry-port-to-bin-sh.patch +Patch0083: 0083-kernel-install-fix-shellcheck.patch +Patch0084: 0084-kernel-install-port-to-bin-sh.patch +Patch0085: 0085-kernel-install-90-loaderentry-error-out-on-nonexiste.patch +Patch0086: 0086-kernel-install-don-t-pull-out-KERNEL_IMAGE.patch +Patch0087: 0087-kernel-install-prefer-boot-over-boot-efi-for-BOOT_RO.patch +Patch0088: 0088-kernel-install-also-remove-modules.builtin.alias.bin.patch +Patch0089: 0089-kernel-install-add-new-variable-KERNEL_INSTALL_INITR.patch +Patch0090: 0090-kernel-install-k-i-already-creates-ENTRY_DIR_ABS-no-.patch +Patch0091: 0091-kernel-install-prefix-errors-with-Error-exit-immedia.patch +Patch0092: 0092-kernel-install-add-KERNEL_INSTALL_STAGING_AREA-direc.patch +Patch0093: 0093-kernel-install-add-missing-log-line.patch +Patch0094: 0094-kernel-install-don-t-try-to-persist-used-machine-ID-.patch +Patch0095: 0095-kernel-install-add-a-new-ENTRY_TOKEN-variable-for-na.patch +Patch0096: 0096-kernel-install-only-generate-systemd.boot_id-in-kern.patch +Patch0097: 0097-kernel-install-search-harder-for-kernel-image-initrd.patch +Patch0098: 0098-kernel-install-add-new-inspect-verb-showing-paths-an.patch +Patch0099: 0099-ci-Mergify-configuration-update.patch +Patch0100: 0100-ci-Mergify-fix-copy-paste-bug.patch +Patch0101: 0101-shared-Fix-memory-leak-in-bus_append_execute_propert.patch +Patch0102: 0102-fuzz-no-longer-skip-empty-files.patch +Patch0103: 0103-networkctl-open-the-bus-just-once.patch +Patch0104: 0104-json-align-table.patch +Patch0105: 0105-fuzz-json-optionally-allow-logging-and-output.patch +Patch0106: 0106-shared-json-reduce-scope-of-variables.patch +Patch0107: 0107-fuzz-json-also-do-sorting-and-normalizing-and-other-.patch +Patch0108: 0108-shared-json-wrap-long-comments.patch +Patch0109: 0109-shared-json-fix-memory-leak-on-failed-normalization.patch +Patch0110: 0110-shared-json-add-helper-to-ref-first-unref-second.patch +Patch0111: 0111-basic-alloc-util-remove-unnecessary-parens.patch +Patch0112: 0112-fuzz-json-also-try-self-merge-operations.patch +Patch0113: 0113-shared-json-fix-another-memleak-in-normalization.patch +Patch0114: 0114-shared-json-fix-memleak-in-sort.patch +Patch0115: 0115-execute-fix-resource-leak.patch +Patch0116: 0116-tests-ignore-dbus-broker-launcher.patch +Patch0117: 0117-core-timer-fix-memleak.patch +Patch0118: 0118-timedatectl-fix-a-memory-leak.patch +Patch0119: 0119-test-fix-file-descriptor-leak-in-test-psi-util.patch +Patch0120: 0120-test-fix-file-descriptor-leak-in-test-tmpfiles.c.patch +Patch0121: 0121-test-fix-file-descriptor-leak-in-test-fs-util.patch +Patch0122: 0122-test-fix-file-descriptor-leak-in-test-oomd-util.patch +Patch0123: 0123-test-fix-file-descriptor-leak-in-test-catalog.patch +Patch0124: 0124-test-make-masking-of-supplementary-services-configur.patch +Patch0125: 0125-test-fuzz-our-dbus-interfaces-with-dfuzzer.patch +Patch0126: 0126-test-skip-TEST-21-DFUZZER-without-ASan.patch +Patch0127: 0127-core-annotate-Reexecute-as-NoReply.patch +Patch0128: 0128-test-always-force-a-new-image-for-dfuzzer.patch +Patch0129: 0129-test-make-dfuzzer-less-verbose.patch +Patch0130: 0130-test-drop-the-at_exit-coredump-check.patch +Patch0131: 0131-test-make-the-shutdown-routine-a-bit-more-robust.patch +Patch0132: 0132-tree-wide-drop-manually-crafted-message-for-missing-.patch +Patch0133: 0133-test-allow-overriding-QEMU_MEM-when-running-w-ASan.patch +Patch0134: 0134-test-don-t-test-buses-we-don-t-ship.patch +Patch0135: 0135-shutdown-get-only-active-md-arrays.patch +Patch0136: 0136-bus-Use-OrderedSet-for-introspection.patch +Patch0137: 0137-logind-session-dbus-allow-to-set-display-name-via-db.patch +Patch0138: 0138-ci-limit-which-env-variables-we-pass-through-sudo.patch +Patch0139: 0139-ci-Mergify-Add-ci-waived-logic.patch +Patch0140: 0140-json-use-unsigned-for-refernce-counter.patch +Patch0141: 0141-macro-check-over-flow-in-reference-counter.patch +Patch0142: 0142-sd-bus-fix-reference-counter-to-be-incremented.patch +Patch0143: 0143-sd-bus-introduce-ref-unref-function-for-track_item.patch +Patch0144: 0144-sd-bus-do-not-read-unused-value.patch +Patch0145: 0145-sd-bus-do-not-return-negative-errno-when-unknown-nam.patch +Patch0146: 0146-sd-bus-use-hashmap_contains-and-drop-unnecessary-cas.patch +Patch0147: 0147-test-shorten-code-a-bit.patch +Patch0148: 0148-test-add-several-tests-for-track-item.patch +Patch0149: 0149-core-slice-make-slice_freezer_action-return-0-if-fre.patch +Patch0150: 0150-core-unit-fix-use-after-free.patch +Patch0151: 0151-core-timer-fix-potential-use-after-free.patch +Patch0152: 0152-core-command-argument-can-be-longer-than-PATH_MAX.patch +Patch0153: 0153-shared-install-consistently-use-lp-as-the-name-for-t.patch +Patch0154: 0154-shared-specifier-treat-NULL-the-same-as.patch +Patch0155: 0155-shared-install-do-not-print-aliases-longer-than-UNIT.patch +Patch0156: 0156-shared-install-printf-drop-now-unused-install_path_p.patch +Patch0157: 0157-strv-declare-iterator-of-FOREACH_STRING-in-the-loop.patch +Patch0158: 0158-basic-unit-file-split-out-the-subroutine-for-symlink.patch +Patch0159: 0159-basic-stat-util-add-null_or_empty_path_with_root.patch +Patch0160: 0160-shared-install-reuse-the-standard-symlink-verificati.patch +Patch0161: 0161-shared-install-add-a-bit-more-quoting.patch +Patch0162: 0162-test-add-test-for-systemctl-link-enable.patch +Patch0163: 0163-tests-add-helper-for-creating-tempfiles-with-content.patch +Patch0164: 0164-man-clarify-the-descriptions-of-aliases-and-linked-u.patch +Patch0165: 0165-basic-add-new-variable-SYSTEMD_OS_RELEASE-to-overrid.patch +Patch0166: 0166-test-os-util-add-basic-tests-for-os-release-parsing.patch +Patch0167: 0167-basic-env-file-make-load-env-file-deduplicate-entrie.patch +Patch0168: 0168-man-os-release-add-a-note-about-repeating-entries.patch +Patch0169: 0169-shared-specifier-clarify-and-add-test-for-missing-da.patch +Patch0170: 0170-shared-specifier-provide-proper-error-messages-when-.patch +Patch0171: 0171-shared-install-provide-proper-error-messages-when-in.patch +Patch0172: 0172-shared-install-move-scope-into-InstallContext.patch +Patch0173: 0173-shared-specifier-fix-u-U-g-G-when-called-as-unprivil.patch +Patch0174: 0174-shared-install-simplify-unit_file_dump_changes.patch +Patch0175: 0175-shared-install-propagate-errors-about-invalid-aliase.patch +Patch0176: 0176-shared-install-return-failure-when-enablement-fails-.patch +Patch0177: 0177-systemctl-fix-silent-failure-when-root-is-not-found.patch +Patch0178: 0178-shared-install-also-check-for-self-aliases-during-in.patch +Patch0179: 0179-docs-Correct-WantedBy-regarding-template-units.patch +Patch0180: 0180-man-fix-invalid-description-of-template-handling-in-.patch +Patch0181: 0181-shared-install-drop-unnecessary-casts.patch +Patch0182: 0182-strv-make-iterator-in-STRV_FOREACH-declaread-in-the-.patch +Patch0183: 0183-core-ExecContext-restrict_filesystems-is-set-of-stri.patch +Patch0184: 0184-install-when-linking-a-file-create-the-link-first-or.patch +Patch0185: 0185-shared-install-split-unit_file_-disable-enable-so-_r.patch +Patch0186: 0186-shared-install-fix-reenable-on-linked-unit-files.patch +Patch0187: 0187-test-systemctl-enable-extend-the-test-for-repeated-W.patch +Patch0188: 0188-shared-install-when-we-fail-to-chase-a-symlink-show-.patch +Patch0189: 0189-shared-install-do-not-try-to-resolve-symlinks-outsid.patch +Patch0190: 0190-test-systemctl-enable-enhance-the-test-for-unit-file.patch +Patch0191: 0191-shared-install-skip-unnecessary-chasing-of-symlinks-.patch +Patch0192: 0192-shared-install-also-remove-symlinks-like-.wants-foo-.patch +Patch0193: 0193-shared-install-create-relative-symlinks-for-enableme.patch +Patch0194: 0194-shared-install-when-looking-for-symlinks-in-.wants-..patch +Patch0195: 0195-shared-install-stop-passing-duplicate-root-argument-.patch +Patch0196: 0196-basic-unit-file-reverse-negative-conditional.patch +Patch0197: 0197-shared-install-split-UNIT_FILE_SYMLINK-into-two-stat.patch +Patch0198: 0198-shared-install-fix-handling-of-a-linked-unit-file.patch +Patch0199: 0199-test-systemctl-enable-make-shellcheck-happy.patch +Patch0200: 0200-shared-install-when-creating-symlinks-accept-differe.patch +Patch0201: 0201-test-systemctl-enable-use-magic-syntax-to-allow-inve.patch +Patch0202: 0202-test-systemctl-enable-also-use-freshly-built-systemd.patch +Patch0203: 0203-test-systemctl-enable-disable-the-test-for-a-for-now.patch +Patch0204: 0204-Rename-UnitFileScope-to-LookupScope.patch +Patch0205: 0205-core-handle-lookup-paths-being-symlinks.patch +Patch0206: 0206-shared-install-use-correct-cleanup-function.patch +Patch0207: 0207-udev-net_id-avoid-slot-based-names-only-for-single-f.patch +Patch0208: 0208-test-import-logind-test-from-debian-ubuntu-test-suit.patch +Patch0209: 0209-test-drop-redundant-IMAGE_NAME.patch +Patch0210: 0210-test-import-timedated-test-from-debian-ubuntu-test-s.patch +Patch0211: 0211-test-introduce-assert_not_in-helper-function.patch +Patch0212: 0212-test-drop-unnecessary-no-pager-option.patch +Patch0213: 0213-test-support-debian-ubuntu-specific-timezone-config-.patch +Patch0214: 0214-test-import-hostnamed-tests-from-debian-ubuntu-test-.patch +Patch0215: 0215-locale-util-fix-memleak-on-failure.patch +Patch0216: 0216-locale-util-check-if-enumerated-locales-are-valid.patch +Patch0217: 0217-locale-util-align-locale-entries.patch +Patch0218: 0218-core-inline-an-iterator-variable.patch +Patch0219: 0219-locale-setup-merge-locale-handling-in-PID1-and-local.patch +Patch0220: 0220-locale-rename-keymap-util.-ch-localed-util.-ch.patch +Patch0221: 0221-test-add-one-more-path-to-search-keymaps.patch +Patch0222: 0222-test-introduce-inst_recursive-helper-function.patch +Patch0223: 0223-hmac-sha256-move-size-define-to-sha256.h.patch +Patch0224: 0224-tpm2-support-policies-with-PIN.patch +Patch0225: 0225-cryptenroll-add-support-for-TPM2-pin.patch +Patch0226: 0226-cryptsetup-add-support-for-TPM2-pin.patch +Patch0227: 0227-cryptsetup-add-libcryptsetup-TPM2-PIN-support.patch +Patch0228: 0228-cryptenroll-add-TPM2-PIN-documentation.patch +Patch0229: 0229-cryptsetup-add-manual-TPM2-PIN-configuration.patch +Patch0230: 0230-cryptenroll-add-tests-for-TPM2-unlocking.patch +Patch0231: 0231-env-util-replace-unsetenv_erase-by-new-getenv_steal_.patch +Patch0232: 0232-test-install-libxkbcommon-and-x11-keymaps.patch +Patch0233: 0233-test-install-C.UTF-8-and-English-locales.patch +Patch0234: 0234-test-import-localed-tests-from-debian-ubuntu-test-su.patch +Patch0235: 0235-unit-check-for-mount-rate-limiting-before-checking-a.patch +Patch0236: 0236-tests-make-sure-we-delay-running-mount-start-jobs-wh.patch +Patch0237: 0237-test-insert-space-in-for-loop.patch +Patch0238: 0238-test-move-do-at-the-end-of-line.patch +Patch0239: 0239-test-use-trap-RETURN.patch +Patch0240: 0240-test-ignore-the-error-about-our-own-libraries-missin.patch +Patch0241: 0241-test-wrap-binaries-using-systemd-DSOs-when-running-w.patch +Patch0242: 0242-test-set-ASAN_RT_PATH-along-with-LD_PRELOAD-to-the-A.patch +Patch0243: 0243-test-drop-all-LD_PRELOAD-related-ASan-workarounds.patch +Patch0244: 0244-test-don-t-wrap-binaries-built-with-ASan.patch +Patch0245: 0245-test-send-stdout-stderr-of-testsuite-units-to-journa.patch +Patch0246: 0246-test-make-the-busy-loop-in-TEST-02-less-verbose.patch +Patch0247: 0247-test-always-wrap-useradd-userdel-when-running-w-ASan.patch +Patch0248: 0248-test-don-t-flush-debug-logs-to-the-console.patch +Patch0249: 0249-test-fix-a-couple-of-issues-found-by-shellcheck.patch +Patch0250: 0250-test-pass-the-initdir-to-check_result_-qemu-nspawn-h.patch +Patch0251: 0251-test-run-the-custom-check-hooks-before-common-checks.patch +Patch0252: 0252-test-check-journal-directly-instead-of-capturing-con.patch +Patch0253: 0253-test-use-saved-process-PID-instead-of.patch +Patch0254: 0254-test-account-for-ADDR_NO_RANDOMIZE-if-it-s-set.patch +Patch0255: 0255-fuzz-bcd-silence-warning-about-always-true-compariso.patch +Patch0256: 0256-test-disable-test_ntp-on-RHEL.patch +Patch0257: 0257-core-do-not-filter-out-systemd.unit-and-run-level-sp.patch +Patch0258: 0258-test-add-a-simple-test-for-daemon-reexec.patch +Patch0259: 0259-test-install-usr-libexec-vi-as-well.patch +Patch0260: 0260-test-resize-the-terminal-automagically-with-INTERACT.patch +Patch0261: 0261-test-create-an-ASan-wrapper-for-getent-and-su.patch +Patch0262: 0262-test-mark-partition-bootable.patch +Patch0263: 0263-test-bump-the-data-partition-size-if-we-don-t-strip-.patch +Patch0264: 0264-test-use-PBKDF2-with-capped-iterations-instead-of-Ar.patch +Patch0265: 0265-locale-drop-unnecessary-allocation.patch +Patch0266: 0266-Revert-shared-install-create-relative-symlinks-for-e.patch +Patch0267: 0267-glyph-util-add-new-glyphs-for-up-down-arrows.patch +Patch0268: 0268-tree-wide-allow-ASCII-fallback-for-in-logs.patch +Patch0269: 0269-tree-wide-allow-ASCII-fallback-for-in-logs.patch +Patch0270: 0270-core-allow-to-set-default-timeout-for-devices.patch +Patch0271: 0271-man-document-DefaultDeviceTimeoutSec.patch +Patch0272: 0272-man-update-dbus-docs.patch +Patch0273: 0273-hwdb-60-keyboard-Fix-volume-button-mapping-on-Asus-T.patch +Patch0274: 0274-hwdb-CH-Pro-Pedals-not-classified-correctly-due-to-n.patch +Patch0275: 0275-hwdb-Add-accel-orientation-quirk-for-the-GPD-Pocket-.patch +Patch0276: 0276-hostname-Allow-overriding-the-chassis-type-from-hwdb.patch +Patch0277: 0277-hwdb-Add-Microsoft-Surface-Pro-1-chassis-quirk.patch +Patch0278: 0278-hwdb-treat-logitech-craft-keyboard-as-a-keyboard.patch +Patch0279: 0279-test-frequency-in-mouse-DPI-is-optional.patch +Patch0280: 0280-hwdb-add-two-Elecom-trackballs.patch +Patch0281: 0281-hwdb-add-new-database-file-for-PDA-devices.patch +Patch0282: 0282-hwdb-add-support-for-Surface-Laptop-2-3-22303.patch +Patch0283: 0283-hwdb-add-HP-calculators.patch +Patch0284: 0284-hwbd-60-sensor.hwdb-Add-Pipo-W2Pro.patch +Patch0285: 0285-hwdb-60-keyboard-Support-the-buttons-on-CZC-P10T-tab.patch +Patch0286: 0286-hwdb-add-CST-Laser-Trackball-22583.patch +Patch0287: 0287-hwdb-Force-release-calculator-key-on-all-HP-OMEN-lap.patch +Patch0288: 0288-Add-support-for-NEC-VersaPro-VG-S.patch +Patch0289: 0289-Fix-mic-mute-on-Acer-TravelMate-B311-31-22677.patch +Patch0290: 0290-Add-AV-production-controllers-to-hwdb-and-add-uacces.patch +Patch0291: 0291-hwdb-Add-AV-production-access-to-Elgado-Stream-Deck-.patch +Patch0292: 0292-Add-HP-Elitebook-2760p-support-22766.patch +Patch0293: 0293-hwdb-Add-mic-mute-key-mapping-for-HP-Elite-x360.patch +Patch0294: 0294-hwdb-fix-parser-to-work-with-newer-pyparsing.patch +Patch0295: 0295-hwdb-update-for-v251.patch +Patch0296: 0296-hwdb-update-autosuspend-entries.patch +Patch0297: 0297-hwdb-drop-boilerplate-about-match-patterns-being-uns.patch +Patch0298: 0298-hwdb-Update-60-keyboard.hwdb-23074.patch +Patch0299: 0299-hwdb-60-keyboard-Add-Acer-Aspire-One-AO532h-keymappi.patch +Patch0300: 0300-hwdb-60-keyboard-Add-HP-Compaq-KBR0133.patch +Patch0301: 0301-hwdb-add-resolutions-for-the-Vaio-FE14-touchpad-2313.patch +Patch0302: 0302-hwdb-Remap-micmute-to-f20-for-ASUS-WMI-hotkeys.patch +Patch0303: 0303-hwdb-Fix-rotation-for-HP-Pro-Tablet-408-G1.patch +Patch0304: 0304-hwdb-add-keyboard-mapping-for-HP-ProBook-11G2.patch +Patch0305: 0305-hwdb-make-sure-ninja-update-hwdb-works-on-f35.patch +Patch0306: 0306-hwbd-run-update-hwdb-for-v251-rc2.patch +Patch0307: 0307-hwdb-run-ninja-update-hwdb-autosuspend-for-v251-rc2.patch +Patch0308: 0308-Fix-orientation-detection-for-Asus-Transformer-T100T.patch +Patch0309: 0309-Fix-orientation-detection-for-HP-Pavilion-X2-10-k010.patch +Patch0310: 0310-fix-typo.patch +Patch0311: 0311-Adding-a-description-of-the-keyboard-shortcut-Fn-F12.patch +Patch0312: 0312-hwdb-run-update-hwdb.patch +Patch0313: 0313-hwdb-add-rammus-accelerometer-support.patch +Patch0314: 0314-Add-support-to-set-autosuspend-delay-via-hwdb.patch +Patch0315: 0315-Set-autosuspend-delay-for-Fibocom-LG850-GL.patch +Patch0316: 0316-Add-HUION-Inspiroy-H420X-to-hwdb.patch +Patch0317: 0317-hwdb-run-update-hwdb-for-v251-rc3.patch +Patch0318: 0318-hwdb-add-touchpad-parameters-for-Lenovo-T15g-Gen1-23.patch +Patch0319: 0319-hwdb-Add-accel-orientation-for-the-I15-TG.patch +Patch0320: 0320-hwdb-fix-accelerometer-mount-matrix-for-Aquarius-NS4.patch +Patch0321: 0321-hwdb-Add-Google-Hangouts-Meet-speakermic.patch +Patch0322: 0322-hwdb-update-via-ninja-C-build-update-hwdb.patch +Patch0323: 0323-hwdb-Add-Google-Meet-speakermic.patch +Patch0324: 0324-hwdb-Add-accel-orientation-quirk-for-the-Aya-Neo-Nex.patch +Patch0325: 0325-hwdb-Add-HP-Dev-One.patch +Patch0326: 0326-hwdb-analyzers-remove-generic-STM-Device-in-DFU-Mode.patch +Patch0327: 0327-hwdb-Add-Lenovo-ThinkPad-C13-Yoga.patch +Patch0328: 0328-Fix-automatic-screen-rotation-for-Asus-Transformer-T.patch +Patch0329: 0329-hwdb-Add-Acer-Aspire-A317-33-24050.patch +Patch0330: 0330-Add-ACCEL_MOUNT_MATRIX-for-OXP-Mini.patch +Patch0331: 0331-Added-DERE-DBook-D10-24173.patch +Patch0332: 0332-hwdb-analyzers-Clarify-the-type-of-devices-we-want-l.patch +Patch0333: 0333-hwdb-Add-Greaseweazle-drives-to-the-list-of-analyzer.patch +Patch0334: 0334-hwdb-Apply-existing-accel-orientation-quirk-to-all-C.patch +Patch0335: 0335-shared-install-fix-crash-when-reenable-is-called-wit.patch +Patch0336: 0336-scope-allow-unprivileged-delegation-on-scopes.patch +Patch0337: 0337-udev-net_id-add-rhel-9.1-naming-scheme.patch # Downstream-only patches (9000–9999) @@ -892,6 +1196,320 @@ getent passwd systemd-oom &>/dev/null || useradd -r -l -g systemd-oom -d / -s /s %files standalone-sysusers -f .file-list-standalone-sysusers %changelog +* Thu Aug 25 2022 systemd maintenance team - 250-11 +- scope: allow unprivileged delegation on scopes (#2120604) +- udev/net_id: add "rhel-9.1" naming scheme (#2121144) + +* Mon Aug 22 2022 systemd maintenance team - 250-10 +- shared/install: fix crash when reenable is called without --root (#2120222) + +* Thu Aug 18 2022 systemd maintenance team - 250-9 +- Revert "shared/install: create relative symlinks for enablement and aliasing" (#2118668) +- glyph-util: add new glyphs for up/down arrows (#2118297) +- tree-wide: allow ASCII fallback for → in logs (#2118297) +- tree-wide: allow ASCII fallback for … in logs (#2118297) +- core: allow to set default timeout for devices (#2116681) +- man: document DefaultDeviceTimeoutSec= (#2116681) +- man: update dbus docs (#2116681) +- hwdb: 60-keyboard: Fix volume-button mapping on Asus TF103C (#2087778) +- hwdb: CH Pro Pedals not classified correctly due to no buttons (#2087778) +- hwdb: Add accel orientation quirk for the GPD Pocket 3 (#2087778) +- hostname: Allow overriding the chassis type from hwdb (#2087778) +- hwdb: Add Microsoft Surface Pro 1 chassis quirk (#2087778) +- hwdb: treat logitech craft keyboard as a keyboard (#2087778) +- test: frequency in mouse DPI is optional (#2087778) +- hwdb: add two Elecom trackballs (#2087778) +- hwdb: add new database file for PDA devices (#2087778) +- hwdb: add support for Surface Laptop 2 & 3 (#22303) (#2087778) +- hwdb: add HP calculators (#2087778) +- hwbd: 60-sensor.hwdb: Add Pipo W2Pro (#2087778) +- hwdb: 60-keyboard: Support the buttons on CZC P10T tablet (#2087778) +- hwdb: add CST Laser Trackball (#22583) (#2087778) +- hwdb: Force release calculator key on all HP OMEN laptops (#2087778) +- Add support for NEC VersaPro VG-S (#2087778) +- Fix mic mute on Acer TravelMate B311-31 (#22677) (#2087778) +- Add AV production controllers to hwdb and add uaccess (#2087778) +- hwdb: Add AV production access to Elgado Stream Deck devices (#2087778) +- Add HP Elitebook 2760p support (#22766) (#2087778) +- hwdb: Add mic mute key mapping for HP Elite x360 (#2087778) +- hwdb: fix parser to work with newer pyparsing (#2087778) +- hwdb: update for v251 (#2087778) +- hwdb: update autosuspend entries (#2087778) +- hwdb: drop boilerplate about match patterns being unstable (#2087778) +- hwdb: Update 60-keyboard.hwdb (#23074) (#2087778) +- hwdb: 60-keyboard: Add Acer Aspire One AO532h keymappings (#2087778) +- hwdb 60-keyboard Add HP/Compaq KBR0133 (#2087778) +- hwdb: add resolutions for the Vaio FE14 touchpad (#23136) (#2087778) +- hwdb: Remap micmute to f20 for ASUS WMI hotkeys (#2087778) +- hwdb: Fix rotation for HP Pro Tablet 408 G1 (#2087778) +- hwdb: add keyboard mapping for HP ProBook 11G2 (#2087778) +- hwdb: make sure "ninja update-hwdb" works on f35 (#2087778) +- hwbd: run "update-hwdb" for v251-rc2 (#2087778) +- hwdb: run "ninja update-hwdb-autosuspend" for v251-rc2 (#2087778) +- Fix orientation detection for Asus Transformer T100TAF, copied T100TA rule (#2087778) +- Fix orientation detection for HP Pavilion X2 10-k010nr (#2087778) +- fix typo (#2087778) +- Adding a description of the keyboard shortcut Fn+F12 for the HP EliteBook 845 G7 device. (#23253) (#2087778) +- hwdb: run "update-hwdb" (#2087778) +- hwdb: add rammus accelerometer support (#2087778) +- Add support to set autosuspend delay via hwdb (#2087778) +- Set autosuspend delay for Fibocom LG850-GL (#2087778) +- Add HUION Inspiroy H420X to hwdb (#2087778) +- hwdb: run 'update-hwdb' for v251-rc3 (#2087778) +- hwdb: add touchpad parameters for Lenovo T15g Gen1 (#23373) (#2087778) +- hwdb: Add accel orientation for the I15-TG (#2087778) +- hwdb: fix accelerometer mount matrix for Aquarius NS483 (#2087778) +- hwdb: Add Google Hangouts Meet speakermic (#2087778) +- hwdb: update via ninja -C build update-hwdb (#2087778) +- hwdb: Add Google Meet speakermic (#2087778) +- hwdb: Add accel orientation quirk for the Aya Neo Next (#2087778) +- hwdb: Add HP Dev One (#2087778) +- hwdb: analyzers: remove generic "STM Device in DFU Mode" (#2087778) +- hwdb: Add Lenovo ThinkPad C13 Yoga (#2087778) +- Fix automatic screen rotation for Asus Transformer T100TAM (#2087778) +- hwdb: Add Acer Aspire A317-33 (#24050) (#2087778) +- Add ACCEL_MOUNT_MATRIX for OXP Mini (#2087778) +- Added DERE DBook D10 (#24173) (#2087778) +- hwdb: analyzers: Clarify the type of devices we want listed (#2087778) +- hwdb: Add Greaseweazle "drives" to the list of analyzers (#2087778) +- hwdb: Apply existing accel orientation quirk to all Chromebooks (#2087778) + +* Wed Jul 20 2022 systemd maintenance team - 250-8 +- core: shorten long unit names that are based on paths and append path hash at the end (#2083493) +- tests: add test case for long unit names (#2083493) +- tests: reflect that we can now handle devices with very long sysfs paths (#2083493) +- test: extend the "hashed" unit names coverage a bit (#2083493) +- Revert "kernel-install: also remove modules.builtin.alias.bin" (#2065061) +- Revert "kernel-install: prefer /boot over /boot/efi for $BOOT_ROOT" (#2065061) +- kernel-install: 50-depmod: port to /bin/sh (#2065061) +- kernel-install: 90-loaderentry: port to /bin/sh (#2065061) +- kernel-install: fix shellcheck (#2065061) +- kernel-install: port to /bin/sh (#2065061) +- kernel-install: 90-loaderentry: error out on nonexistent initrds instead of swallowing them quietly (#2065061) +- kernel-install: don't pull out KERNEL_IMAGE (#2065061) +- kernel-install: prefer /boot over /boot/efi for $BOOT_ROOT (#2065061) +- kernel-install: also remove modules.builtin.alias.bin (#2065061) +- kernel-install: add new variable $KERNEL_INSTALL_INITRD_GENERATOR (#2065061) +- kernel-install: k-i already creates $ENTRY_DIR_ABS, no need to do it again (#2065061) +- kernel-install: prefix errors with "Error:", exit immediately (#2065061) +- kernel-install: add "$KERNEL_INSTALL_STAGING_AREA" directory (#2065061) +- kernel-install: add missing log line (#2065061) +- kernel-install: don't try to persist used machine ID locally (#2065061) +- kernel-install: add a new $ENTRY_TOKEN variable for naming boot entries (#2065061) +- kernel-install: only generate systemd.boot_id= in kernel command line if used for naming the boot loader spec files/dirs (#2065061) +- kernel-install: search harder for kernel image/initrd drop-in dir (#2065061) +- kernel-install: add new "inspect" verb, showing paths and parameters we discovered (#2065061) +- ci(Mergify): configuration update (#2087652) +- ci(Mergify): fix copy&paste bug (#2087652) +- shared: Fix memory leak in bus_append_execute_property() (#2087652) +- fuzz: no longer skip empty files (#2087652) +- networkctl: open the bus just once (#2087652) +- json: align table (#2087652) +- fuzz-json: optionally allow logging and output (#2087652) +- shared/json: reduce scope of variables (#2087652) +- fuzz-json: also do sorting and normalizing and other easy calls (#2087652) +- shared/json: wrap long comments (#2087652) +- shared/json: fix memory leak on failed normalization (#2087652) +- shared/json: add helper to ref first, unref second (#2087652) +- basic/alloc-util: remove unnecessary parens (#2087652) +- fuzz-json: also try self-merge operations (#2087652) +- shared/json: fix another memleak in normalization (#2087652) +- shared/json: fix memleak in sort (#2087652) +- execute: fix resource leak (#2087652) +- tests: ignore dbus-broker-launcher (#2087652) +- core/timer: fix memleak (#2087652) +- timedatectl: fix a memory leak (#2087652) +- test: fix file descriptor leak in test-psi-util (#2087652) +- test: fix file descriptor leak in test-tmpfiles.c (#2087652) +- test: fix file descriptor leak in test-fs-util (#2087652) +- test: fix file descriptor leak in test-oomd-util (#2087652) +- test: fix file descriptor leak in test-catalog (#2087652) +- test: make masking of supplementary services configurable (#2087652) +- test: fuzz our dbus interfaces with dfuzzer (#2087652) +- test: skip TEST-21-DFUZZER without ASan (#2087652) +- core: annotate Reexecute() as NoReply (#2087652) +- test: always force a new image for dfuzzer (#2087652) +- test: make dfuzzer less verbose (#2087652) +- test: drop the at_exit() coredump check (#2087652) +- test: make the shutdown routine a bit more "robust" (#2087652) +- tree-wide: drop manually-crafted message for missing variables (#2087652) +- test: allow overriding $QEMU_MEM when running w/ ASan (#2087652) +- test: don't test buses we don't ship (#2087652) +- shutdown: get only active md arrays. (#2047682) +- bus: Use OrderedSet for introspection (#2068131) +- logind-session-dbus: allow to set display name via dbus (#2100340) +- ci: limit which env variables we pass through `sudo` (#2087652) +- ci(Mergify): Add `ci-waived` logic (#2087652) +- json: use unsigned for refernce counter (#2087652) +- macro: check over flow in reference counter (#2087652) +- sd-bus: fix reference counter to be incremented (#2087652) +- sd-bus: introduce ref/unref function for track_item (#2087652) +- sd-bus: do not read unused value (#2087652) +- sd-bus: do not return negative errno when unknown name is specified (#2087652) +- sd-bus: use hashmap_contains() and drop unnecessary cast (#2087652) +- test: shorten code a bit (#2087652) +- test: add several tests for track item (#2087652) +- core/slice: make slice_freezer_action() return 0 if freezing state is unchanged (#2087652) +- core/unit: fix use-after-free (#2087652) +- core/timer: fix potential use-after-free (#2087652) +- core: command argument can be longer than PATH_MAX (#2073994) +- shared/install: consistently use 'lp' as the name for the LookupPaths instance (#2082131) +- shared/specifier: treat NULL the same as "" (#2082131) +- shared/install: do not print aliases longer than UNIT_NAME_MAX (#2082131) +- shared/install-printf: drop now-unused install_path_printf() (#2082131) +- strv: declare iterator of FOREACH_STRING() in the loop (#2082131) +- basic/unit-file: split out the subroutine for symlink verification (#2082131) +- basic/stat-util: add null_or_empty_path_with_root() (#2082131) +- shared/install: reuse the standard symlink verification subroutine (#2082131) +- shared/install: add a bit more quoting (#2082131) +- test: add test for systemctl link & enable (#2082131) +- tests: add helper for creating tempfiles with content (#2082131) +- man: clarify the descriptions of aliases and linked unit files (#2082131) +- basic: add new variable $SYSTEMD_OS_RELEASE to override location of os-release (#2082131) +- test-os-util: add basic tests for os-release parsing (#2082131) +- basic/env-file: make load-env-file deduplicate entries with the same key (#2082131) +- man/os-release: add a note about repeating entries (#2082131) +- shared/specifier: clarify and add test for missing data (#2082131) +- shared/specifier: provide proper error messages when specifiers fail to read files (#2082131) +- shared/install: provide proper error messages when invalid specifiers are used (#2082131) +- shared/install: move scope into InstallContext (#2082131) +- shared/specifier: fix %u/%U/%g/%G when called as unprivileged user (#2082131) +- shared/install: simplify unit_file_dump_changes() (#2082131) +- shared/install: propagate errors about invalid aliases and such too (#2082131) +- shared/install: return failure when enablement fails, but process as much as possible (#2082131) +- systemctl: fix silent failure when --root is not found (#2082131) +- shared/install: also check for self-aliases during installation and ignore them (#2082131) +- docs: Correct WantedBy= regarding template units (#2082131) +- man: fix invalid description of template handling in WantedBy= (#2082131) +- shared/install: drop unnecessary casts (#2082131) +- strv: make iterator in STRV_FOREACH() declaread in the loop (#2082131) +- core: ExecContext::restrict_filesystems is set of string (#2082131) +- install: when linking a file, create the link first or abort (#2082131) +- shared/install: split unit_file_{disable,enable}() so _reenable doesn't do setup twice (#2082131) +- shared/install: fix reenable on linked unit files (#2082131) +- test-systemctl-enable: extend the test for repeated WantedBy/RequiredBy (#2082131) +- shared/install: when we fail to chase a symlink, show some logs (#2082131) +- shared/install: do not try to resolve symlinks outside of root directory (#2082131) +- test-systemctl-enable: enhance the test for unit file linking (#2082131) +- shared/install: skip unnecessary chasing of symlinks in disable (#2082131) +- shared/install: also remove symlinks like .wants/foo@one.service → ../foo@one.service (#2082131) +- shared/install: create relative symlinks for enablement and aliasing (#2082131) +- shared/install: when looking for symlinks in .wants/.requires, ignore symlink target (#2082131) +- shared/install: stop passing duplicate root argument to install_name_printf() (#2082131) +- basic/unit-file: reverse negative conditional (#2082131) +- shared/install: split UNIT_FILE_SYMLINK into two states (#2082131) +- shared/install: fix handling of a linked unit file (#2082131) +- test-systemctl-enable: make shellcheck happy (#2082131) +- shared/install: when creating symlinks, accept different but equivalent symlinks (#2082131) +- test-systemctl-enable: use magic syntax to allow inverted tests (#2082131) +- test-systemctl-enable: also use freshly-built systemd-id128 (#2082131) +- test-systemctl-enable: disable the test for %a for now (#2082131) +- Rename UnitFileScope to LookupScope (#2082131) +- core: handle lookup paths being symlinks (#2082131) +- shared/install: use correct cleanup function (#2082131) +- udev/net_id: avoid slot based names only for single function devices (#2073003) +- test: import logind test from debian/ubuntu test suite (#2087652) +- test: drop redundant IMAGE_NAME= (#2087652) +- test: import timedated test from debian/ubuntu test suite (#2087652) +- test: introduce assert_not_in() helper function (#2087652) +- test: drop unnecessary --no-pager option (#2087652) +- test: support debian/ubuntu specific timezone config file (#2087652) +- test: import hostnamed tests from debian/ubuntu test suite (#2087652) +- locale-util: fix memleak on failure (#2087652) +- locale-util: check if enumerated locales are valid (#2087652) +- locale-util: align locale entries (#2087652) +- core: inline an iterator variable (#2087652) +- locale-setup: merge locale handling in PID1 and localed (#2087652) +- locale: rename keymap-util.[ch] -> localed-util.[ch] (#2087652) +- test: add one more path to search keymaps (#2087652) +- test: introduce inst_recursive() helper function (#2087652) +- hmac/sha256: move size define to sha256.h (#2087652) +- tpm2: support policies with PIN (#2087652) +- cryptenroll: add support for TPM2 pin (#2087652) +- cryptsetup: add support for TPM2 pin (#2087652) +- cryptsetup: add libcryptsetup TPM2 PIN support (#2087652) +- cryptenroll: add TPM2 PIN documentation (#2087652) +- cryptsetup: add manual TPM2 PIN configuration (#2087652) +- cryptenroll: add tests for TPM2 unlocking (#2087652) +- env-util: replace unsetenv_erase() by new getenv_steal_erase() helper (#2087652) +- test: install libxkbcommon and x11 keymaps (#2087652) +- test: install C.UTF-8 and English locales (#2087652) +- test: import localed tests from debian/ubuntu test suite (#2087652) +- unit: check for mount rate limiting before checking active state (#2087652) +- tests: make sure we delay running mount start jobs when /p/s/mountinfo is rate limited (#2087652) +- test: insert space in for loop (#2087652) +- test: move "do" at the end of line (#2087652) +- test: use trap RETURN (#2087652) +- test: ignore the error about our own libraries missing during image creation (#2087652) +- test: wrap binaries using systemd DSOs when running w/ ASan (#2087652) +- test: set $ASAN_RT_PATH along with $LD_PRELOAD to the ASan runtime DSO (#2087652) +- test: drop all LD_PRELOAD-related ASan workarounds (#2087652) +- test: don't wrap binaries built with ASan (#2087652) +- test: send stdout/stderr of testsuite units to journal & console (#2087652) +- test: make the busy loop in TEST-02 less verbose (#2087652) +- test: always wrap useradd/userdel when running w/ ASan (#2087652) +- test: don't flush debug logs to the console (#2087652) +- test: fix a couple of issues found by shellcheck (#2087652) +- test: pass the initdir to check_result_{qemu,nspawn} hooks (#2087652) +- test: run the custom check hooks before common checks (#2087652) +- test: check journal directly instead of capturing console output (#2087652) +- test: use saved process PID instead of %% (#2087652) +- test: account for ADDR_NO_RANDOMIZE if it's set (#2087652) +- fuzz-bcd: silence warning about always-true comparison (#2087652) +- test: disable test_ntp on RHEL (#2087652) +- core: do not filter out systemd.unit= and run-level specifier from kernel command line (#2087652) +- test: add a simple test for daemon-reexec (#2087652) +- test: install /usr/libexec/vi as well (#2087652) +- test: resize the terminal automagically with INTERACTIVE_DEBUG=yes (#2087652) +- test: create an ASan wrapper for `getent` and `su` (#2087652) +- test: mark partition bootable (#2087652) +- test: bump the data partition size if we don't strip binaries (#2087652) +- test: use PBKDF2 with capped iterations instead of Argon2 (#2087652) +- locale: drop unnecessary allocation (#2087652) + +* Wed Apr 20 2022 systemd maintenance team - 250-7 +- test: check systemd RPM macros (#2017035) +- test: do not assume x86-64 arch in TEST-58-REPART (#2017035) +- tests: add repart tests for block devices with 1024, 2048, 4096 byte sector sizes (#2017035) +- test: accept both unpadded and padded partition sizes (#2017035) +- test: lvm 2.03.15 dropped the static autoactivation (#2017035) +- test: accept GC'ed units in newer LVM (#2017035) +- shared: Add more dlopen() tests (#2017035) +- systemctl: Show how long a service ran for after it exited in status output (#2017035) +- time-util: introduce TIMESTAMP_UNIX (#2017035) +- systemctl,man: update docs for `--timestamp=` (#2017035) +- systemctl: make `--timestamp=` affect the `show` verb as well (#2017035) +- tests: allow running all the services with SYSTEMD_LOG_LEVEL (#2017035) +- coredump: raise the coredump save size on 64bit systems to 32G (and lower it to 1G on 32bit systems) (#2017035) +- repart: fix sector size handling (#2017035) +- mkdir: allow to create directory whose path contains symlink (#2017035) +- mkdir: CHASE_NONEXISTENT cannot used in chase_symlinks_and_stat() (#2017035) +- meson: move efi file lists closer to where they are used (#2017035) +- meson: move efi summary() section to src/boot/efi (#2017035) +- meson: report SBAT settings (#2017035) +- boot: Build BCD parser only on arches supported by Windows (#2017035) +- meson: Remove efi-cc option (#2017035) +- meson: Get objcopy location from compiler (#2017035) +- meson: Use files() for source lists for boot and fundamental (#2017035) +- meson: Use files() for tests (#2017035) +- tests: add fuzz-bcd (#2017035) +- meson: Use files() for fuzzers (#2017035) +- meson: Add check argument to remaining run_command() calls (#2017035) +- meson: Use echo to list files (#2017035) +- test: add a test for mkdir_p() (#2017035) +- util: another set of CVE-2021-4034 assert()s (#2017035) +- basic: update CIFS magic (#2017035) +- shared: be extra paranoid and check if argc > 0 (#2017035) +- core: check if argc > 0 and argv[0] is set (#2017035) +- core: check argc/argv uncoditionally (#2017035) +- test: temporary workaround for #21819 (#2017035) +- test: don't leak local variable to outer scopes (#2017035) +- tree-wide: don't use strjoina() on getenv() values (#2017035) +- man: clarify Environmentfile format (#2017035) +- test-load-fragment: add a basic test for config_parse_unit_env_file() (#2017035) +- core/execute: use _cleanup_ in exec_context_load_environment() (#2017035) +- test-env-file: add tests for quoting in env files (#2017035) + * Wed Feb 23 2022 systemd maintenance team - 250-4 - udev/net-setup-link: change the default MACAddressPolicy to "none" (#2009237) - man: mention System Administrator's Guide in systemctl manpage (#1982596)