]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Merge pull request #18481 from keszybz/rpm-restart-post-trans
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 16 Feb 2021 07:25:49 +0000 (08:25 +0100)
committerGitHub <noreply@github.com>
Tue, 16 Feb 2021 07:25:49 +0000 (08:25 +0100)
Restart units after the rpm transaction

202 files changed:
.github/workflows/build_test.sh
.packit.yml
NEWS
TODO
docs/ENVIRONMENT.md
docs/TRANSIENT-SETTINGS.md
hwdb.d/20-OUI.hwdb
hwdb.d/20-acpi-vendor.hwdb
hwdb.d/20-acpi-vendor.hwdb.patch
hwdb.d/20-pci-vendor-model.hwdb
hwdb.d/20-usb-vendor-model.hwdb
hwdb.d/60-evdev.hwdb
hwdb.d/60-keyboard.hwdb
hwdb.d/60-sensor.hwdb
hwdb.d/ma-large.txt
hwdb.d/ma-medium.txt
hwdb.d/ma-small.txt
hwdb.d/pci.ids
hwdb.d/pnp_id_registry.html
hwdb.d/usb.ids
man/loginctl.xml
man/machinectl.xml
man/org.freedesktop.systemd1.xml
man/portablectl.xml
man/resolvectl.xml
man/standard-options.xml
man/systemctl.xml
man/systemd.network.xml
man/systemd.resource-control.xml
rules.d/60-persistent-storage.rules
shell-completion/bash/coredumpctl
shell-completion/bash/loginctl
shell-completion/bash/portablectl
src/basic/cgroup-util.c
src/basic/cgroup-util.h
src/basic/efivars.c
src/basic/locale-util.c
src/basic/missing_syscall_def.h
src/basic/missing_syscalls.py
src/basic/path-util.c
src/basic/path-util.h
src/basic/random-util.c
src/basic/random-util.h
src/basic/rlimit-util.c
src/basic/signal-util.c
src/basic/string-table.h
src/basic/unit-file.c
src/basic/virt.c
src/boot/bootctl.c
src/busctl/busctl.c
src/core/cgroup.c
src/core/cgroup.h
src/core/dbus-cgroup.c
src/core/dbus-unit.c
src/core/execute.c
src/core/load-fragment-gperf.gperf.m4
src/core/load-fragment.c
src/core/load-fragment.h
src/core/main.c
src/core/manager.c
src/core/manager.h
src/core/mount.c
src/core/unit.c
src/coredump/coredumpctl.c
src/cryptenroll/cryptenroll.c
src/cryptsetup/cryptsetup-generator.c
src/debug-generator/debug-generator.c
src/dissect/dissect.c
src/firstboot/firstboot.c
src/fsck/fsck.c
src/fstab-generator/fstab-generator.c
src/home/homectl.c
src/home/homework-luks.c
src/journal/journalctl.c
src/libsystemd/sd-bus/bus-common-errors.c
src/libsystemd/sd-bus/bus-common-errors.h
src/libsystemd/sd-journal/compress.c
src/libsystemd/sd-netlink/netlink-internal.h
src/libsystemd/sd-netlink/sd-netlink.c
src/login/loginctl.c
src/machine-id-setup/machine-id-setup-main.c
src/machine/machinectl.c
src/mount/mount-tool.c
src/network/netdev/l2tp-tunnel.c
src/network/netdev/netdev.c
src/network/netdev/tunnel.c
src/network/networkd-address.c
src/network/networkd-address.h
src/network/networkd-conf.c
src/network/networkd-dhcp-common.c
src/network/networkd-dhcp4.c
src/network/networkd-dhcp6.c
src/network/networkd-ipv4ll.c
src/network/networkd-link-bus.c
src/network/networkd-lldp-tx.c
src/network/networkd-lldp-tx.h
src/network/networkd-manager-bus.c
src/network/networkd-manager.c
src/network/networkd-ndisc.c
src/network/networkd-neighbor.c
src/network/networkd-network-gperf.gperf
src/network/networkd-network.c
src/network/networkd-network.h
src/network/networkd-nexthop.c
src/network/networkd-radv.c
src/network/networkd-route.c
src/network/networkd-routing-policy-rule.c
src/network/networkd-util.c
src/network/networkd-util.h
src/nspawn/nspawn-settings.c
src/nspawn/nspawn.c
src/nss-resolve/nss-resolve.c
src/oom/oomd-manager.c
src/oom/oomd-util.c
src/oom/oomd-util.h
src/oom/test-oomd-util.c
src/partition/repart.c
src/portable/org.freedesktop.portable1.conf
src/portable/portable.c
src/portable/portable.h
src/portable/portablectl.c
src/portable/portabled-bus.c
src/portable/portabled-bus.h
src/portable/portabled-image-bus.c
src/portable/portabled-image-bus.h
src/resolve/resolvectl.c
src/resolve/resolved-bus.c
src/resolve/resolved-def.h
src/resolve/resolved-dns-answer.c
src/resolve/resolved-dns-answer.h
src/resolve/resolved-dns-cache.c
src/resolve/resolved-dns-cache.h
src/resolve/resolved-dns-packet.c
src/resolve/resolved-dns-packet.h
src/resolve/resolved-dns-query.c
src/resolve/resolved-dns-query.h
src/resolve/resolved-dns-rr.c
src/resolve/resolved-dns-rr.h
src/resolve/resolved-dns-scope.c
src/resolve/resolved-dns-scope.h
src/resolve/resolved-dns-server.c
src/resolve/resolved-dns-server.h
src/resolve/resolved-dns-stub.c
src/resolve/resolved-dns-stub.h
src/resolve/resolved-dns-synthesize.c
src/resolve/resolved-dns-transaction.c
src/resolve/resolved-dns-transaction.h
src/resolve/resolved-dns-trust-anchor.c
src/resolve/resolved-dns-zone.c
src/resolve/resolved-etc-hosts.c
src/resolve/resolved-link.c
src/resolve/resolved-link.h
src/resolve/resolved-llmnr.c
src/resolve/resolved-manager.c
src/resolve/resolved-manager.h
src/resolve/resolved-mdns.c
src/resolve/resolved-varlink.c
src/resolve/test-dnssec.c
src/run-generator/run-generator.c
src/run/run.c
src/shared/bus-unit-util.c
src/shared/condition.c
src/shared/conf-parser.c
src/shared/conf-parser.h
src/shared/efi-loader.c
src/shared/efi-loader.h
src/shared/ethtool-util.c
src/shared/generator.c
src/shared/json.c
src/shared/json.h
src/shared/logs-show.c
src/shared/meson.build
src/shared/parse-argument.c [new file with mode: 0644]
src/shared/parse-argument.h [new file with mode: 0644]
src/sysext/sysext.c
src/systemctl/systemctl.c
src/sysusers/sysusers.c
src/test/meson.build
src/test/test-parse-argument.c [new file with mode: 0644]
src/test/test-tables.c
src/tmpfiles/tmpfiles.c
src/udev/net/link-config.c
src/udev/udev-builtin-net_setup_link.c
src/udev/udev-rules.c
src/udev/udevadm-trigger.c
test/TEST-50-DISSECT/test.sh
test/TEST-58-PORTABLE/Makefile [new symlink]
test/TEST-58-PORTABLE/test.sh [new file with mode: 0755]
test/fuzz/fuzz-network-parser/directives.network
test/fuzz/fuzz-systemctl-parse-argv/help.input
test/fuzz/fuzz-unit-file/directives.service
test/test-functions
test/test-network/conf/25-address-preferred-lifetime-zero.network [deleted file]
test/test-network/conf/25-address-static.network
test/test-network/systemd-networkd-tests.py
test/units/testsuite-15.sh
test/units/testsuite-50.sh
test/units/testsuite-56-testmunch.service [new file with mode: 0644]
test/units/testsuite-56.sh
test/units/testsuite-58.service [new file with mode: 0644]
test/units/testsuite-58.sh [new file with mode: 0755]
units/systemd-timesyncd.service.in

index 9af1f923d5bae0d990391f2386e02d14f173b41b..2f3646e7ed09e96bdcb24df55f4b065d2e92e1c2 100755 (executable)
@@ -95,7 +95,7 @@ apt-get -y install "${PACKAGES[@]}"
 # support all the features we need (like --optimization=). Since the build-dep
 # command above installs the distro versions, let's install the pip ones just
 # locally and add the local bin directory to the $PATH.
-pip3 install --user -U meson ninja
+pip3 install --user -U meson==0.56.2 ninja
 export PATH="$HOME/.local/bin:$PATH"
 
 $CC --version
index 49f684c47bc5f41929df6f9b12fb15da1e40b849..e1ace861ddc4cdd78c7c22a3f88ce3e568f9a331 100644 (file)
@@ -43,5 +43,3 @@ jobs:
     - fedora-rawhide-aarch64
     - fedora-rawhide-i386
     - fedora-rawhide-x86_64
-    - fedora-eln-aarch64
-    - fedora-eln-x86_64
diff --git a/NEWS b/NEWS
index 753f789341e203ddf51226bdb6fe5bc976992303..8fc5ce73ff2f0f6e1d6eab21ebdeb7800bb778b0 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -2,13 +2,240 @@ systemd System and Service Manager
 
 CHANGES WITH 248:
 
+        * A concept of system extension images is introduced. Such images may
+          be used to extend the /usr/ and /opt/ directory hierarchies at
+          runtime with additional files (even if the file system is read-only).
+          When a system extension image is activated, its /usr/ and /opt/
+          hierarchies and os-release information are combined via overlayfs
+          with the file system hierarchy of the host OS.
+
+          A new systemd-sysext tool can be used to merge, unmerge, list, and
+          refresh system extension hierarchies. See
+          https://www.freedesktop.org/software/systemd/man/systemd-sysext.html.
+
+          The systemd-sysext.service automatically merges installed system
+          extensions during boot (before basic.target, but not in very early
+          boot, since various file systems have to be mounted first).
+
+          The SYSEXT_LEVEL= field in os-release(5) may be used to specify the
+          supported system extension level.
+
+        * A new configuration file /etc/veritytab may be used to configure
+          integrity protection for block devices. Each line is in the format
+          "volume-name data-device hash-device roothash options".
+
+        * A new kernel command-line option systemd.verity.root-options= may be
+          used to configure dm-verity behaviour for the root device.
+
+        * The key file specified in /etc/crypttab (the third field) may now
+          refer to a UNIX socket path. The key is acquired by connecting to
+          that socket and reading from it. This allows the implementation of a
+          service to provide key information dynamically, at the moment when it
+          is needed.
+
+        * Support has been added for extracting the PKCS#11 token URI and
+          encrypted key from the LUKS2 JSON embedded metadata header. This
+          allows the information how to open the encrypted device to be
+          embedded directly in the device and obviates the need for
+          configuration in an external file.
+
+        * LUKS devices may now be unlocked using TPM2 hardware.
+
+        * systemd-repart may lock partitions using TPM2 hardware. This may be
+          useful for example to create an encrypted /var partition bound to the
+          machine on first boot.
+
+        * A new systemd-cryptenroll tool has been added to enroll FIDO2+PKCS#11
+          security tokens to LUKS volumes, list and destroy them. See
+          https://www.freedesktop.org/software/systemd/man/systemd-cryptenroll.html.
+
+        * The manager may be configured at compile time to use fexecve instead
+          of execve when spawning children. Using fexecve closes a window
+          between checking the security context of an executable and spawning
+          it, but unfortunately the kernel displays stale information in the
+          comm field, which impacts ps output and such.
+
+        * The configuration option -Dcompat-gateway-hostname has been dropped.
+          "_gateway" is now the only supported name.
+
+        * The ConditionSecurity=tpm2 unit file setting may be used to check
+          if the system has at least one TPM2 (tpmrm class) device.
+
+        * The tables of system calls in seccomps filters are now automatically
+          generated from kernel lists exported on
+          https://fedora.juszkiewicz.com.pl/syscalls.html.
+
+          The following architectures should now have complete lists:
+          alpha, arc, arm64, arm, i386, ia64, m68k, mips64n32, mips64, mipso32,
+          powerpc, powerpc64, s390, s390x, tilegx, sparc, x86_64, x32.
+
         * The MountAPIVFS= service file setting now additionally mounts a tmpfs
-          on /run/ if it is not already a mount point. A writable /run/ has always
-          been a requirement for a functioning system, but this was not
+          on /run/ if it is not already a mount point. A writable /run/ has
+          always been a requirement for a functioning system, but this was not
           guaranteed when using a read-only image.
-          Users can always specify BindPaths= or InaccessiblePaths= as overrides,
-          and they will take precedence. If the host's root mount point is used,
-          there is no change in behaviour.
+
+          Users can always specify BindPaths= or InaccessiblePaths= as
+          overrides, and they will take precedence. If the host's root mount
+          point is used, there is no change in behaviour.
+
+        * New bind mounts and file system image mounts may be injected into the
+          mount namespace of a service (without restarting it). This is exposed
+          respectively as 'systemctl bind <unit> <path>…' and
+          'systemctl mount-image <unit> <image>…'.
+
+        * The StandardOuput= and StandardError= settings can now specify files
+          to be truncated for output (as "truncate:<path>").
+
+        * The ExecPaths= and NoExecPaths= settings may be used to specify
+          noexec for parts of the file system.
+
+        * sd-bus has a new function sd_bus_open_use_machine() to open a
+          connection to the session bus of a specific user in a local container
+          or on the local host. It also gained a convenience function
+          sd_bus_reply() to call sd_bus_send() with an existing reply message.
+
+        * sd-event allows rate limits to be set on event sources. See the new
+          man page sd_event_source_set_ratelimit(3) for details.
+
+        * systemd.link files gained a [Link] Promiscuous= switch, which allows
+          the device to be raised in promiscuous mode.
+
+          New [Link] TransmitQueues= and ReceiveQueues= settings allow the
+          number of TX and RX queues to be configured.
+
+          New [Link] TransmitQueueLength= setting allows the size of the TX
+          queue to be configured.
+
+          New [Link] GenericSegmentOffloadMaxBytes= and
+          GenericSegmentOffloadMaxSegments= allow capping the packet size and
+          the number of segments accepted in Generic Segment Offload.
+
+        * systemd.network files gained a [Network] RouteTable= configuration
+          switch to select the routing policy table.
+
+          systemd.network files gained a [RoutingPolicyRule] Type=
+          configuration switch (one of "blackhole, "unreachable", "prohibit").
+
+          systemd.network files gained a [IPv6AcceptRA] RouteDenyList= and
+          RouteAllowList= settings to ignore/accept route advertisements from
+          routers matching specified prefixes. The DenyList= setting has been
+          renamed to PrefixDenyList= and a new PrefixAllowList= option has been
+          added.
+
+          systemd.network files gained a [DHCPv6] UseAddress= setting to
+          optionally ignore the address provided in the lease.
+
+          systemd.network files gained a [DHCPv6PrefixDelegation]
+          ManageTemporaryAddress= switch.
+
+        * systemd.netdev files gained a [VLAN] Protocol=, IngressQOSMaps=,
+          EgressQOSMaps=, and [MACVLAN] BroadcastMulticastQueueLength=
+          configuration options for VLAN packet handling.
+
+        * udev rules may now set log_level= option. This allows debug logs to
+          be enabled for select events, e.g. just for a specific subsystem or
+          even a single device.
+
+        * udev now exports the VOLUME_ID, LOGICAL_VOLUME_ID, VOLUME_SET_ID, and
+          DATA_PREPARED_ID attributes for block devices (when available).
+
+        * udev now exports decoded DMI information about memory under the
+          /sys/class/dmi/id/ pseudo device.
+
+        * /dev is not mounted noexec any more. This didn't provide any
+          significant security benefits and would conflicts with the executable
+          mappings used with /dev/sgx device nodes.
+
+        * Permissions for /dev/vsock are now set to 0o666, and /dev/vhost-vsock
+          and /dev/vhost-net are owned by the kvm group.
+
+        * The hardware database has been extended with a list of fingerprint
+          readers that correctly support autosuspend using data from libfprint.
+
+        * systemd-resolved can now answer DNSSEC questions through the stub
+          resolver interface in a way that allows local clients to do DNSSEC
+          validation themselves. For a question with DO+CD set, it'll proxy the
+          DNS query and respond with a mostly unmodified packet received from
+          the upstream server.
+
+        * systemd-nspawn gained a new --ambient-capability= setting
+          (AmbientCapability= in .nspawn files) to configure ambient
+          capabilities passed to the container payload.
+
+        * systemd-nspawn gained the ability to configure the firewall using the
+          nft subsystem (in addition to the existing iptables support).
+
+        * systemd-oomd now gained a new DefaultMemoryPressureDurationSec=
+          setting to configure the time a unit's cgroup needs to exceed memory
+          pressure limits before action will be taken.
+
+          systemd-oomd is now considered fully supported (the usual
+          backwards-compatiblity promises apply). Swap is not required for
+          operation, but it is still recommended.
+
+        * systemd-timesyncd gained a new ConnectionRetrySec= setting which
+          configures the retry delay when trying to contact servers.
+
+        * systemd-stdio-bridge gained --system/--user options to connect to the
+          system bus (previous default) or the user session bus.
+
+        * When the hostname is set to "localhost", systemd-hostnamed will
+          accept this. Previously such a setting would be mostly silently
+          ignored. The goal is to honour configuration as specified by the
+          user.
+
+        * systemd-hostnamed now exports the fallback hostname and the source of
+          the configured hostname ("static", "transient", or "fallback") as
+          D-Bus properties.
+
+        * systemd-hostnamed now exports the HardwareVendor and HardwareModel
+          D-Bus properties. hostnamectl shows this in the status output.
+
+        * systemd-localed may now call locale-gen to generate missing locales
+          on-demand (UTF-8-only). This improves integration with Debian-based
+          distributions (Debian/Ubuntu/PureOS/Tanglu/...) and Arch Linux.
+
+        * systemctl --check-inhibitors may now be used to obey inhibitors even
+          when invoked non-interactively.
+
+        * systemctl import-environment will now emit a warning when called
+          without any arguments (i.e. to import the full environment block of
+          the called program). This command will usually be invoked from a
+          shell, which means that it'll inherit a bunch of variables which are
+          specific to that shell, and usually to the TTY the shell is connected
+          to, and don't have any meaning in the global context of the system or
+          user service manager. Instead, only specific variables should be
+          imported into the manager environment block.
+
+          Similarly, programs which update the manager environment block by
+          directly calling the D-Bus API of the manager, should also push
+          specific variables, and not the full inherited environment.
+
+        * coredumpctl gained a --debugger-arguments= switch to pass arguments
+          to the debugger.
+
+        * networkctl now shows the link activation policy in status.
+
+        * Various tools gained --pager/--no-pager/--json switches to
+          enable/disable the pager and provide JSON output.
+
+        * Various tools now accept SYSTEMD_COLORS=16|256 to configure what
+          colours are used in output.
+
+        * less 568 or newer is now required. Link markup is now always used,
+          and older versions will not display it properly. SYSTEMD_URLIFY=0 may
+          be used to disable it.
+
+        * Builds with support for separate / and /usr hierarchies (split-usr
+          builds, non-merged-usr builds) are now officially deprecated. A
+          warning is emitted during build. Support is slated to be removed in
+          about a year (when the Debian Bookworm release development starts).
+
+        * The main development branch has been renamed to 'main'.
+
+        * mmcblk[0-9]boot[0-9] devices will no longer be probed automatically
+          for partitions, as in the vast majority of cases they contain none
+          and are used internally by the bootloader (eg: uboot).
 
 CHANGES WITH 247:
 
diff --git a/TODO b/TODO
index 2080eb6b571b97d499a483592ebfdda98ae260ef..9b8018bf19239d534e26ddaa8c188590e361720c 100644 (file)
--- a/TODO
+++ b/TODO
@@ -20,6 +20,13 @@ Janitorial Clean-ups:
 
 Features:
 
+* Hook up journald's FSS logic with TPM2: seal the verification disk by
+  time-based policy, so that the verification key can remain on host and ve
+  validated via TPM.
+
+* sd-event: port to new kernel API epoll_wait2() (new in 5.11), to get more
+  accurate wait timeouts
+
 * sd-boot: define a drop-in dir in the ESP that may contain X.509
   certificates. If the firmware is detected to be in setup mode, automatically
   enroll them as PK/KEK/db, turn off setup mode and proceed. Optionally,
index 7762713d44bd5176ba1e511c01cd5af2b6e3260f..82bb52b344c2f6c5fecdcf13d85bf926298fafd9 100644 (file)
@@ -279,3 +279,9 @@ systemd-sysext:
   specify API file systems such as `/proc/` or `/sys/` here, or hierarchies
   that have them as submounts. In particular, do not specify the root directory
   `/` here.
+
+systemd-tmpfiles:
+
+* `SYSTEMD_TMPFILES_FORCE_SUBVOL` - if unset, v/q/Q lines will create subvolumes only if the
+  OS itself is installed into a subvolume. If set to 1 (or another true value), these lines will always create
+  subvolumes (if the backing filesystem supports them). If set to 0, these lines will always create directories.
index 50370602543d46a05a8529d629d2ebd557d83e95..9f69a3162a0d8e7cb1c08a51eba8f26dee2479af 100644 (file)
@@ -273,6 +273,7 @@ All cgroup/resource control settings are available for transient units
 âœ“ ManagedOOMSwap=
 âœ“ ManagedOOMMemoryPressure=
 âœ“ ManagedOOMMemoryPressureLimit=
+✓ ManagedOOMPreference=
 ```
 
 ## Process Killing Settings
index dba1cc6f894a716eec940944a59b54ffb16e1f6a..13aa1916c50b963faf485b4ca82657b113eae6b9 100644 (file)
@@ -3453,7 +3453,7 @@ OUI:00047C*
  ID_OUI_FROM_DATABASE=Skidata AG
 
 OUI:00047D*
- ID_OUI_FROM_DATABASE=Pelco
+ ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
 
 OUI:00047E*
  ID_OUI_FROM_DATABASE=Siqura B.V.
@@ -6186,7 +6186,7 @@ OUI:00080B*
  ID_OUI_FROM_DATABASE=Birka BPA Informationssystem AB
 
 OUI:00080C*
- ID_OUI_FROM_DATABASE=VDA Elettronica spa
+ ID_OUI_FROM_DATABASE=VDA Group S.p.a.
 
 OUI:00080D*
  ID_OUI_FROM_DATABASE=Toshiba
@@ -15369,7 +15369,7 @@ OUI:00141C*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
 OUI:00141D*
- ID_OUI_FROM_DATABASE=LTI-Motion GmbH
+ ID_OUI_FROM_DATABASE=KEBA Industrial Automation Germany GmbH
 
 OUI:00141E*
  ID_OUI_FROM_DATABASE=P.A. Semi, Inc.
@@ -18753,7 +18753,7 @@ OUI:001884*
  ID_OUI_FROM_DATABASE=Fon Technology S.L.
 
 OUI:001885*
- ID_OUI_FROM_DATABASE=Avigilon Corporation
+ ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
 
 OUI:001886*
  ID_OUI_FROM_DATABASE=EL-TECH, INC.
@@ -20292,7 +20292,7 @@ OUI:001A85*
  ID_OUI_FROM_DATABASE=NV Michel Van de Wiele
 
 OUI:001A86*
- ID_OUI_FROM_DATABASE=AdvancedIO Systems Inc
+ ID_OUI_FROM_DATABASE=New Wave Design & Verification
 
 OUI:001A87*
  ID_OUI_FROM_DATABASE=Canhold International Limited
@@ -24768,7 +24768,7 @@ OUI:001F91*
  ID_OUI_FROM_DATABASE=DBS Lodging Technologies, LLC
 
 OUI:001F92*
- ID_OUI_FROM_DATABASE=Avigilon Corporation
+ ID_OUI_FROM_DATABASE=Motorola Solutions Inc.
 
 OUI:001F93*
  ID_OUI_FROM_DATABASE=Xiotech Corporation
@@ -27963,7 +27963,7 @@ OUI:0023BA*
  ID_OUI_FROM_DATABASE=Chroma
 
 OUI:0023BB*
- ID_OUI_FROM_DATABASE=Schmitt Industries
+ ID_OUI_FROM_DATABASE=Accretech SBS, Inc.
 
 OUI:0023BC*
  ID_OUI_FROM_DATABASE=EQ-SYS GmbH
@@ -30593,6 +30593,9 @@ OUI:002CC8*
 OUI:002D76*
  ID_OUI_FROM_DATABASE=TITECH GmbH
 
+OUI:002DB3*
+ ID_OUI_FROM_DATABASE=AMPAK Technology,Inc.
+
 OUI:002EC7*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -33935,6 +33938,9 @@ OUI:00664B*
 OUI:006762*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:00682B*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:0068EB*
  ID_OUI_FROM_DATABASE=HP Inc.
 
@@ -34530,7 +34536,7 @@ OUI:00808B*
  ID_OUI_FROM_DATABASE=DACOLL LIMITED
 
 OUI:00808C*
- ID_OUI_FROM_DATABASE=NetAlly
+ ID_OUI_FROM_DATABASE=NETSCOUT SYSTEMS INC
 
 OUI:00808D*
  ID_OUI_FROM_DATABASE=WESTCOAST TECHNOLOGY B.V.
@@ -35802,7 +35808,7 @@ OUI:00A00D*
  ID_OUI_FROM_DATABASE=THE PANDA PROJECT
 
 OUI:00A00E*
- ID_OUI_FROM_DATABASE=NetAlly
+ ID_OUI_FROM_DATABASE=NETSCOUT SYSTEMS INC
 
 OUI:00A00F*
  ID_OUI_FROM_DATABASE=Broadband Technologies
@@ -37155,7 +37161,7 @@ OUI:00C069*
  ID_OUI_FROM_DATABASE=Axxcelera Broadband Wireless
 
 OUI:00C06A*
- ID_OUI_FROM_DATABASE=ZAHNER-ELEKTRIK GMBH & CO. KG
+ ID_OUI_FROM_DATABASE=Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.
 
 OUI:00C06B*
  ID_OUI_FROM_DATABASE=OSI PLUS CORPORATION
@@ -37649,6 +37655,9 @@ OUI:00CBB4*
 OUI:00CBBD*
  ID_OUI_FROM_DATABASE=Cambridge Broadband Networks Group
 
+OUI:00CC34*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:00CC3F*
  ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
 
@@ -39207,7 +39216,7 @@ OUI:00E0DE*
  ID_OUI_FROM_DATABASE=DATAX NV
 
 OUI:00E0DF*
- ID_OUI_FROM_DATABASE=KEYMILE GmbH
+ ID_OUI_FROM_DATABASE=DZS GmbH
 
 OUI:00E0E0*
  ID_OUI_FROM_DATABASE=SI ELECTRONICS, LTD.
@@ -39326,6 +39335,9 @@ OUI:00E400*
 OUI:00E406*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:00E421*
+ ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
+
 OUI:00E5E4*
  ID_OUI_FROM_DATABASE=Sichuan Tianyi Comheart Telecom Co., Ltd.
 
@@ -39524,6 +39536,51 @@ OUI:040E3C*
 OUI:040EC2*
  ID_OUI_FROM_DATABASE=ViewSonic Mobile China Limited
 
+OUI:0411190*
+ ID_OUI_FROM_DATABASE=FORT Robotics Inc.
+
+OUI:0411191*
+ ID_OUI_FROM_DATABASE=Acentury
+
+OUI:0411192*
+ ID_OUI_FROM_DATABASE=Alethea Communications Technologies Pvt. Ltd.
+
+OUI:0411193*
+ ID_OUI_FROM_DATABASE=SUZHOU RIBAO TECHNOLOGY CO.,LTD.
+
+OUI:0411194*
+ ID_OUI_FROM_DATABASE=Bolicom Innovation Technology (BeiJing) Co.,LTD.
+
+OUI:0411195*
+ ID_OUI_FROM_DATABASE=CEITA COMMUNICATION TECHNOLOGY CO.,LTD
+
+OUI:0411196*
+ ID_OUI_FROM_DATABASE=ZPD technology Co., Ltd
+
+OUI:0411197*
+ ID_OUI_FROM_DATABASE=Herrick Tech Labs
+
+OUI:0411198*
+ ID_OUI_FROM_DATABASE=Shenzhen YIZHENG Technology Co.,Ltd
+
+OUI:0411199*
+ ID_OUI_FROM_DATABASE=AC Power Distribution / ACT Entmt.
+
+OUI:041119A*
+ ID_OUI_FROM_DATABASE=CyOne Security AG
+
+OUI:041119B*
+ ID_OUI_FROM_DATABASE=Hubei Baobao Intelligent Technology Co.,LTD
+
+OUI:041119C*
+ ID_OUI_FROM_DATABASE=Haerbin Donglin Technology Co., Ltd.
+
+OUI:041119D*
+ ID_OUI_FROM_DATABASE=Nuance Hearing Ltd.
+
+OUI:041119E*
+ ID_OUI_FROM_DATABASE=JULIDA LIMITED
+
 OUI:041552*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -39584,12 +39641,18 @@ OUI:042234*
 OUI:0425C5*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:0425E0*
+ ID_OUI_FROM_DATABASE=Taicang T&W Electronics
+
 OUI:042605*
  ID_OUI_FROM_DATABASE=GFR Gesellschaft für Regelungstechnik und Energieeinsparung mbH
 
 OUI:042665*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:042728*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:042758*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -39719,6 +39782,9 @@ OUI:0455CA*
 OUI:045604*
  ID_OUI_FROM_DATABASE=Gionee Communication Equipment Co.,Ltd.
 
+OUI:0456E5*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:04572F*
  ID_OUI_FROM_DATABASE=Sertel Electronics UK Ltd
 
@@ -39875,6 +39941,9 @@ OUI:0479B7*
 OUI:047A0B*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Electronics Co., Ltd.
 
+OUI:047BCB*
+ ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
+
 OUI:047D50*
  ID_OUI_FROM_DATABASE=Shenzhen Kang Ying Technology Co.Ltd.
 
@@ -39929,6 +39998,9 @@ OUI:048C9A*
 OUI:048D38*
  ID_OUI_FROM_DATABASE=Netcore Technology Inc.
 
+OUI:049081*
+ ID_OUI_FROM_DATABASE=Pensando Systems, Inc.
+
 OUI:049162*
  ID_OUI_FROM_DATABASE=Microchip Technology Inc.
 
@@ -39975,7 +40047,7 @@ OUI:049F06*
  ID_OUI_FROM_DATABASE=Smobile Co., Ltd.
 
 OUI:049F81*
- ID_OUI_FROM_DATABASE=NetAlly
+ ID_OUI_FROM_DATABASE=NETSCOUT SYSTEMS INC
 
 OUI:049FCA*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -40031,6 +40103,9 @@ OUI:04B466*
 OUI:04B648*
  ID_OUI_FROM_DATABASE=ZENNER
 
+OUI:04BA1C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:04BA36*
  ID_OUI_FROM_DATABASE=Li Seng Technology Ltd
 
@@ -40082,6 +40157,9 @@ OUI:04C23E*
 OUI:04C241*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:04C29B*
+ ID_OUI_FROM_DATABASE=Aura Home, Inc.
+
 OUI:04C3E60*
  ID_OUI_FROM_DATABASE=DREAMKAS LLC
 
@@ -40208,6 +40286,9 @@ OUI:04D16ED*
 OUI:04D16EE*
  ID_OUI_FROM_DATABASE=Evolute Systems Private Limited
 
+OUI:04D320*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:04D395*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
@@ -40229,9 +40310,15 @@ OUI:04D4C4*
 OUI:04D590*
  ID_OUI_FROM_DATABASE=Fortinet, Inc.
 
+OUI:04D60E*
+ ID_OUI_FROM_DATABASE=FUNAI ELECTRIC CO., LTD.
+
 OUI:04D6AA*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
+OUI:04D6F4*
+ ID_OUI_FROM_DATABASE=GD Midea Air-Conditioning Equipment Co.,Ltd.
+
 OUI:04D783*
  ID_OUI_FROM_DATABASE=Y&H E&C Co.,LTD.
 
@@ -40862,6 +40949,9 @@ OUI:080EA8*
 OUI:080FFA*
  ID_OUI_FROM_DATABASE=KSP INC.
 
+OUI:081086*
+ ID_OUI_FROM_DATABASE=NEC Platforms, Ltd.
+
 OUI:08115E*
  ID_OUI_FROM_DATABASE=Bitel Co., Ltd.
 
@@ -40943,9 +41033,18 @@ OUI:082CB0*
 OUI:082CB6*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:082CED*
+ ID_OUI_FROM_DATABASE=Technity Solutions Inc.
+
+OUI:082E36*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:082E5F*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:082FE9*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:08306B*
  ID_OUI_FROM_DATABASE=Palo Alto Networks
 
@@ -40985,6 +41084,9 @@ OUI:0838E6*
 OUI:083A2F*
  ID_OUI_FROM_DATABASE=Guangzhou Juan Intelligent Tech Joint Stock Co.,Ltd
 
+OUI:083A38*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:083A5C*
  ID_OUI_FROM_DATABASE=Junilab, Inc.
 
@@ -41030,6 +41132,9 @@ OUI:084296*
 OUI:084656*
  ID_OUI_FROM_DATABASE=VEO-LABS
 
+OUI:08474C*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:0847D0*
  ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
 
@@ -41198,6 +41303,9 @@ OUI:087F98*
 OUI:088039*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:0881B2*
+ ID_OUI_FROM_DATABASE=Logitech (China) Technology Co., Ltd
+
 OUI:0881BC*
  ID_OUI_FROM_DATABASE=HongKong Ipro Technology Co., Limited
 
@@ -41282,12 +41390,18 @@ OUI:089F97*
 OUI:08A12B*
  ID_OUI_FROM_DATABASE=ShenZhen EZL Technology Co., Ltd
 
+OUI:08A189*
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
+
 OUI:08A5C8*
  ID_OUI_FROM_DATABASE=Sunnovo International Limited
 
 OUI:08A6BC*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
+OUI:08A7C0*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:08A8A1*
  ID_OUI_FROM_DATABASE=Cyclotronics Power Concepts, Inc
 
@@ -41297,6 +41411,9 @@ OUI:08A95A*
 OUI:08AA55*
  ID_OUI_FROM_DATABASE=Motorola Mobility LLC, a Lenovo Company
 
+OUI:08AA89*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:08ACA5*
  ID_OUI_FROM_DATABASE=Benu Video, Inc.
 
@@ -41342,6 +41459,9 @@ OUI:08BA22*
 OUI:08BA5F*
  ID_OUI_FROM_DATABASE=Qingdao Hisense Electronics Co.,Ltd.
 
+OUI:08BB3C*
+ ID_OUI_FROM_DATABASE=Flextronics Tech.(Ind) Pvt Ltd
+
 OUI:08BBCC*
  ID_OUI_FROM_DATABASE=AK-NORD EDV VERTRIEBSGES. mbH
 
@@ -41546,6 +41666,9 @@ OUI:08F458*
 OUI:08F4AB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:08F606*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:08F69C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -41783,9 +41906,6 @@ OUI:0C4F5A*
 OUI:0C5101*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
-OUI:0C51D0*
- ID_OUI_FROM_DATABASE=Altice Labs S.A.
-
 OUI:0C51F7*
  ID_OUI_FROM_DATABASE=CHAUVIN ARNOUX
 
@@ -41825,6 +41945,51 @@ OUI:0C5A19*
 OUI:0C5A9E*
  ID_OUI_FROM_DATABASE=Wi-SUN Alliance
 
+OUI:0C5CB50*
+ ID_OUI_FROM_DATABASE=Yamasei
+
+OUI:0C5CB51*
+ ID_OUI_FROM_DATABASE=avxav Electronic Trading LLC
+
+OUI:0C5CB52*
+ ID_OUI_FROM_DATABASE=HongKong Blossom Limited
+
+OUI:0C5CB53*
+ ID_OUI_FROM_DATABASE=iH&S Technology Limited
+
+OUI:0C5CB54*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:0C5CB55*
+ ID_OUI_FROM_DATABASE=The Raymond Corporation
+
+OUI:0C5CB56*
+ ID_OUI_FROM_DATABASE=S2C limited
+
+OUI:0C5CB57*
+ ID_OUI_FROM_DATABASE=Energybox Limited
+
+OUI:0C5CB58*
+ ID_OUI_FROM_DATABASE=Shenzhen C & D Electronics Co., Ltd.
+
+OUI:0C5CB59*
+ ID_OUI_FROM_DATABASE=Colordeve International
+
+OUI:0C5CB5A*
+ ID_OUI_FROM_DATABASE=Zhengzhou coal machinery hydraulic electric control Co.,Ltd
+
+OUI:0C5CB5B*
+ ID_OUI_FROM_DATABASE=ADI
+
+OUI:0C5CB5C*
+ ID_OUI_FROM_DATABASE=Hunan Newman Car NetworKing Technology Co.,Ltd
+
+OUI:0C5CB5D*
+ ID_OUI_FROM_DATABASE=BSU Inc
+
+OUI:0C5CB5E*
+ ID_OUI_FROM_DATABASE=Munters Europe AB
+
 OUI:0C5CD8*
  ID_OUI_FROM_DATABASE=DOLI Elektronik GmbH
 
@@ -41978,6 +42143,9 @@ OUI:0C826A*
 OUI:0C839A*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:0C83CC*
+ ID_OUI_FROM_DATABASE=Alpha Networks Inc.
+
 OUI:0C8411*
  ID_OUI_FROM_DATABASE=A.O. Smith Water Products
 
@@ -42014,6 +42182,9 @@ OUI:0C8BFD*
 OUI:0C8C24*
  ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
 
+OUI:0C8C69*
+ ID_OUI_FROM_DATABASE=Shenzhen elink smart Co., ltd
+
 OUI:0C8C8F*
  ID_OUI_FROM_DATABASE=Kamo Technology Limited
 
@@ -42215,6 +42386,9 @@ OUI:0CCDFB*
 OUI:0CCEF6*
  ID_OUI_FROM_DATABASE=Guizhou Fortuneship Technology Co., Ltd
 
+OUI:0CCF89*
+ ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
+
 OUI:0CCFD1*
  ID_OUI_FROM_DATABASE=SPRINGWAVE Co., Ltd
 
@@ -42278,6 +42452,9 @@ OUI:0CE0DC*
 OUI:0CE0E4*
  ID_OUI_FROM_DATABASE=PLANTRONICS, INC.
 
+OUI:0CE441*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:0CE4A0*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -42575,6 +42752,9 @@ OUI:100E7E*
 OUI:100F18*
  ID_OUI_FROM_DATABASE=Fu Gang Electronic(KunShan)CO.,LTD
 
+OUI:101081*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:1010B6*
  ID_OUI_FROM_DATABASE=McCain Inc
 
@@ -42632,6 +42812,9 @@ OUI:102779*
 OUI:1027BE*
  ID_OUI_FROM_DATABASE=TVIP
 
+OUI:1027F5*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:102831*
  ID_OUI_FROM_DATABASE=Morion Inc.
 
@@ -42644,6 +42827,9 @@ OUI:1029AB*
 OUI:102AB3*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:102B41*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:102C6B*
  ID_OUI_FROM_DATABASE=AMPAK Technology, Inc.
 
@@ -42653,6 +42839,9 @@ OUI:102C83*
 OUI:102D31*
  ID_OUI_FROM_DATABASE=Shenzhen Americas Trading Company LLC
 
+OUI:102D41*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
 OUI:102D96*
  ID_OUI_FROM_DATABASE=Looxcie Inc.
 
@@ -42692,9 +42881,15 @@ OUI:10364A*
 OUI:103711*
  ID_OUI_FROM_DATABASE=Simlink AS
 
+OUI:10381F*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
 OUI:103917*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:10394E*
+ ID_OUI_FROM_DATABASE=Hisense broadband multimedia technology Co.,Ltd
+
 OUI:1039E9*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -42704,6 +42899,9 @@ OUI:103B59*
 OUI:103D0A*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
+OUI:103D1C*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:103D3E*
  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
 
@@ -42770,6 +42968,9 @@ OUI:104FA8*
 OUI:105072*
  ID_OUI_FROM_DATABASE=Sercomm Corporation.
 
+OUI:105107*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:105172*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -42959,6 +43160,9 @@ OUI:109397*
 OUI:1093E9*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:109497*
+ ID_OUI_FROM_DATABASE=Logitech Hong Kong
+
 OUI:1094BB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -43007,6 +43211,9 @@ OUI:10A4B9*
 OUI:10A4BE*
  ID_OUI_FROM_DATABASE=SHENZHEN BILIAN ELECTRONIC CO.,LTD
 
+OUI:10A4DA*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:10A5D0*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -43121,6 +43328,9 @@ OUI:10C73F*
 OUI:10C753*
  ID_OUI_FROM_DATABASE=Qingdao Intelligent&Precise Electronics Co.,Ltd.
 
+OUI:10C9CA*
+ ID_OUI_FROM_DATABASE=Ace Technology Corp.
+
 OUI:10CA81*
  ID_OUI_FROM_DATABASE=PRECIA
 
@@ -43163,6 +43373,9 @@ OUI:10D38A*
 OUI:10D542*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:10D561*
+ ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+
 OUI:10D7B0*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -43343,6 +43556,9 @@ OUI:140708*
 OUI:1407E0*
  ID_OUI_FROM_DATABASE=Abrantix AG
 
+OUI:1409B4*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:1409DC*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -43562,6 +43778,9 @@ OUI:14373B*
 OUI:143AEA*
  ID_OUI_FROM_DATABASE=Dynapower Company LLC
 
+OUI:143B42*
+ ID_OUI_FROM_DATABASE=Realfit(Shenzhen) Intelligent Technology Co., Ltd
+
 OUI:143CC3*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -43682,9 +43901,15 @@ OUI:144FD7D*
 OUI:144FD7E*
  ID_OUI_FROM_DATABASE=Edan Instruments, Inc.
 
+OUI:145051*
+ ID_OUI_FROM_DATABASE=SHARP Corporation
+
 OUI:145120*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:14517E*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:145290*
  ID_OUI_FROM_DATABASE=KNS Group LLC (YADRO Company)
 
@@ -43718,6 +43943,9 @@ OUI:145A05*
 OUI:145A83*
  ID_OUI_FROM_DATABASE=Logi-D inc
 
+OUI:145AFC*
+ ID_OUI_FROM_DATABASE=Liteon Technology Corporation
+
 OUI:145BD1*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -43787,6 +44015,9 @@ OUI:1479F3*
 OUI:147BAC*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:147D05*
+ ID_OUI_FROM_DATABASE=SERCOMM PHILIPPINES INC
+
 OUI:147DB3*
  ID_OUI_FROM_DATABASE=JOA TELECOM.CO.,LTD
 
@@ -43802,6 +44033,9 @@ OUI:14825B*
 OUI:148430*
  ID_OUI_FROM_DATABASE=MITAC COMPUTING TECHNOLOGY CORPORATION
 
+OUI:14857F*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:148692*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -43814,6 +44048,9 @@ OUI:1488E6*
 OUI:14893E*
  ID_OUI_FROM_DATABASE=VIXTEL TECHNOLOGIES LIMTED
 
+OUI:1489CB*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:1489FD*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -44060,6 +44297,9 @@ OUI:14C913*
 OUI:14CAA0*
  ID_OUI_FROM_DATABASE=Hu&Co
 
+OUI:14CB19*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
 OUI:14CC20*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -44102,6 +44342,9 @@ OUI:14DAE9*
 OUI:14DB85*
  ID_OUI_FROM_DATABASE=S NET MEDIA
 
+OUI:14DD9C*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:14DDA9*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
@@ -44312,6 +44555,9 @@ OUI:182861*
 OUI:182A44*
  ID_OUI_FROM_DATABASE=HIROSE ELECTRONIC SYSTEM
 
+OUI:182A57*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:182A7B*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
@@ -44339,6 +44585,9 @@ OUI:18300C*
 OUI:1831BF*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:183219*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
 OUI:1832A2*
  ID_OUI_FROM_DATABASE=LAON TECHNOLOGY CO., LTD.
 
@@ -44411,6 +44660,9 @@ OUI:18421D*
 OUI:18422F*
  ID_OUI_FROM_DATABASE=Alcatel Lucent
 
+OUI:1842D4*
+ ID_OUI_FROM_DATABASE=Wuhan Hosan Telecommunication Technology Co.,Ltd
+
 OUI:184462*
  ID_OUI_FROM_DATABASE=Riava Networks, Inc.
 
@@ -44432,6 +44684,9 @@ OUI:184644*
 OUI:18473D*
  ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
 
+OUI:184859*
+ ID_OUI_FROM_DATABASE=Castlenet Technology Inc.
+
 OUI:1848CA*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -44450,6 +44705,9 @@ OUI:184BDF*
 OUI:184C08*
  ID_OUI_FROM_DATABASE=Rockwell Automation
 
+OUI:184CAE*
+ ID_OUI_FROM_DATABASE=CONTINENTAL
+
 OUI:184E16*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -44864,6 +45122,9 @@ OUI:18B905*
 OUI:18BB26*
  ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
 
+OUI:18BB41*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:18BC5A*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
 
@@ -44876,6 +45137,9 @@ OUI:18BE92*
 OUI:18BF1C*
  ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd.
 
+OUI:18BFB3*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co., Ltd., Memory Division
+
 OUI:18C04D*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -44885,6 +45149,9 @@ OUI:18C086*
 OUI:18C19D*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
+OUI:18C241*
+ ID_OUI_FROM_DATABASE=SonicWall
+
 OUI:18C2BF*
  ID_OUI_FROM_DATABASE=BUFFALO.INC
 
@@ -45383,6 +45650,9 @@ OUI:1C4593*
 OUI:1C45C2*
  ID_OUI_FROM_DATABASE=Huizhou City Sunsin lntelligent Technology Co.,Ltd
 
+OUI:1C472F*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:1C4840*
  ID_OUI_FROM_DATABASE=IMS Messsysteme GmbH
 
@@ -45518,6 +45788,9 @@ OUI:1C6E4C*
 OUI:1C6E76*
  ID_OUI_FROM_DATABASE=Quarion Technology Inc
 
+OUI:1C6EE6*
+ ID_OUI_FROM_DATABASE=NHNETWORKS
+
 OUI:1C6F65*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -45773,6 +46046,9 @@ OUI:1C8779D*
 OUI:1C8779E*
  ID_OUI_FROM_DATABASE=ASSYSTEM France
 
+OUI:1C87E3*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
 OUI:1C88790*
  ID_OUI_FROM_DATABASE=Newps co.,ltd
 
@@ -45836,9 +46112,15 @@ OUI:1C9148*
 OUI:1C9179*
  ID_OUI_FROM_DATABASE=Integrated System Technologies Ltd
 
+OUI:1C9180*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:1C919D*
  ID_OUI_FROM_DATABASE=Dongguan Liesheng Electronic Co., Ltd.
 
+OUI:1C937C*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:1C9492*
  ID_OUI_FROM_DATABASE=RUAG Schweiz AG
 
@@ -45866,6 +46148,9 @@ OUI:1C98EC*
 OUI:1C994C*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
+OUI:1C9957*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:1C9C26*
  ID_OUI_FROM_DATABASE=Zoovel Technologies
 
@@ -45932,12 +46217,60 @@ OUI:1CA0D3D*
 OUI:1CA0D3E*
  ID_OUI_FROM_DATABASE=Exicom Tele-Systems Ltd.
 
+OUI:1CA0EF0*
+ ID_OUI_FROM_DATABASE=Tangshan Liulin Automation Equipment Co., Ltd.
+
+OUI:1CA0EF1*
+ ID_OUI_FROM_DATABASE=Wisnu and Supak Co.,Ltd.
+
+OUI:1CA0EF2*
+ ID_OUI_FROM_DATABASE=Schneider-Electric(China)Co.Ltd,Shenzhen Branch
+
+OUI:1CA0EF3*
+ ID_OUI_FROM_DATABASE=Sequent AG
+
+OUI:1CA0EF4*
+ ID_OUI_FROM_DATABASE=Leviathan Solutions Ltd.
+
+OUI:1CA0EF5*
+ ID_OUI_FROM_DATABASE=Nanjing Bilin Intelligent Identification Technology Co.,Ltd
+
+OUI:1CA0EF6*
+ ID_OUI_FROM_DATABASE=HANJEN.CHIN  CO., LTD.
+
+OUI:1CA0EF7*
+ ID_OUI_FROM_DATABASE=tec5AG
+
+OUI:1CA0EF8*
+ ID_OUI_FROM_DATABASE=Zillnk
+
+OUI:1CA0EF9*
+ ID_OUI_FROM_DATABASE=Atlas Aerospace
+
+OUI:1CA0EFA*
+ ID_OUI_FROM_DATABASE=Henrich Electronics Corporation
+
+OUI:1CA0EFB*
+ ID_OUI_FROM_DATABASE=BMK professional electronics GmbH
+
+OUI:1CA0EFC*
+ ID_OUI_FROM_DATABASE=LLC Gagar.In
+
+OUI:1CA0EFD*
+ ID_OUI_FROM_DATABASE=Shenzhen Liandian Communication Technology Co.LTD
+
+OUI:1CA0EFE*
+ ID_OUI_FROM_DATABASE=RDA Microelectronics Technologies (Shanghai) Co. , Ltd
+
 OUI:1CA2B1*
  ID_OUI_FROM_DATABASE=ruwido austria gmbh
 
 OUI:1CA532*
  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
 
+OUI:1CA681*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:1CA770*
  ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
 
@@ -46145,9 +46478,15 @@ OUI:1CCCD6*
 OUI:1CCDE5*
  ID_OUI_FROM_DATABASE=Shanghai Wind Technologies Co.,Ltd
 
+OUI:1CD107*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:1CD1BA*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:1CD1E0*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:1CD40C*
  ID_OUI_FROM_DATABASE=Kriwan Industrie-Elektronik GmbH
 
@@ -46196,6 +46535,9 @@ OUI:1CE61D*
 OUI:1CE62B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:1CE6AD*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:1CE6C7*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -46433,6 +46775,9 @@ OUI:202564*
 OUI:202598*
  ID_OUI_FROM_DATABASE=Teleview
 
+OUI:2025D2*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:202681*
  ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
 
@@ -46496,6 +46841,9 @@ OUI:203A07*
 OUI:203AEF*
  ID_OUI_FROM_DATABASE=Sivantos GmbH
 
+OUI:203B69*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:203CAE*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -46604,6 +46952,9 @@ OUI:205CFA*
 OUI:205D47*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:205E64*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:205EF7*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -46625,6 +46976,9 @@ OUI:2064CB*
 OUI:20658E*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:2066CF*
+ ID_OUI_FROM_DATABASE=FREEBOX SAS
+
 OUI:20677C*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
@@ -46640,6 +46994,9 @@ OUI:206980*
 OUI:206A8A*
  ID_OUI_FROM_DATABASE=Wistron Infocomm (Zhongshan) Corporation
 
+OUI:206A94*
+ ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
+
 OUI:206AFF*
  ID_OUI_FROM_DATABASE=Atlas Elektronik UK Limited
 
@@ -46766,6 +47123,9 @@ OUI:208756*
 OUI:2087AC*
  ID_OUI_FROM_DATABASE=AES motomation
 
+OUI:2087EC*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:20896F*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -46841,6 +47201,9 @@ OUI:20A783*
 OUI:20A787*
  ID_OUI_FROM_DATABASE=Bointec Taiwan Corporation Limited
 
+OUI:20A7F9*
+ ID_OUI_FROM_DATABASE=SHENZHEN OLANBOA TECHNOLOGY CO., LTD
+
 OUI:20A8B9*
  ID_OUI_FROM_DATABASE=SIEMENS AG
 
@@ -46880,6 +47243,9 @@ OUI:20B399*
 OUI:20B5C6*
  ID_OUI_FROM_DATABASE=Mimosa Networks
 
+OUI:20B730*
+ ID_OUI_FROM_DATABASE=TeconGroup, Inc
+
 OUI:20B780*
  ID_OUI_FROM_DATABASE=Toshiba Visual Solutions Corporation Co.,Ltd
 
@@ -46919,6 +47285,9 @@ OUI:20C60D*
 OUI:20C6EB*
  ID_OUI_FROM_DATABASE=Panasonic Corporation AVC Networks Company
 
+OUI:20C74F*
+ ID_OUI_FROM_DATABASE=SensorPush
+
 OUI:20C8B3*
  ID_OUI_FROM_DATABASE=SHENZHEN BUL-TECH CO.,LTD.
 
@@ -46931,6 +47300,12 @@ OUI:20CD39*
 OUI:20CD6E*
  ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
 
+OUI:20CE2A1*
+ ID_OUI_FROM_DATABASE=Shanghai Digicube Info&Tech Co.,Ltd.
+
+OUI:20CE2A7*
+ ID_OUI_FROM_DATABASE=Beijing Huadianzhongxin Tech.Co.,Ltd
+
 OUI:20CEC4*
  ID_OUI_FROM_DATABASE=Peraso Technologies
 
@@ -47219,6 +47594,9 @@ OUI:24169D*
 OUI:24181D*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
 
+OUI:2418C6*
+ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
+
 OUI:241A8C*
  ID_OUI_FROM_DATABASE=Squarehead Technology AS
 
@@ -47318,6 +47696,9 @@ OUI:2443E2*
 OUI:244427*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:24456B*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:244597*
  ID_OUI_FROM_DATABASE=GEMUE Gebr. Mueller Apparatebau
 
@@ -47429,6 +47810,51 @@ OUI:245CBF*
 OUI:245CCB*
  ID_OUI_FROM_DATABASE=AXIe Consortium, Inc.
 
+OUI:245DFC0*
+ ID_OUI_FROM_DATABASE=CompanyDeep
+
+OUI:245DFC1*
+ ID_OUI_FROM_DATABASE=ARTICONA - Bechtle Logistik & Service GmbH
+
+OUI:245DFC2*
+ ID_OUI_FROM_DATABASE=Blue Iris Labs
+
+OUI:245DFC3*
+ ID_OUI_FROM_DATABASE=Shenzhen Hailuck Electronic Technology CO.,LTD
+
+OUI:245DFC4*
+ ID_OUI_FROM_DATABASE=Suzhou Jiangzhi electronic technology co., Ltd
+
+OUI:245DFC5*
+ ID_OUI_FROM_DATABASE=ContactProximity Inc
+
+OUI:245DFC6*
+ ID_OUI_FROM_DATABASE=Guangzhou Lango Electronics Technology Co.,Ltd.
+
+OUI:245DFC7*
+ ID_OUI_FROM_DATABASE=LTY LLC
+
+OUI:245DFC8*
+ ID_OUI_FROM_DATABASE=Cosmicnode
+
+OUI:245DFC9*
+ ID_OUI_FROM_DATABASE=TORGOVYY DOM  TEHNOLOGIY LLC
+
+OUI:245DFCA*
+ ID_OUI_FROM_DATABASE=Tata Sky Limited
+
+OUI:245DFCB*
+ ID_OUI_FROM_DATABASE=ONLY
+
+OUI:245DFCC*
+ ID_OUI_FROM_DATABASE=Senix Corporation
+
+OUI:245DFCD*
+ ID_OUI_FROM_DATABASE=Hunan Honestone lntelligence Technology Co.,Ltd
+
+OUI:245DFCE*
+ ID_OUI_FROM_DATABASE=Dodge
+
 OUI:245EBE*
  ID_OUI_FROM_DATABASE=QNAP Systems, Inc.
 
@@ -47606,6 +48032,9 @@ OUI:249504*
 OUI:2497ED*
  ID_OUI_FROM_DATABASE=Techvision Intelligent Technology Limited
 
+OUI:249AD8*
+ ID_OUI_FROM_DATABASE=YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.
+
 OUI:249EAB*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -47639,6 +48068,9 @@ OUI:24A52C*
 OUI:24A534*
  ID_OUI_FROM_DATABASE=SynTrust Tech International Ltd.
 
+OUI:24A65E*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:24A7DC*
  ID_OUI_FROM_DATABASE=BSkyB Ltd
 
@@ -47825,6 +48257,9 @@ OUI:24E5AA*
 OUI:24E6BA*
  ID_OUI_FROM_DATABASE=JSC Zavod im. Kozitsky
 
+OUI:24E853*
+ ID_OUI_FROM_DATABASE=LG Innotek
+
 OUI:24E927*
  ID_OUI_FROM_DATABASE=TomTom International BV
 
@@ -48017,6 +48452,9 @@ OUI:2829CC*
 OUI:2829D9*
  ID_OUI_FROM_DATABASE=GlobalBeiMing technology (Beijing)Co. Ltd
 
+OUI:282B96*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:282C020*
  ID_OUI_FROM_DATABASE=SAKATA DENKI Co., Ltd.
 
@@ -48188,6 +48626,9 @@ OUI:284121*
 OUI:2841C6*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:2841EC*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:284430*
  ID_OUI_FROM_DATABASE=GenesisTechnical Systems (UK) Ltd
 
@@ -48224,6 +48665,9 @@ OUI:2852E0*
 OUI:2852F9*
  ID_OUI_FROM_DATABASE=Zhongxin Intelligent Times (Shenzhen) Co., Ltd.
 
+OUI:28534E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:285471*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -48242,6 +48686,9 @@ OUI:2857BE*
 OUI:285AEB*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:285B0C*
+ ID_OUI_FROM_DATABASE=Sichuan Jiuzhou Electronic Technology Co., Ltd.
+
 OUI:285F2F*
  ID_OUI_FROM_DATABASE=RNware Co.,Ltd.
 
@@ -48449,6 +48896,9 @@ OUI:28AD3E*
 OUI:28AF0A*
  ID_OUI_FROM_DATABASE=Sirius XM Radio Inc
 
+OUI:28AFFD*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:28B0CC*
  ID_OUI_FROM_DATABASE=Xenya d.o.o.
 
@@ -48563,6 +49013,9 @@ OUI:28C671*
 OUI:28C68E*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:28C709*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:28C718*
  ID_OUI_FROM_DATABASE=Altierre
 
@@ -48575,6 +49028,9 @@ OUI:28C825*
 OUI:28C87A*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:28C87C*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:28C914*
  ID_OUI_FROM_DATABASE=Taimag Corporation
 
@@ -48617,6 +49073,9 @@ OUI:28D044*
 OUI:28D0CB*
  ID_OUI_FROM_DATABASE=Cambridge Communication Systems Ltd
 
+OUI:28D0EA*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:28D127*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
@@ -48629,6 +49088,9 @@ OUI:28D1B7*
 OUI:28D244*
  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology Co., Ltd.
 
+OUI:28D3EA*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:28D436*
  ID_OUI_FROM_DATABASE=Jiangsu dewosi electric co., LTD
 
@@ -48720,7 +49182,7 @@ OUI:28EED3*
  ID_OUI_FROM_DATABASE=Shenzhen Super D Technology Co., Ltd
 
 OUI:28EF01*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
 OUI:28F033*
  ID_OUI_FROM_DATABASE=Apple, Inc.
@@ -48737,6 +49199,9 @@ OUI:28F358*
 OUI:28F366*
  ID_OUI_FROM_DATABASE=Shenzhen Bilian electronic CO.,LTD
 
+OUI:28F49B*
+ ID_OUI_FROM_DATABASE=LEETEK
+
 OUI:28F532*
  ID_OUI_FROM_DATABASE=ADD-Engineering BV
 
@@ -48875,6 +49340,9 @@ OUI:2C002C*
 OUI:2C0033*
  ID_OUI_FROM_DATABASE=EControls, LLC
 
+OUI:2C00AB*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:2C00F7*
  ID_OUI_FROM_DATABASE=XOS
 
@@ -48899,6 +49367,9 @@ OUI:2C0786*
 OUI:2C081C*
  ID_OUI_FROM_DATABASE=OVH
 
+OUI:2C0823*
+ ID_OUI_FROM_DATABASE=Sercomm France Sarl
+
 OUI:2C088C*
  ID_OUI_FROM_DATABASE=HUMAX Co., Ltd.
 
@@ -48965,6 +49436,9 @@ OUI:2C16BDD*
 OUI:2C16BDE*
  ID_OUI_FROM_DATABASE=Molex Incorporated
 
+OUI:2C17E0*
+ ID_OUI_FROM_DATABASE=SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)
+
 OUI:2C1875*
  ID_OUI_FROM_DATABASE=Skyworth Digital Technology(Shenzhen) Co.,Ltd
 
@@ -49223,6 +49697,9 @@ OUI:2C4205*
 OUI:2C431A*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
+OUI:2C43BE*
+ ID_OUI_FROM_DATABASE=Sunnovo International Limited
+
 OUI:2C4401*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -49301,6 +49778,9 @@ OUI:2C4F52*
 OUI:2C5089*
  ID_OUI_FROM_DATABASE=Shenzhen Kaixuan Visual Technology Co.,Limited
 
+OUI:2C52AF*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:2C534A*
  ID_OUI_FROM_DATABASE=Shenzhen Winyao Electronic Limited
 
@@ -49466,6 +49946,9 @@ OUI:2C6FC9*
 OUI:2C7155*
  ID_OUI_FROM_DATABASE=HiveMotion
 
+OUI:2C71FF*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:2C72C3*
  ID_OUI_FROM_DATABASE=Soundmatters
 
@@ -49520,6 +50003,9 @@ OUI:2C8A72*
 OUI:2C8BF2*
  ID_OUI_FROM_DATABASE=Hitachi Metals America Ltd
 
+OUI:2C8DB1*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:2C9127*
  ID_OUI_FROM_DATABASE=Eintechno Corporation
 
@@ -49667,6 +50153,9 @@ OUI:2CBE08*
 OUI:2CBE97*
  ID_OUI_FROM_DATABASE=Ingenieurbuero Bickele und Buehler GmbH
 
+OUI:2CBEEB*
+ ID_OUI_FROM_DATABASE=Nothing Technology Limited
+
 OUI:2CC260*
  ID_OUI_FROM_DATABASE=Oracle Corporation
 
@@ -49682,6 +50171,9 @@ OUI:2CC548*
 OUI:2CC5D3*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
+OUI:2CC81B*
+ ID_OUI_FROM_DATABASE=Routerboard.com
+
 OUI:2CCA0C*
  ID_OUI_FROM_DATABASE=WITHUS PLANET
 
@@ -49703,6 +50195,9 @@ OUI:2CCD43*
 OUI:2CCD69*
  ID_OUI_FROM_DATABASE=Aqavi.com
 
+OUI:2CCE1E*
+ ID_OUI_FROM_DATABASE=Cloudtronics Pty Ltd
+
 OUI:2CCF58*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -49862,6 +50357,9 @@ OUI:2CFDA1*
 OUI:2CFDAB*
  ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
 
+OUI:2CFDB3*
+ ID_OUI_FROM_DATABASE=TCL Technoly Electronics(Huizhou).,Ltd
+
 OUI:2CFF65*
  ID_OUI_FROM_DATABASE=Oki Electric Industry Co., Ltd.
 
@@ -50123,6 +50621,9 @@ OUI:3035AD*
 OUI:3037A6*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:3037B3*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:303855*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -50354,12 +50855,18 @@ OUI:30786B*
 OUI:3078C2*
  ID_OUI_FROM_DATABASE=Innowireless / QUCELL Networks
 
+OUI:3078D3*
+ ID_OUI_FROM_DATABASE=Virgilant Technologies Ltd.
+
 OUI:307BAC*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
 OUI:307C30*
  ID_OUI_FROM_DATABASE=RIM
 
+OUI:307C4A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:307C5E*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -50372,12 +50879,18 @@ OUI:307ECB*
 OUI:30809B*
  ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
 
+OUI:308398*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:308454*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
 OUI:3085A9*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:3085EB*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:30862D*
  ID_OUI_FROM_DATABASE=Arista Network, Inc.
 
@@ -50414,6 +50927,9 @@ OUI:308CFB*
 OUI:308D99*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:308E7A*
+ ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
+
 OUI:309048*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -50435,6 +50951,9 @@ OUI:3093BC*
 OUI:309435*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:309587*
+ ID_OUI_FROM_DATABASE=HUNAN FN-LINK TECHNOLOGY LIMITED
+
 OUI:3095E3*
  ID_OUI_FROM_DATABASE=SHANGHAI SIMCOM LIMITED
 
@@ -50477,6 +50996,9 @@ OUI:30A2C2*
 OUI:30A452*
  ID_OUI_FROM_DATABASE=Arrival Elements BV
 
+OUI:30A612*
+ ID_OUI_FROM_DATABASE=ShenZhen Hugsun Technology Co.,Ltd.
+
 OUI:30A889*
  ID_OUI_FROM_DATABASE=DECIMATOR DESIGN
 
@@ -50513,6 +51035,9 @@ OUI:30AFCE*
 OUI:30B164*
  ID_OUI_FROM_DATABASE=Power Electronics International Inc.
 
+OUI:30B1B5*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:30B216*
  ID_OUI_FROM_DATABASE=Hitachi ABB Power Grids â€“ Grid Automation
 
@@ -50636,6 +51161,9 @@ OUI:30E283*
 OUI:30E37A*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:30E396*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:30E3D6*
  ID_OUI_FROM_DATABASE=Spotify USA Inc.
 
@@ -50693,6 +51221,9 @@ OUI:30F7C5*
 OUI:30F7D7*
  ID_OUI_FROM_DATABASE=Thread Technology Co., Ltd
 
+OUI:30F94B*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+
 OUI:30F9ED*
  ID_OUI_FROM_DATABASE=Sony Corporation
 
@@ -51074,6 +51605,9 @@ OUI:3448ED*
 OUI:34495B*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:344AC3*
+ ID_OUI_FROM_DATABASE=HuNan ZiKun Information Technology CO., Ltd
+
 OUI:344B3D*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -51164,6 +51698,9 @@ OUI:3466EA*
 OUI:34684A*
  ID_OUI_FROM_DATABASE=Teraworks Co., Ltd.
 
+OUI:346893*
+ ID_OUI_FROM_DATABASE=Tecnovideo Srl
+
 OUI:346895*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
@@ -51206,6 +51743,12 @@ OUI:346FED*
 OUI:347146*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:34732D*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
+OUI:34735A*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:347563*
  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
 
@@ -51281,6 +51824,9 @@ OUI:348584*
 OUI:34862A*
  ID_OUI_FROM_DATABASE=Heinz Lackmann GmbH & Co KG
 
+OUI:34865D*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:34873D*
  ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
 
@@ -51392,6 +51938,9 @@ OUI:34AAEE*
 OUI:34AB37*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:34AB95*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:34ADE4*
  ID_OUI_FROM_DATABASE=Shanghai Chint Power Systems Co., Ltd.
 
@@ -51695,6 +52244,9 @@ OUI:34E894*
 OUI:34E911*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:34E9FE*
+ ID_OUI_FROM_DATABASE=Metis Co., Ltd.
+
 OUI:34EA34*
  ID_OUI_FROM_DATABASE=HangZhou Gubei Electronics Technology Co.,Ltd
 
@@ -51785,6 +52337,9 @@ OUI:380197*
 OUI:38019F*
  ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
 
+OUI:3802DE*
+ ID_OUI_FROM_DATABASE=Sercomm Corporation.
+
 OUI:380546*
  ID_OUI_FROM_DATABASE=Foctek Photonics, Inc.
 
@@ -51881,6 +52436,9 @@ OUI:381D14*
 OUI:381DD9*
  ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
 
+OUI:382028*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:382056*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -52064,6 +52622,9 @@ OUI:384FF0*
 OUI:38521A*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:385247*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:38539C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -52229,6 +52790,9 @@ OUI:388479*
 OUI:388602*
  ID_OUI_FROM_DATABASE=Flexoptix GmbH
 
+OUI:3887D5*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:38881E*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -52304,6 +52868,9 @@ OUI:389F5A*
 OUI:389F83*
  ID_OUI_FROM_DATABASE=OTN Systems N.V.
 
+OUI:38A067*
+ ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
+
 OUI:38A28C*
  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
 
@@ -52344,7 +52911,7 @@ OUI:38AF29*
  ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
 
 OUI:38AFD0*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Nevro
 
 OUI:38AFD7*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
@@ -52400,6 +52967,9 @@ OUI:38B19EE*
 OUI:38B1DB*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:38B3F7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:38B4D3*
  ID_OUI_FROM_DATABASE=BSH Hausgeraete GmbH
 
@@ -52440,7 +53010,7 @@ OUI:38B8EB6*
  ID_OUI_FROM_DATABASE=MATRIXSTREAM TECHNOLOGIES, INC.
 
 OUI:38B8EB7*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Sirin Mobile Technologies
 
 OUI:38B8EB8*
  ID_OUI_FROM_DATABASE=CeeNex Inc
@@ -52634,6 +53204,12 @@ OUI:38F32E*
 OUI:38F33F*
  ID_OUI_FROM_DATABASE=TATSUNO CORPORATION
 
+OUI:38F3AB*
+ ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
+
+OUI:38F3FB*
+ ID_OUI_FROM_DATABASE=Asperiq
+
 OUI:38F554*
  ID_OUI_FROM_DATABASE=HISENSE ELECTRIC CO.,LTD
 
@@ -52793,6 +53369,9 @@ OUI:3C0518*
 OUI:3C05AB*
  ID_OUI_FROM_DATABASE=Product Creation Studio
 
+OUI:3C0630*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:3C06A7*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -52841,6 +53420,9 @@ OUI:3C11B2*
 OUI:3C13CC*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:3C1512*
+ ID_OUI_FROM_DATABASE=Shenzhen Huanhu Technology Co.,Ltd
+
 OUI:3C15C2*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -53309,6 +53891,12 @@ OUI:3C7873*
 OUI:3C7A8A*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:3C7AAA*
+ ID_OUI_FROM_DATABASE=China Dragon Technology Limited
+
+OUI:3C7AC4*
+ ID_OUI_FROM_DATABASE=Chemtronics
+
 OUI:3C7C3F*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
@@ -53480,6 +54068,9 @@ OUI:3CA72B*
 OUI:3CA82A*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:3CA8ED*
+ ID_OUI_FROM_DATABASE=smart light technology
+
 OUI:3CA9F4*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -53561,6 +54152,9 @@ OUI:3CC243*
 OUI:3CC2E1*
  ID_OUI_FROM_DATABASE=XINHUA CONTROL ENGINEERING CO.,LTD
 
+OUI:3CC786*
+ ID_OUI_FROM_DATABASE=DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.
+
 OUI:3CC99E*
  ID_OUI_FROM_DATABASE=Huiyang Technology Co., Ltd
 
@@ -53642,6 +54236,9 @@ OUI:3CE072*
 OUI:3CE1A1*
  ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
 
+OUI:3CE36B*
+ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+
 OUI:3CE3E7*
  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
 
@@ -53765,6 +54362,9 @@ OUI:3CFB96*
 OUI:3CFDFE*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:3CFFD8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:4000E0*
  ID_OUI_FROM_DATABASE=Derek(Shaoguan)Limited
 
@@ -53900,6 +54500,9 @@ OUI:4022ED*
 OUI:402343*
  ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
 
+OUI:4024B2*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
 OUI:4025C2*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -54014,9 +54617,15 @@ OUI:40406B*
 OUI:4040A7*
  ID_OUI_FROM_DATABASE=Sony Mobile Communications Inc
 
+OUI:404101*
+ ID_OUI_FROM_DATABASE=Rockwell Automation
+
 OUI:404229*
  ID_OUI_FROM_DATABASE=Layer3TV, Inc
 
+OUI:4044FD*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:4045DA*
  ID_OUI_FROM_DATABASE=Spreadtrum Communications (Shanghai) Co., Ltd.
 
@@ -54494,6 +55103,9 @@ OUI:40BD32*
 OUI:40BD9E*
  ID_OUI_FROM_DATABASE=Physio-Control, Inc
 
+OUI:40BEEE*
+ ID_OUI_FROM_DATABASE=Shenzhen Yunding Information Technology Co.,Ltd
+
 OUI:40BF17*
  ID_OUI_FROM_DATABASE=Digistar Telecom. SA
 
@@ -54593,6 +55205,9 @@ OUI:40E230*
 OUI:40E3D6*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
+OUI:40E64B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:40E730*
  ID_OUI_FROM_DATABASE=DEY Storage Systems, Inc.
 
@@ -55151,24 +55766,48 @@ OUI:446FD80*
 OUI:446FD81*
  ID_OUI_FROM_DATABASE=Shenzhen Furuilian Electronic Co.,Ltd.
 
+OUI:446FD82*
+ ID_OUI_FROM_DATABASE=BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Åž.
+
+OUI:446FD83*
+ ID_OUI_FROM_DATABASE=Shenzhen Mestechs Technology CO., LTD
+
 OUI:446FD84*
  ID_OUI_FROM_DATABASE=lb Lautsprecher gmbH
 
 OUI:446FD85*
  ID_OUI_FROM_DATABASE=ZHEJIANG SHIP ELECTRONICS & TECHNOLOGY CO., LTD.
 
+OUI:446FD86*
+ ID_OUI_FROM_DATABASE=Anhui GuDao Tech
+
 OUI:446FD87*
  ID_OUI_FROM_DATABASE=ITC
 
 OUI:446FD88*
  ID_OUI_FROM_DATABASE=Global Telecom Engineering, Inc
 
+OUI:446FD89*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:446FD8A*
+ ID_OUI_FROM_DATABASE=ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd
+
 OUI:446FD8B*
  ID_OUI_FROM_DATABASE=Beijing gpthink technology co.,LTD.
 
+OUI:446FD8C*
+ ID_OUI_FROM_DATABASE=Changzhou Haitu Electronic Technology Co.,Ltd
+
 OUI:446FD8D*
  ID_OUI_FROM_DATABASE=SCAIME
 
+OUI:446FD8E*
+ ID_OUI_FROM_DATABASE=CTE
+
+OUI:446FF8*
+ ID_OUI_FROM_DATABASE=Dyson Limited
+
 OUI:44700B*
  ID_OUI_FROM_DATABASE=IFFU
 
@@ -55280,6 +55919,9 @@ OUI:44975A*
 OUI:449B78*
  ID_OUI_FROM_DATABASE=The Now Factory
 
+OUI:449BC1*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:449CB5*
  ID_OUI_FROM_DATABASE=Alcomp, Inc
 
@@ -55385,6 +56027,9 @@ OUI:44BA46*
 OUI:44BB3B*
  ID_OUI_FROM_DATABASE=Google, Inc.
 
+OUI:44BDDE*
+ ID_OUI_FROM_DATABASE=BHTC GmbH
+
 OUI:44BFE3*
  ID_OUI_FROM_DATABASE=Shenzhen Longtech Electronics Co.,Ltd
 
@@ -55640,6 +56285,9 @@ OUI:480031*
 OUI:480033*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:48007D*
+ ID_OUI_FROM_DATABASE=DTS ELEKTRONIK SAN. TIC. LTD. STI.
+
 OUI:4801C5*
  ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
 
@@ -55718,6 +56366,9 @@ OUI:481063*
 OUI:481249*
  ID_OUI_FROM_DATABASE=Luxcom Technologies Inc.
 
+OUI:481258*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:48137E*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -55745,6 +56396,9 @@ OUI:481BD2*
 OUI:481D70*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:481F2D*
+ ID_OUI_FROM_DATABASE=Shenzhen Jie Shi Lian Industrial Co.,LTD
+
 OUI:48210B*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
@@ -55772,6 +56426,12 @@ OUI:4827EA*
 OUI:48282F*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:482952*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
+OUI:4829E4*
+ ID_OUI_FROM_DATABASE=ZAO NPK Rotek
+
 OUI:482AE3*
  ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
 
@@ -55796,6 +56456,9 @@ OUI:48352E*
 OUI:48365F*
  ID_OUI_FROM_DATABASE=Wintecronics Ltd.
 
+OUI:483871*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:483974*
  ID_OUI_FROM_DATABASE=Proware Technologies Co., Ltd.
 
@@ -55880,6 +56543,9 @@ OUI:4851B7*
 OUI:4851C5*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:4851CF*
+ ID_OUI_FROM_DATABASE=Intelbras
+
 OUI:485261*
  ID_OUI_FROM_DATABASE=SOREEL
 
@@ -55985,6 +56651,9 @@ OUI:4865EEE*
 OUI:486834*
  ID_OUI_FROM_DATABASE=Silicon Motion, Inc.
 
+OUI:48684A*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:486B2C*
  ID_OUI_FROM_DATABASE=BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
 
@@ -56024,6 +56693,9 @@ OUI:487604*
 OUI:487746*
  ID_OUI_FROM_DATABASE=Calix Inc.
 
+OUI:48785E*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:48794D*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -56048,6 +56720,9 @@ OUI:487B6B*
 OUI:487D2E*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:487E48*
+ ID_OUI_FROM_DATABASE=Earda Technologies co Ltd
+
 OUI:488244*
  ID_OUI_FROM_DATABASE=Life Fitness / Div. of Brunswick
 
@@ -56075,6 +56750,9 @@ OUI:488803*
 OUI:48881E*
  ID_OUI_FROM_DATABASE=EthoSwitch LLC
 
+OUI:488899*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:4888CA*
  ID_OUI_FROM_DATABASE=Motorola (Wuhan) Mobility Technologies Communication Co., Ltd.
 
@@ -56198,6 +56876,9 @@ OUI:48B02D*
 OUI:48B253*
  ID_OUI_FROM_DATABASE=Marketaxess Corporation
 
+OUI:48B25D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:48B5A7*
  ID_OUI_FROM_DATABASE=Glory Horse Industries Ltd.
 
@@ -56741,6 +57422,9 @@ OUI:4C56DF*
 OUI:4C57CA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:4C5D3C*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:4C5DCD*
  ID_OUI_FROM_DATABASE=Oy Finnish Electric Vehicle Technologies Ltd
 
@@ -56756,6 +57440,9 @@ OUI:4C60D5*
 OUI:4C60DE*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:4C617E*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:4C6255*
  ID_OUI_FROM_DATABASE=SANMINA-SCI SYSTEM DE MEXICO S.A. DE C.V.
 
@@ -56867,6 +57554,9 @@ OUI:4C7625*
 OUI:4C774F*
  ID_OUI_FROM_DATABASE=Embedded Wireless Labs
 
+OUI:4C7766*
+ ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
+
 OUI:4C776D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -56876,6 +57566,9 @@ OUI:4C7872*
 OUI:4C7897*
  ID_OUI_FROM_DATABASE=Arrowhead Alarm Products Ltd
 
+OUI:4C796E*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:4C79BA*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -57134,6 +57827,9 @@ OUI:4CB82C*
 OUI:4CB8B5*
  ID_OUI_FROM_DATABASE=Shenzhen YOUHUA Technology Co., Ltd
 
+OUI:4CB910*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:4CB911*
  ID_OUI_FROM_DATABASE=Raisecom Technology CO.,LTD
 
@@ -57392,6 +58088,9 @@ OUI:4CF02E*
 OUI:4CF19E*
  ID_OUI_FROM_DATABASE=Groupe Atlantic
 
+OUI:4CF202*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:4CF2BF*
  ID_OUI_FROM_DATABASE=Cambridge Industries(Group) Co.,Ltd.
 
@@ -57692,6 +58391,9 @@ OUI:504061*
 OUI:5041B9*
  ID_OUI_FROM_DATABASE=I-O DATA DEVICE,INC.
 
+OUI:504348*
+ ID_OUI_FROM_DATABASE=ThingsMatrix Inc.
+
 OUI:5043B9*
  ID_OUI_FROM_DATABASE=OktoInform RUS
 
@@ -58001,12 +58703,18 @@ OUI:50934F*
 OUI:509551*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:509707*
+ ID_OUI_FROM_DATABASE=Xiamen Paperang Technology Co.,Ltd.
+
 OUI:509744*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
 OUI:509772*
  ID_OUI_FROM_DATABASE=Westinghouse Digital
 
+OUI:509839*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:509871*
  ID_OUI_FROM_DATABASE=Inventum Technologies Private Limited
 
@@ -58016,6 +58724,9 @@ OUI:5098B8*
 OUI:5098F3*
  ID_OUI_FROM_DATABASE=Rheem Australia Pty Ltd
 
+OUI:509A46*
+ ID_OUI_FROM_DATABASE=Safetrust Inc
+
 OUI:509A4C*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -58130,6 +58841,9 @@ OUI:50AD92*
 OUI:50ADD5*
  ID_OUI_FROM_DATABASE=Dynalec Corporation
 
+OUI:50AE86*
+ ID_OUI_FROM_DATABASE=Linkintec Co., Ltd
+
 OUI:50AF4D*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -58163,6 +58877,9 @@ OUI:50C006*
 OUI:50C271*
  ID_OUI_FROM_DATABASE=SECURETECH INC
 
+OUI:50C2ED*
+ ID_OUI_FROM_DATABASE=GN Audio A/S
+
 OUI:50C3A2*
  ID_OUI_FROM_DATABASE=nFore Technology Co.,Ltd.
 
@@ -58313,6 +59030,9 @@ OUI:50E0EF*
 OUI:50E14A*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:50E24E*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:50E549*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -58355,6 +59075,9 @@ OUI:50F14A*
 OUI:50F43C*
  ID_OUI_FROM_DATABASE=Leeo Inc
 
+OUI:50F4EB*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:50F520*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -58490,6 +59213,9 @@ OUI:540DF9*
 OUI:540E2D*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:540E58*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:541031*
  ID_OUI_FROM_DATABASE=SMARTO
 
@@ -58511,6 +59237,9 @@ OUI:541379*
 OUI:541473*
  ID_OUI_FROM_DATABASE=Wingtech Group (HongKong)Limited
 
+OUI:5414F3*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:5414FD*
  ID_OUI_FROM_DATABASE=Orbbec 3D Technology International
 
@@ -58658,6 +59387,9 @@ OUI:54489C*
 OUI:5448E6*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
+OUI:5449DF*
+ ID_OUI_FROM_DATABASE=Peloton Interactive, Inc
+
 OUI:544A00*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -58748,6 +59480,9 @@ OUI:5471DD*
 OUI:54724F*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:54725E*
+ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+
 OUI:547398*
  ID_OUI_FROM_DATABASE=Toyo Electronics Corporation
 
@@ -59162,6 +59897,9 @@ OUI:54E4A9*
 OUI:54E4BD*
  ID_OUI_FROM_DATABASE=FN-LINK TECHNOLOGY LIMITED
 
+OUI:54E61B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:54E63F*
  ID_OUI_FROM_DATABASE=ShenZhen LingKeWeiEr Technology Co., Ltd.
 
@@ -59213,6 +59951,9 @@ OUI:54F666*
 OUI:54F6C5*
  ID_OUI_FROM_DATABASE=FUJIAN STAR-NET COMMUNICATION CO.,LTD
 
+OUI:54F6E2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:54F876*
  ID_OUI_FROM_DATABASE=ABB AG
 
@@ -59273,6 +60014,9 @@ OUI:580A20*
 OUI:58108C*
  ID_OUI_FROM_DATABASE=Intelbras
 
+OUI:5810B7*
+ ID_OUI_FROM_DATABASE=Infinix mobility limited
+
 OUI:581243*
  ID_OUI_FROM_DATABASE=AcSiP Technology Corp.
 
@@ -59399,6 +60143,9 @@ OUI:58343B*
 OUI:583526*
  ID_OUI_FROM_DATABASE=DEEPLET TECHNOLOGY CORP
 
+OUI:58356B*
+ ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
+
 OUI:5835D9*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -59426,6 +60173,9 @@ OUI:5842E4*
 OUI:584498*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
+OUI:58454C*
+ ID_OUI_FROM_DATABASE=Ericsson AB
+
 OUI:58468F*
  ID_OUI_FROM_DATABASE=Koncar Electronics and Informatics
 
@@ -59477,6 +60227,9 @@ OUI:5853C0*
 OUI:5855CA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:5856C2*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:5856E8*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -59531,6 +60284,9 @@ OUI:586AB1*
 OUI:586B14*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:586C25*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:586D8F*
  ID_OUI_FROM_DATABASE=Cisco-Linksys, LLC
 
@@ -59639,6 +60395,9 @@ OUI:58946B*
 OUI:5894A2*
  ID_OUI_FROM_DATABASE=KETEK GmbH
 
+OUI:5894AE*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:5894B2*
  ID_OUI_FROM_DATABASE=BrainCo
 
@@ -59750,6 +60509,9 @@ OUI:58AE2B*
 OUI:58AEA8*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:58AEF1*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:58B035*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -59846,6 +60608,9 @@ OUI:58D08F*
 OUI:58D349*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:58D391*
+ ID_OUI_FROM_DATABASE=Quectel Wireless Solutions Co., Ltd.
+
 OUI:58D50A*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -59999,6 +60764,12 @@ OUI:58F98E*
 OUI:58FB84*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:58FB96*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
+OUI:58FC20*
+ ID_OUI_FROM_DATABASE=Altice Labs S.A.
+
 OUI:58FC73*
  ID_OUI_FROM_DATABASE=Arria Live Media, Inc.
 
@@ -60051,7 +60822,7 @@ OUI:58FCDBF*
  ID_OUI_FROM_DATABASE=Private
 
 OUI:58FD20*
- ID_OUI_FROM_DATABASE=Bravida Sakerhet AB
+ ID_OUI_FROM_DATABASE=Systemhouse Solutions AB
 
 OUI:58FDB1*
  ID_OUI_FROM_DATABASE=LG Electronics
@@ -60116,6 +60887,9 @@ OUI:5C15E1*
 OUI:5C16C7*
  ID_OUI_FROM_DATABASE=Big Switch Networks
 
+OUI:5C1720*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:5C1737*
  ID_OUI_FROM_DATABASE=I-View Now, LLC.
 
@@ -60311,6 +61085,9 @@ OUI:5C5F67*
 OUI:5C6199*
  ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
 
+OUI:5C625A*
+ ID_OUI_FROM_DATABASE=CANON INC.
+
 OUI:5C63BF*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -60320,6 +61097,9 @@ OUI:5C63C9*
 OUI:5C647A*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:5C648E*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
 OUI:5C666C*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
@@ -60575,6 +61355,9 @@ OUI:5CADCF*
 OUI:5CAF06*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:5CB00A*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:5CB066*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -60977,6 +61760,48 @@ OUI:601466*
 OUI:6014B3*
  ID_OUI_FROM_DATABASE=CyberTAN Technology Inc.
 
+OUI:6015920*
+ ID_OUI_FROM_DATABASE=S Labs sp. z o.o.
+
+OUI:6015921*
+ ID_OUI_FROM_DATABASE=RTDS Technologies Inc.
+
+OUI:6015922*
+ ID_OUI_FROM_DATABASE=EDA Technology Co.,LTD
+
+OUI:6015923*
+ ID_OUI_FROM_DATABASE=OSI TECHNOLOGY CO.,LTD.
+
+OUI:6015924*
+ ID_OUI_FROM_DATABASE=Zaptec
+
+OUI:6015926*
+ ID_OUI_FROM_DATABASE=BEIJING KUANGSHI TECHNOLOGY CO., LTD
+
+OUI:6015927*
+ ID_OUI_FROM_DATABASE=Faster CZ spol. s r.o.
+
+OUI:6015928*
+ ID_OUI_FROM_DATABASE=Yangzhou Wanfang Electronic Technology,CO .,Ltd.
+
+OUI:6015929*
+ ID_OUI_FROM_DATABASE=JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.
+
+OUI:601592A*
+ ID_OUI_FROM_DATABASE=insensiv GmbH
+
+OUI:601592B*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
+OUI:601592C*
+ ID_OUI_FROM_DATABASE=PSS Co., Ltd
+
+OUI:601592D*
+ ID_OUI_FROM_DATABASE=REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED
+
+OUI:601592E*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
 OUI:6015C7*
  ID_OUI_FROM_DATABASE=IdaTech
 
@@ -60989,6 +61814,9 @@ OUI:60182E*
 OUI:601888*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:601895*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:60190C*
  ID_OUI_FROM_DATABASE=RRAMAC
 
@@ -61166,9 +61994,15 @@ OUI:605661*
 OUI:605718*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:60577D*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:605BB4*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:605E4F*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:605F8D*
  ID_OUI_FROM_DATABASE=eero inc.
 
@@ -61436,12 +62270,18 @@ OUI:60A423*
 OUI:60A44C*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:60A4B7*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:60A4D0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
 OUI:60A730*
  ID_OUI_FROM_DATABASE=Shenzhen Yipinfang Internet Technology Co.,Ltd
 
+OUI:60A751*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:60A8FE*
  ID_OUI_FROM_DATABASE=Nokia Solutions and Networks GmbH & Co. KG
 
@@ -61529,6 +62369,9 @@ OUI:60C5A8*
 OUI:60C5AD*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:60C5E6*
+ ID_OUI_FROM_DATABASE=Skullcandy
+
 OUI:60C658*
  ID_OUI_FROM_DATABASE=PHYTRONIX Co.,Ltd.
 
@@ -61790,6 +62633,9 @@ OUI:6405E4*
 OUI:6405E9*
  ID_OUI_FROM_DATABASE=Shenzhen WayOS Technology Crop., Ltd.
 
+OUI:6407F6*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:64094C*
  ID_OUI_FROM_DATABASE=Beijing Superbee Wireless Technology Co.,Ltd
 
@@ -61805,6 +62651,9 @@ OUI:640B4A*
 OUI:640BD7*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:640D22*
+ ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
+
 OUI:640DCE*
  ID_OUI_FROM_DATABASE=SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.
 
@@ -61853,6 +62702,9 @@ OUI:64168D*
 OUI:6416F0*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:641759*
+ ID_OUI_FROM_DATABASE=Intellivision Holdings, LLC
+
 OUI:641A22*
  ID_OUI_FROM_DATABASE=Heliospectra AB
 
@@ -61898,6 +62750,9 @@ OUI:642656*
 OUI:642737*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:642753*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:6429ED*
  ID_OUI_FROM_DATABASE=AO PKK Milandr
 
@@ -62132,6 +62987,9 @@ OUI:646266E*
 OUI:64628A*
  ID_OUI_FROM_DATABASE=evon GmbH
 
+OUI:64644A*
+ ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
+
 OUI:64649B*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
@@ -62180,6 +63038,9 @@ OUI:646E6C*
 OUI:646E97*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:646EE0*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:646EEA*
  ID_OUI_FROM_DATABASE=Iskratel d.o.o.
 
@@ -62219,6 +63080,9 @@ OUI:647924*
 OUI:6479A7*
  ID_OUI_FROM_DATABASE=Phison Electronics Corp.
 
+OUI:6479F0*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:647BCE*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -62267,6 +63131,9 @@ OUI:6490C1*
 OUI:64956C*
  ID_OUI_FROM_DATABASE=LG Electronics
 
+OUI:649714*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:649829*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
@@ -62525,6 +63392,9 @@ OUI:64DFE9*
 OUI:64E003*
  ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
 
+OUI:64E0AB*
+ ID_OUI_FROM_DATABASE=UNIONMAN TECHNOLOGY CO.,LTD
+
 OUI:64E161*
  ID_OUI_FROM_DATABASE=DEP Corp.
 
@@ -62777,6 +63647,9 @@ OUI:6829DC*
 OUI:682C7B*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:682D83*
+ ID_OUI_FROM_DATABASE=SHENZHEN DINGHE COMMUNICATION COMPANY
+
 OUI:682DDC*
  ID_OUI_FROM_DATABASE=Wuhan Changjiang Electro-Communication Equipment CO.,LTD
 
@@ -63188,6 +64061,9 @@ OUI:689E0B*
 OUI:689E19*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:689E6A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:689FF0*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -63521,6 +64397,9 @@ OUI:6C19C0*
 OUI:6C1A75*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:6C1B3F*
+ ID_OUI_FROM_DATABASE=MiraeSignal Co., Ltd
+
 OUI:6C1C71*
  ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
 
@@ -63560,6 +64439,9 @@ OUI:6C24A6*
 OUI:6C25B9*
  ID_OUI_FROM_DATABASE=BBK EDUCATIONAL ELECTRONICS CORP.,LTD.
 
+OUI:6C2636*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:6C2779*
  ID_OUI_FROM_DATABASE=Microsoft Mobile Oy
 
@@ -63608,6 +64490,9 @@ OUI:6C32DE*
 OUI:6C33A9*
  ID_OUI_FROM_DATABASE=Magicjack LP
 
+OUI:6C3491*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:6C3838*
  ID_OUI_FROM_DATABASE=Marking System Technology Co., Ltd.
 
@@ -63662,6 +64547,9 @@ OUI:6C442A*
 OUI:6C4598*
  ID_OUI_FROM_DATABASE=Antex Electronic Corp.
 
+OUI:6C4760*
+ ID_OUI_FROM_DATABASE=Sunitec Enterprise Co.,Ltd
+
 OUI:6C49C1*
  ID_OUI_FROM_DATABASE=o2ones Co., Ltd.
 
@@ -63698,6 +64586,9 @@ OUI:6C54CD*
 OUI:6C55E8*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:6C5640*
+ ID_OUI_FROM_DATABASE=BLU Products Inc
+
 OUI:6C5697*
  ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
 
@@ -64094,6 +64985,9 @@ OUI:6CD1B0*
 OUI:6CD2BA*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:6CD630*
+ ID_OUI_FROM_DATABASE=Rootous System Co.,Ltd
+
 OUI:6CD68A*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
@@ -64256,6 +65150,9 @@ OUI:6CFAA7*
 OUI:6CFDB9*
  ID_OUI_FROM_DATABASE=Proware Technologies Co Ltd.
 
+OUI:6CFE54*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:6CFFBE*
  ID_OUI_FROM_DATABASE=MPB Communications Inc.
 
@@ -64985,6 +65882,9 @@ OUI:70B3D5002*
 OUI:70B3D5003*
  ID_OUI_FROM_DATABASE=ANYROAM
 
+OUI:70B3D5004*
+ ID_OUI_FROM_DATABASE=LEIDOS
+
 OUI:70B3D5005*
  ID_OUI_FROM_DATABASE=CT Company
 
@@ -65102,6 +66002,9 @@ OUI:70B3D502A*
 OUI:70B3D502B*
  ID_OUI_FROM_DATABASE=Scorpion Precision Industry (HK)CO. Ltd.
 
+OUI:70B3D502C*
+ ID_OUI_FROM_DATABASE=Iylus Inc.
+
 OUI:70B3D502D*
  ID_OUI_FROM_DATABASE=NEXTtec srl
 
@@ -65129,6 +66032,9 @@ OUI:70B3D5034*
 OUI:70B3D5035*
  ID_OUI_FROM_DATABASE=HKW-Elektronik GmbH
 
+OUI:70B3D5036*
+ ID_OUI_FROM_DATABASE=PARAGON ID
+
 OUI:70B3D5037*
  ID_OUI_FROM_DATABASE=EIFFAGE ENERGIE ELECTRONIQUE
 
@@ -65642,6 +66548,9 @@ OUI:70B3D50E1*
 OUI:70B3D50E3*
  ID_OUI_FROM_DATABASE=SinTau SrL
 
+OUI:70B3D50E4*
+ ID_OUI_FROM_DATABASE=Walter Müller AG
+
 OUI:70B3D50E5*
  ID_OUI_FROM_DATABASE=Delta Solutions LLC
 
@@ -65714,6 +66623,9 @@ OUI:70B3D50FB*
 OUI:70B3D50FC*
  ID_OUI_FROM_DATABASE=vitalcare
 
+OUI:70B3D50FD*
+ ID_OUI_FROM_DATABASE=JSC Ural Factories
+
 OUI:70B3D50FE*
  ID_OUI_FROM_DATABASE=Vocality International Ltd
 
@@ -65837,6 +66749,9 @@ OUI:70B3D5126*
 OUI:70B3D5127*
  ID_OUI_FROM_DATABASE=VITEC
 
+OUI:70B3D5128*
+ ID_OUI_FROM_DATABASE=Akse srl
+
 OUI:70B3D5129*
  ID_OUI_FROM_DATABASE=OOO Microlink-Svyaz
 
@@ -65999,6 +66914,9 @@ OUI:70B3D515E*
 OUI:70B3D515F*
  ID_OUI_FROM_DATABASE=SAVRONÄ°K ELEKTRONÄ°K
 
+OUI:70B3D5160*
+ ID_OUI_FROM_DATABASE=European Synchrotron Radiation Facility
+
 OUI:70B3D5161*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
@@ -66035,6 +66953,9 @@ OUI:70B3D516B*
 OUI:70B3D516C*
  ID_OUI_FROM_DATABASE=OCEAN
 
+OUI:70B3D516D*
+ ID_OUI_FROM_DATABASE=BluB0X Security, Inc.
+
 OUI:70B3D516E*
  ID_OUI_FROM_DATABASE=Jemac Sweden AB
 
@@ -66155,6 +67076,9 @@ OUI:70B3D5194*
 OUI:70B3D5195*
  ID_OUI_FROM_DATABASE=Ci4Rail
 
+OUI:70B3D5196*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
 OUI:70B3D5197*
  ID_OUI_FROM_DATABASE=Lattech Systems Pty Ltd
 
@@ -66170,6 +67094,9 @@ OUI:70B3D519B*
 OUI:70B3D519C*
  ID_OUI_FROM_DATABASE=Kubu, Inc.
 
+OUI:70B3D519D*
+ ID_OUI_FROM_DATABASE=Automata GmbH & Co. KG
+
 OUI:70B3D519E*
  ID_OUI_FROM_DATABASE=J-Factor Embedded Technologies
 
@@ -66218,9 +67145,15 @@ OUI:70B3D51AC*
 OUI:70B3D51AD*
  ID_OUI_FROM_DATABASE=Techworld Industries Ltd
 
+OUI:70B3D51AE*
+ ID_OUI_FROM_DATABASE=EcoG
+
 OUI:70B3D51AF*
  ID_OUI_FROM_DATABASE=Teenage Engineering AB
 
+OUI:70B3D51B0*
+ ID_OUI_FROM_DATABASE=NAL Research Corporation
+
 OUI:70B3D51B1*
  ID_OUI_FROM_DATABASE=Shanghai Danyan Information Technology Co., Ltd.
 
@@ -66494,6 +67427,9 @@ OUI:70B3D5210*
 OUI:70B3D5211*
  ID_OUI_FROM_DATABASE=Fracarro srl
 
+OUI:70B3D5212*
+ ID_OUI_FROM_DATABASE=Semiconsoft, inc
+
 OUI:70B3D5213*
  ID_OUI_FROM_DATABASE=ETON Deutschland Electro Acoustic GmbH
 
@@ -66734,6 +67670,9 @@ OUI:70B3D5263*
 OUI:70B3D5264*
  ID_OUI_FROM_DATABASE=ifak technology + service GmbH
 
+OUI:70B3D5265*
+ ID_OUI_FROM_DATABASE=Rapiot
+
 OUI:70B3D5266*
  ID_OUI_FROM_DATABASE=Spectra Displays Ltd
 
@@ -67010,6 +67949,9 @@ OUI:70B3D52C3*
 OUI:70B3D52C4*
  ID_OUI_FROM_DATABASE=Hodwa Co., Ltd
 
+OUI:70B3D52C5*
+ ID_OUI_FROM_DATABASE=MECT SRL
+
 OUI:70B3D52C7*
  ID_OUI_FROM_DATABASE=Worldsensing
 
@@ -67097,6 +68039,9 @@ OUI:70B3D52E2*
 OUI:70B3D52E3*
  ID_OUI_FROM_DATABASE=Meiknologic GmbH
 
+OUI:70B3D52E4*
+ ID_OUI_FROM_DATABASE=Schneider Electric Motion USA
+
 OUI:70B3D52E5*
  ID_OUI_FROM_DATABASE=Fläkt Woods AB
 
@@ -67229,9 +68174,15 @@ OUI:70B3D5310*
 OUI:70B3D5311*
  ID_OUI_FROM_DATABASE=Günther Spelsberg GmbH + Co. KG
 
+OUI:70B3D5312*
+ ID_OUI_FROM_DATABASE=SMITEC S.p.A.
+
 OUI:70B3D5313*
  ID_OUI_FROM_DATABASE=DIEHL Controls
 
+OUI:70B3D5314*
+ ID_OUI_FROM_DATABASE=Grau Elektronik GmbH
+
 OUI:70B3D5316*
  ID_OUI_FROM_DATABASE=Austco Marketing & Service (USA) ltd.
 
@@ -67499,6 +68450,9 @@ OUI:70B3D5371*
 OUI:70B3D5372*
  ID_OUI_FROM_DATABASE=MATELEX
 
+OUI:70B3D5373*
+ ID_OUI_FROM_DATABASE=Hangzhou Weimu Technology Co.,Ltd.
+
 OUI:70B3D5374*
  ID_OUI_FROM_DATABASE=OOO NPP Mars-Energo
 
@@ -67580,6 +68534,9 @@ OUI:70B3D538D*
 OUI:70B3D538F*
  ID_OUI_FROM_DATABASE=Sorynorydotcom Inc
 
+OUI:70B3D5390*
+ ID_OUI_FROM_DATABASE=TEX COMPUTER SRL
+
 OUI:70B3D5391*
  ID_OUI_FROM_DATABASE=Changshu Ruite Electric Co.,Ltd.
 
@@ -67682,6 +68639,9 @@ OUI:70B3D53B1*
 OUI:70B3D53B2*
  ID_OUI_FROM_DATABASE=Sicon srl
 
+OUI:70B3D53B3*
+ ID_OUI_FROM_DATABASE=Movicom Electric LLC
+
 OUI:70B3D53B4*
  ID_OUI_FROM_DATABASE=YOUSUNG
 
@@ -67799,6 +68759,9 @@ OUI:70B3D53DA*
 OUI:70B3D53DB*
  ID_OUI_FROM_DATABASE=KST technology
 
+OUI:70B3D53DC*
+ ID_OUI_FROM_DATABASE=XIA LLC
+
 OUI:70B3D53DD*
  ID_OUI_FROM_DATABASE=Kniggendorf + Kögler Security GmbH
 
@@ -68123,6 +69086,9 @@ OUI:70B3D544A*
 OUI:70B3D544B*
  ID_OUI_FROM_DATABASE=Open System Solutions Limited
 
+OUI:70B3D544C*
+ ID_OUI_FROM_DATABASE=ejoin, s.r.o.
+
 OUI:70B3D544D*
  ID_OUI_FROM_DATABASE=Vessel Technology Ltd
 
@@ -68132,6 +69098,9 @@ OUI:70B3D544E*
 OUI:70B3D544F*
  ID_OUI_FROM_DATABASE=Velvac Incorporated
 
+OUI:70B3D5452*
+ ID_OUI_FROM_DATABASE=ITALIANA PONTI RADIO SRL
+
 OUI:70B3D5453*
  ID_OUI_FROM_DATABASE=Foerster-Technik GmbH
 
@@ -68207,6 +69176,9 @@ OUI:70B3D546B*
 OUI:70B3D546C*
  ID_OUI_FROM_DATABASE=SHANGHAI CHENZHU INSTRUMENT CO., LTD.
 
+OUI:70B3D546D*
+ ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
+
 OUI:70B3D546E*
  ID_OUI_FROM_DATABASE=Zamir Recognition Systems Ltd.
 
@@ -68226,7 +69198,7 @@ OUI:70B3D5473*
  ID_OUI_FROM_DATABASE=KeyProd
 
 OUI:70B3D5474*
- ID_OUI_FROM_DATABASE=DAYOUPLUS
+ ID_OUI_FROM_DATABASE=CTROGERS LLC
 
 OUI:70B3D5475*
  ID_OUI_FROM_DATABASE=EWATTCH
@@ -68522,6 +69494,9 @@ OUI:70B3D54D7*
 OUI:70B3D54D8*
  ID_OUI_FROM_DATABASE=Versilis Inc.
 
+OUI:70B3D54D9*
+ ID_OUI_FROM_DATABASE=Coda Octopus Products Limited
+
 OUI:70B3D54DA*
  ID_OUI_FROM_DATABASE=Private
 
@@ -68615,6 +69590,9 @@ OUI:70B3D54F9*
 OUI:70B3D54FA*
  ID_OUI_FROM_DATABASE=Thruvision Limited
 
+OUI:70B3D54FB*
+ ID_OUI_FROM_DATABASE=MAS Elettronica sas di Mascetti Sandro e C.
+
 OUI:70B3D54FC*
  ID_OUI_FROM_DATABASE=Mettler Toledo
 
@@ -68657,6 +69635,9 @@ OUI:70B3D5508*
 OUI:70B3D550A*
  ID_OUI_FROM_DATABASE=AMEDTEC Medizintechnik Aue GmbH
 
+OUI:70B3D550B*
+ ID_OUI_FROM_DATABASE=Nordson Corporation
+
 OUI:70B3D550C*
  ID_OUI_FROM_DATABASE=Hangzhou landesker digital technology co. LTD
 
@@ -68717,6 +69698,9 @@ OUI:70B3D551E*
 OUI:70B3D551F*
  ID_OUI_FROM_DATABASE=VALEO CDA
 
+OUI:70B3D5520*
+ ID_OUI_FROM_DATABASE=promedias AG
+
 OUI:70B3D5521*
  ID_OUI_FROM_DATABASE=Selex ES Inc.
 
@@ -69005,6 +69989,9 @@ OUI:70B3D557F*
 OUI:70B3D5580*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:70B3D5581*
+ ID_OUI_FROM_DATABASE=Thermokon Sensortechnik GmbH
+
 OUI:70B3D5582*
  ID_OUI_FROM_DATABASE=VAGLER International Sdn Bhd
 
@@ -69017,6 +70004,9 @@ OUI:70B3D5584*
 OUI:70B3D5585*
  ID_OUI_FROM_DATABASE=Nefteavtomatika
 
+OUI:70B3D5586*
+ ID_OUI_FROM_DATABASE=Aliter Technologies
+
 OUI:70B3D5587*
  ID_OUI_FROM_DATABASE=INCAA Computers
 
@@ -69089,6 +70079,9 @@ OUI:70B3D559D*
 OUI:70B3D559E*
  ID_OUI_FROM_DATABASE=i2-electronics
 
+OUI:70B3D559F*
+ ID_OUI_FROM_DATABASE=Megger Germany GmbH
+
 OUI:70B3D55A0*
  ID_OUI_FROM_DATABASE=Ascon Tecnologic S.r.l.
 
@@ -69155,9 +70148,15 @@ OUI:70B3D55B5*
 OUI:70B3D55B6*
  ID_OUI_FROM_DATABASE=Ethical Lighting and Sensor Solutions Limited
 
+OUI:70B3D55B7*
+ ID_OUI_FROM_DATABASE=on-systems limited
+
 OUI:70B3D55B8*
  ID_OUI_FROM_DATABASE=Hella Gutmann Solutions GmbH
 
+OUI:70B3D55B9*
+ ID_OUI_FROM_DATABASE=EIZO RUGGED SOLUTIONS
+
 OUI:70B3D55BA*
  ID_OUI_FROM_DATABASE=INFRASAFE/ ADVANTOR SYSTEMS
 
@@ -69182,6 +70181,12 @@ OUI:70B3D55C0*
 OUI:70B3D55C1*
  ID_OUI_FROM_DATABASE=Shanghai JaWay Information Technology Co., Ltd.
 
+OUI:70B3D55C2*
+ ID_OUI_FROM_DATABASE=Sono-Tek Corporation
+
+OUI:70B3D55C3*
+ ID_OUI_FROM_DATABASE=DIC Corporation
+
 OUI:70B3D55C4*
  ID_OUI_FROM_DATABASE=TATTILE SRL
 
@@ -69371,6 +70376,9 @@ OUI:70B3D5602*
 OUI:70B3D5603*
  ID_OUI_FROM_DATABASE=EGISTECH CO.,LTD.
 
+OUI:70B3D5604*
+ ID_OUI_FROM_DATABASE=Foxtrot Research Corp
+
 OUI:70B3D5605*
  ID_OUI_FROM_DATABASE=Aplex Technology Inc.
 
@@ -69539,6 +70547,9 @@ OUI:70B3D563B*
 OUI:70B3D563C*
  ID_OUI_FROM_DATABASE=Pivothead
 
+OUI:70B3D563D*
+ ID_OUI_FROM_DATABASE=Topic Embedded Products B.V.
+
 OUI:70B3D563E*
  ID_OUI_FROM_DATABASE=RIKEN OPTECH CORPORATION
 
@@ -69683,6 +70694,9 @@ OUI:70B3D566C*
 OUI:70B3D566D*
  ID_OUI_FROM_DATABASE=Sanmina Israel
 
+OUI:70B3D566E*
+ ID_OUI_FROM_DATABASE=SIAME
+
 OUI:70B3D566F*
  ID_OUI_FROM_DATABASE=Simplified MFG
 
@@ -69737,6 +70751,9 @@ OUI:70B3D567F*
 OUI:70B3D5680*
  ID_OUI_FROM_DATABASE=BASF Corporation
 
+OUI:70B3D5681*
+ ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
+
 OUI:70B3D5682*
  ID_OUI_FROM_DATABASE=Rosslare Enterprises Limited
 
@@ -69776,6 +70793,9 @@ OUI:70B3D568E*
 OUI:70B3D568F*
  ID_OUI_FROM_DATABASE=PEEK TRAFFIC
 
+OUI:70B3D5690*
+ ID_OUI_FROM_DATABASE=Sicon srl
+
 OUI:70B3D5691*
  ID_OUI_FROM_DATABASE=PEEK TRAFFIC
 
@@ -69804,7 +70824,7 @@ OUI:70B3D569A*
  ID_OUI_FROM_DATABASE=Altaneos
 
 OUI:70B3D569B*
- ID_OUI_FROM_DATABASE=TAIYO SEIKI CO.,LTD.
+ ID_OUI_FROM_DATABASE=Horizon Co., Ltd
 
 OUI:70B3D569C*
  ID_OUI_FROM_DATABASE=Keepen
@@ -69878,6 +70898,9 @@ OUI:70B3D56B2*
 OUI:70B3D56B3*
  ID_OUI_FROM_DATABASE=DuraComm Corporation
 
+OUI:70B3D56B4*
+ ID_OUI_FROM_DATABASE=Nudron IoT Solutions LLP
+
 OUI:70B3D56B5*
  ID_OUI_FROM_DATABASE=ART SPA
 
@@ -69911,6 +70934,9 @@ OUI:70B3D56BE*
 OUI:70B3D56BF*
  ID_OUI_FROM_DATABASE=Otto Bihler Maschinenfabrik GmbH & Co. KG
 
+OUI:70B3D56C0*
+ ID_OUI_FROM_DATABASE=LLC NTZ Mekhanotronika
+
 OUI:70B3D56C1*
  ID_OUI_FROM_DATABASE=Labtronik s.r.l.
 
@@ -69968,6 +70994,12 @@ OUI:70B3D56D2*
 OUI:70B3D56D3*
  ID_OUI_FROM_DATABASE=DEUTA-WERKE GmbH
 
+OUI:70B3D56D4*
+ ID_OUI_FROM_DATABASE=Telerob Gesellschaft für Fernhantierungs
+
+OUI:70B3D56D5*
+ ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
+
 OUI:70B3D56D6*
  ID_OUI_FROM_DATABASE=KMtronic ltd
 
@@ -70133,6 +71165,9 @@ OUI:70B3D570B*
 OUI:70B3D570C*
  ID_OUI_FROM_DATABASE=Potter Electric Signal Co. LLC
 
+OUI:70B3D570D*
+ ID_OUI_FROM_DATABASE=OMNISENSING PHOTONICS LLC
+
 OUI:70B3D570E*
  ID_OUI_FROM_DATABASE=Wuhan Xingtuxinke ELectronic Co.,Ltd
 
@@ -70148,6 +71183,9 @@ OUI:70B3D5711*
 OUI:70B3D5712*
  ID_OUI_FROM_DATABASE=APG Cash Drawer, LLC
 
+OUI:70B3D5713*
+ ID_OUI_FROM_DATABASE=Coloet S.r.l.
+
 OUI:70B3D5714*
  ID_OUI_FROM_DATABASE=Alturna Networks
 
@@ -70166,6 +71204,9 @@ OUI:70B3D5718*
 OUI:70B3D5719*
  ID_OUI_FROM_DATABASE=2M Technology
 
+OUI:70B3D571A*
+ ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
+
 OUI:70B3D571B*
  ID_OUI_FROM_DATABASE=elsys
 
@@ -70179,7 +71220,7 @@ OUI:70B3D571E*
  ID_OUI_FROM_DATABASE=Motec Pty Ltd
 
 OUI:70B3D5720*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Jeio Tech
 
 OUI:70B3D5721*
  ID_OUI_FROM_DATABASE=Zoe Medical
@@ -70193,6 +71234,9 @@ OUI:70B3D5723*
 OUI:70B3D5724*
  ID_OUI_FROM_DATABASE=Quan International Co., Ltd.
 
+OUI:70B3D5725*
+ ID_OUI_FROM_DATABASE=Swiss Timing LTD
+
 OUI:70B3D5726*
  ID_OUI_FROM_DATABASE=ATGS
 
@@ -70208,6 +71252,9 @@ OUI:70B3D5729*
 OUI:70B3D572A*
  ID_OUI_FROM_DATABASE=MRC Systems GmbH
 
+OUI:70B3D572B*
+ ID_OUI_FROM_DATABASE=Medipense Inc.
+
 OUI:70B3D572C*
  ID_OUI_FROM_DATABASE=NuRi&G Engineering co,.Ltd.
 
@@ -70286,6 +71333,9 @@ OUI:70B3D5744*
 OUI:70B3D5745*
  ID_OUI_FROM_DATABASE=TMSI LLC
 
+OUI:70B3D5746*
+ ID_OUI_FROM_DATABASE=Smart Systems LLC
+
 OUI:70B3D5747*
  ID_OUI_FROM_DATABASE=Eva Automation
 
@@ -70526,6 +71576,9 @@ OUI:70B3D5796*
 OUI:70B3D5797*
  ID_OUI_FROM_DATABASE=Mitsubishi Electric India Pvt. Ltd.
 
+OUI:70B3D5798*
+ ID_OUI_FROM_DATABASE=TIAMA
+
 OUI:70B3D5799*
  ID_OUI_FROM_DATABASE=Vitec System Engineering Inc.
 
@@ -70679,6 +71732,9 @@ OUI:70B3D57CA*
 OUI:70B3D57CB*
  ID_OUI_FROM_DATABASE=KeyW Corporation
 
+OUI:70B3D57CC*
+ ID_OUI_FROM_DATABASE=MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.
+
 OUI:70B3D57CD*
  ID_OUI_FROM_DATABASE=Molekuler Goruntuleme A.S.
 
@@ -70799,6 +71855,9 @@ OUI:70B3D57F4*
 OUI:70B3D57F5*
  ID_OUI_FROM_DATABASE=Incusense
 
+OUI:70B3D57F6*
+ ID_OUI_FROM_DATABASE=IDZ Ltd
+
 OUI:70B3D57F7*
  ID_OUI_FROM_DATABASE=JASCO Applied Sciences Canada Ltd
 
@@ -70808,6 +71867,9 @@ OUI:70B3D57F8*
 OUI:70B3D57F9*
  ID_OUI_FROM_DATABASE=Communication Systems Solutions
 
+OUI:70B3D57FA*
+ ID_OUI_FROM_DATABASE=meoENERGY
+
 OUI:70B3D57FB*
  ID_OUI_FROM_DATABASE=db Broadcast Products Ltd
 
@@ -70877,6 +71939,9 @@ OUI:70B3D5810*
 OUI:70B3D5811*
  ID_OUI_FROM_DATABASE=CJSC Â«INTERSET»
 
+OUI:70B3D5812*
+ ID_OUI_FROM_DATABASE=TESCAN Brno, s.r.o.
+
 OUI:70B3D5813*
  ID_OUI_FROM_DATABASE=Wavemed srl
 
@@ -70940,6 +72005,9 @@ OUI:70B3D5827*
 OUI:70B3D5828*
  ID_OUI_FROM_DATABASE=Xacti Corporation
 
+OUI:70B3D5829*
+ ID_OUI_FROM_DATABASE=Guan Show Technologe Co., Ltd.
+
 OUI:70B3D582A*
  ID_OUI_FROM_DATABASE=C W F Hamilton & Co Ltd
 
@@ -71414,6 +72482,9 @@ OUI:70B3D58C7*
 OUI:70B3D58C8*
  ID_OUI_FROM_DATABASE=KRONOTECH SRL
 
+OUI:70B3D58C9*
+ ID_OUI_FROM_DATABASE=Arwin Technology Limited
+
 OUI:70B3D58CA*
  ID_OUI_FROM_DATABASE=Allied Data Systems
 
@@ -71492,6 +72563,9 @@ OUI:70B3D58E3*
 OUI:70B3D58E4*
  ID_OUI_FROM_DATABASE=Aplex Technology Inc.
 
+OUI:70B3D58E5*
+ ID_OUI_FROM_DATABASE=Shanghai Armour Technology Co., Ltd.
+
 OUI:70B3D58E6*
  ID_OUI_FROM_DATABASE=Mothonic AB
 
@@ -71501,6 +72575,9 @@ OUI:70B3D58E7*
 OUI:70B3D58E8*
  ID_OUI_FROM_DATABASE=PREO INDUSTRIES FAR EAST LTD
 
+OUI:70B3D58E9*
+ ID_OUI_FROM_DATABASE=COONTROL Tecnologia em Combustão LTDA EPP
+
 OUI:70B3D58EA*
  ID_OUI_FROM_DATABASE=JLCooper Electronics
 
@@ -71558,6 +72635,9 @@ OUI:70B3D58FB*
 OUI:70B3D58FC*
  ID_OUI_FROM_DATABASE=Mianjie Technology
 
+OUI:70B3D58FD*
+ ID_OUI_FROM_DATABASE=sonatest
+
 OUI:70B3D58FE*
  ID_OUI_FROM_DATABASE=Selmatec AS
 
@@ -71615,12 +72695,18 @@ OUI:70B3D5910*
 OUI:70B3D5911*
  ID_OUI_FROM_DATABASE=Equatel
 
+OUI:70B3D5912*
+ ID_OUI_FROM_DATABASE=VERTEL DIGITAL PRIVATE LIMITED
+
 OUI:70B3D5913*
  ID_OUI_FROM_DATABASE=Shenzhen Riitek Technology Co.,Ltd
 
 OUI:70B3D5914*
  ID_OUI_FROM_DATABASE=Contec Americas Inc.
 
+OUI:70B3D5915*
+ ID_OUI_FROM_DATABASE=DHK Storage, LLC
+
 OUI:70B3D5916*
  ID_OUI_FROM_DATABASE=Techno Mathematical Co.,Ltd
 
@@ -71675,6 +72761,9 @@ OUI:70B3D5926*
 OUI:70B3D5927*
  ID_OUI_FROM_DATABASE=LG Electronics
 
+OUI:70B3D5928*
+ ID_OUI_FROM_DATABASE=Done Design Inc
+
 OUI:70B3D5929*
  ID_OUI_FROM_DATABASE=OutSys
 
@@ -71870,6 +72959,9 @@ OUI:70B3D5969*
 OUI:70B3D596B*
  ID_OUI_FROM_DATABASE=FOCAL-JMLab
 
+OUI:70B3D596C*
+ ID_OUI_FROM_DATABASE=Weble Sàrl
+
 OUI:70B3D596D*
  ID_OUI_FROM_DATABASE=MSB Elektronik und Gerätebau GmbH
 
@@ -72107,6 +73199,9 @@ OUI:70B3D59BA*
 OUI:70B3D59BB*
  ID_OUI_FROM_DATABASE=Jinga-hi, Inc.
 
+OUI:70B3D59BC*
+ ID_OUI_FROM_DATABASE=Radian Research, Inc.
+
 OUI:70B3D59BD*
  ID_OUI_FROM_DATABASE=Signal Processing Devices Sweden AB
 
@@ -72252,7 +73347,7 @@ OUI:70B3D59ED*
  ID_OUI_FROM_DATABASE=Benchmark Electronics BV
 
 OUI:70B3D59EE*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Lockheed Martin - THAAD
 
 OUI:70B3D59EF*
  ID_OUI_FROM_DATABASE=Cottonwood Creek Technologies, Inc.
@@ -72302,12 +73397,18 @@ OUI:70B3D59FD*
 OUI:70B3D59FE*
  ID_OUI_FROM_DATABASE=SURUGA SEIKI CO., LTD.
 
+OUI:70B3D59FF*
+ ID_OUI_FROM_DATABASE=Network Integrity Systems
+
 OUI:70B3D5A00*
  ID_OUI_FROM_DATABASE=ATX NETWORKS LTD
 
 OUI:70B3D5A01*
  ID_OUI_FROM_DATABASE=FeldTech GmbH
 
+OUI:70B3D5A02*
+ ID_OUI_FROM_DATABASE=GreenFlux
+
 OUI:70B3D5A03*
  ID_OUI_FROM_DATABASE=Proemion GmbH
 
@@ -72383,6 +73484,9 @@ OUI:70B3D5A1C*
 OUI:70B3D5A1D*
  ID_OUI_FROM_DATABASE=Fluid Components International
 
+OUI:70B3D5A1E*
+ ID_OUI_FROM_DATABASE=Monnit Corporation
+
 OUI:70B3D5A1F*
  ID_OUI_FROM_DATABASE=GlobalTest LLC
 
@@ -72762,7 +73866,7 @@ OUI:70B3D5A9E*
  ID_OUI_FROM_DATABASE=Argon ST
 
 OUI:70B3D5A9F*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Master Meter Inc.
 
 OUI:70B3D5AA0*
  ID_OUI_FROM_DATABASE=Simple Works, Inc.
@@ -72902,6 +74006,9 @@ OUI:70B3D5ACD*
 OUI:70B3D5ACF*
  ID_OUI_FROM_DATABASE=APG Cash Drawer, LLC
 
+OUI:70B3D5AD0*
+ ID_OUI_FROM_DATABASE=REO AG
+
 OUI:70B3D5AD1*
  ID_OUI_FROM_DATABASE=Sensile Technologies SA
 
@@ -73043,6 +74150,9 @@ OUI:70B3D5AFF*
 OUI:70B3D5B00*
  ID_OUI_FROM_DATABASE=HORIBA ABX SAS
 
+OUI:70B3D5B01*
+ ID_OUI_FROM_DATABASE=G.S.D GROUP INC.
+
 OUI:70B3D5B02*
  ID_OUI_FROM_DATABASE=Nordic Automation Systems AS
 
@@ -73088,6 +74198,9 @@ OUI:70B3D5B10*
 OUI:70B3D5B11*
  ID_OUI_FROM_DATABASE=CAB S.R.L.
 
+OUI:70B3D5B12*
+ ID_OUI_FROM_DATABASE=VTEQ
+
 OUI:70B3D5B13*
  ID_OUI_FROM_DATABASE=Omwave
 
@@ -73256,6 +74369,9 @@ OUI:70B3D5B4A*
 OUI:70B3D5B4B*
  ID_OUI_FROM_DATABASE=Network Customizing Technologies Inc
 
+OUI:70B3D5B4C*
+ ID_OUI_FROM_DATABASE=AmericanPharma Technologies
+
 OUI:70B3D5B4D*
  ID_OUI_FROM_DATABASE=Avidbots Corporation
 
@@ -73358,6 +74474,9 @@ OUI:70B3D5B6E*
 OUI:70B3D5B6F*
  ID_OUI_FROM_DATABASE=Integra Metering SAS
 
+OUI:70B3D5B70*
+ ID_OUI_FROM_DATABASE=Torion Plasma Corporation
+
 OUI:70B3D5B71*
  ID_OUI_FROM_DATABASE=Optiver Pty Ltd
 
@@ -73382,6 +74501,9 @@ OUI:70B3D5B77*
 OUI:70B3D5B78*
  ID_OUI_FROM_DATABASE=HOERMANN GmbH
 
+OUI:70B3D5B79*
+ ID_OUI_FROM_DATABASE=Dadacon GmbH
+
 OUI:70B3D5B7A*
  ID_OUI_FROM_DATABASE=MAHLE
 
@@ -73610,6 +74732,9 @@ OUI:70B3D5BC6*
 OUI:70B3D5BC7*
  ID_OUI_FROM_DATABASE=Autonomic Controls, Inc.
 
+OUI:70B3D5BC8*
+ ID_OUI_FROM_DATABASE=Loma Systems s.r.o.
+
 OUI:70B3D5BC9*
  ID_OUI_FROM_DATABASE=Yite technology
 
@@ -73652,6 +74777,9 @@ OUI:70B3D5BD5*
 OUI:70B3D5BD6*
  ID_OUI_FROM_DATABASE=Consarc Corporation
 
+OUI:70B3D5BD7*
+ ID_OUI_FROM_DATABASE=TT Group SRL
+
 OUI:70B3D5BD8*
  ID_OUI_FROM_DATABASE=MB connect line GmbH Fernwartungssysteme
 
@@ -74087,6 +75215,9 @@ OUI:70B3D5C69*
 OUI:70B3D5C6A*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:70B3D5C6B*
+ ID_OUI_FROM_DATABASE=Herholdt Controls srl
+
 OUI:70B3D5C6C*
  ID_OUI_FROM_DATABASE=McQ Inc
 
@@ -74240,6 +75371,9 @@ OUI:70B3D5C9E*
 OUI:70B3D5C9F*
  ID_OUI_FROM_DATABASE=Triax A/S
 
+OUI:70B3D5CA0*
+ ID_OUI_FROM_DATABASE=Xirgo Technologies LLC
+
 OUI:70B3D5CA1*
  ID_OUI_FROM_DATABASE=Waldo System
 
@@ -74255,6 +75389,9 @@ OUI:70B3D5CA4*
 OUI:70B3D5CA5*
  ID_OUI_FROM_DATABASE=PTS Technologies Pte Ltd
 
+OUI:70B3D5CA6*
+ ID_OUI_FROM_DATABASE=AXING AG
+
 OUI:70B3D5CA7*
  ID_OUI_FROM_DATABASE=i-View Communication Inc.
 
@@ -74273,6 +75410,9 @@ OUI:70B3D5CAB*
 OUI:70B3D5CAC*
  ID_OUI_FROM_DATABASE=CRDE
 
+OUI:70B3D5CAD*
+ ID_OUI_FROM_DATABASE=YUYAMA MFG Co.,Ltd
+
 OUI:70B3D5CAE*
  ID_OUI_FROM_DATABASE=THEMA
 
@@ -74294,6 +75434,9 @@ OUI:70B3D5CB3*
 OUI:70B3D5CB4*
  ID_OUI_FROM_DATABASE=Planewave Instruments
 
+OUI:70B3D5CB5*
+ ID_OUI_FROM_DATABASE=Atlas Lighting Products
+
 OUI:70B3D5CB6*
  ID_OUI_FROM_DATABASE=Kuebrich Ingeniergesellschaft mbh & Co. KG
 
@@ -74324,6 +75467,9 @@ OUI:70B3D5CBE*
 OUI:70B3D5CBF*
  ID_OUI_FROM_DATABASE=Cubic ITS, Inc. dba GRIDSMART Technologies
 
+OUI:70B3D5CC0*
+ ID_OUI_FROM_DATABASE=Avionica
+
 OUI:70B3D5CC1*
  ID_OUI_FROM_DATABASE=BEEcube Inc.
 
@@ -74417,6 +75563,9 @@ OUI:70B3D5CDE*
 OUI:70B3D5CDF*
  ID_OUI_FROM_DATABASE=3D Printing Specialists
 
+OUI:70B3D5CE0*
+ ID_OUI_FROM_DATABASE=M.S. CONTROL
+
 OUI:70B3D5CE1*
  ID_OUI_FROM_DATABASE=EA Elektroautomatik GmbH & Co. KG
 
@@ -74435,12 +75584,18 @@ OUI:70B3D5CE5*
 OUI:70B3D5CE7*
  ID_OUI_FROM_DATABASE=June Automation Singapore Pte. Ltd.
 
+OUI:70B3D5CE8*
+ ID_OUI_FROM_DATABASE=Grossenbacher Systeme AG
+
 OUI:70B3D5CE9*
  ID_OUI_FROM_DATABASE=KINEMETRICS
 
 OUI:70B3D5CEA*
  ID_OUI_FROM_DATABASE=Computerwise, Inc.
 
+OUI:70B3D5CEB*
+ ID_OUI_FROM_DATABASE=Xirgo Technologies LLC
+
 OUI:70B3D5CEC*
  ID_OUI_FROM_DATABASE=Deltronic Security AB
 
@@ -74480,6 +75635,12 @@ OUI:70B3D5CF7*
 OUI:70B3D5CF8*
  ID_OUI_FROM_DATABASE=Idneo Technologies S.A.U.
 
+OUI:70B3D5CF9*
+ ID_OUI_FROM_DATABASE=Breas Medical AB
+
+OUI:70B3D5CFA*
+ ID_OUI_FROM_DATABASE=SCHEIBER
+
 OUI:70B3D5CFB*
  ID_OUI_FROM_DATABASE=Screen Innovations
 
@@ -74507,6 +75668,9 @@ OUI:70B3D5D02*
 OUI:70B3D5D03*
  ID_OUI_FROM_DATABASE=Digitella Inc.
 
+OUI:70B3D5D04*
+ ID_OUI_FROM_DATABASE=Plenty Unlimited Inc
+
 OUI:70B3D5D05*
  ID_OUI_FROM_DATABASE=Colmek
 
@@ -74573,6 +75737,9 @@ OUI:70B3D5D1B*
 OUI:70B3D5D1C*
  ID_OUI_FROM_DATABASE=Specialised Imaging Limited
 
+OUI:70B3D5D1D*
+ ID_OUI_FROM_DATABASE=Stuyts Engineering Haarlem BV
+
 OUI:70B3D5D1E*
  ID_OUI_FROM_DATABASE=Houston Radar LLC
 
@@ -74582,6 +75749,9 @@ OUI:70B3D5D1F*
 OUI:70B3D5D20*
  ID_OUI_FROM_DATABASE=Rheonics GmbH
 
+OUI:70B3D5D21*
+ ID_OUI_FROM_DATABASE=biosilver .co.,ltd
+
 OUI:70B3D5D22*
  ID_OUI_FROM_DATABASE=DEK Technologies
 
@@ -74612,6 +75782,9 @@ OUI:70B3D5D2A*
 OUI:70B3D5D2B*
  ID_OUI_FROM_DATABASE=StreamPlay Oy Ltd
 
+OUI:70B3D5D2C*
+ ID_OUI_FROM_DATABASE=microWerk GmbH
+
 OUI:70B3D5D2D*
  ID_OUI_FROM_DATABASE=Evolute Systems Private Limited
 
@@ -74684,6 +75857,9 @@ OUI:70B3D5D43*
 OUI:70B3D5D44*
  ID_OUI_FROM_DATABASE=ic-automation GmbH
 
+OUI:70B3D5D45*
+ ID_OUI_FROM_DATABASE=Vemco Sp. z o. o.
+
 OUI:70B3D5D46*
  ID_OUI_FROM_DATABASE=Contineo s.r.o.
 
@@ -74720,6 +75896,9 @@ OUI:70B3D5D50*
 OUI:70B3D5D51*
  ID_OUI_FROM_DATABASE=Azcom Technology S.r.l.
 
+OUI:70B3D5D52*
+ ID_OUI_FROM_DATABASE=Sensoronic Co.,Ltd
+
 OUI:70B3D5D53*
  ID_OUI_FROM_DATABASE=BeiLi eTek (Zhangjiagang) Co., Ltd.
 
@@ -74795,6 +75974,9 @@ OUI:70B3D5D6B*
 OUI:70B3D5D6C*
  ID_OUI_FROM_DATABASE=GP Systems GmbH
 
+OUI:70B3D5D6D*
+ ID_OUI_FROM_DATABASE=ACD Elekronik GmbH
+
 OUI:70B3D5D6E*
  ID_OUI_FROM_DATABASE=ard sa
 
@@ -74858,6 +76040,9 @@ OUI:70B3D5D81*
 OUI:70B3D5D82*
  ID_OUI_FROM_DATABASE=SUN ELECTRONICS CO.,LTD.
 
+OUI:70B3D5D83*
+ ID_OUI_FROM_DATABASE=AKASAKATEC  INC.
+
 OUI:70B3D5D84*
  ID_OUI_FROM_DATABASE=Sentry360
 
@@ -74942,6 +76127,9 @@ OUI:70B3D5D9E*
 OUI:70B3D5D9F*
  ID_OUI_FROM_DATABASE=Digital Solutions JSC
 
+OUI:70B3D5DA0*
+ ID_OUI_FROM_DATABASE=Jiangsu Etern Compamy Limited
+
 OUI:70B3D5DA1*
  ID_OUI_FROM_DATABASE=Qprel srl
 
@@ -75110,6 +76298,9 @@ OUI:70B3D5DD8*
 OUI:70B3D5DD9*
  ID_OUI_FROM_DATABASE=MaNima Technologies BV
 
+OUI:70B3D5DDA*
+ ID_OUI_FROM_DATABASE=Hubbell Power Systems
+
 OUI:70B3D5DDB*
  ID_OUI_FROM_DATABASE=Intra Corporation
 
@@ -75158,6 +76349,9 @@ OUI:70B3D5DE9*
 OUI:70B3D5DEA*
  ID_OUI_FROM_DATABASE=Advanced Ventilation Applications, Inc.
 
+OUI:70B3D5DEB*
+ ID_OUI_FROM_DATABASE=DORLET SAU
+
 OUI:70B3D5DEC*
  ID_OUI_FROM_DATABASE=Condev-Automation GmbH
 
@@ -75167,6 +76361,9 @@ OUI:70B3D5DED*
 OUI:70B3D5DEE*
  ID_OUI_FROM_DATABASE=CRDE
 
+OUI:70B3D5DEF*
+ ID_OUI_FROM_DATABASE=ISG Nordic AB
+
 OUI:70B3D5DF0*
  ID_OUI_FROM_DATABASE=astozi consulting Tomasz Zieba
 
@@ -75281,6 +76478,9 @@ OUI:70B3D5E17*
 OUI:70B3D5E18*
  ID_OUI_FROM_DATABASE=Plasmapp Co.,Ltd.
 
+OUI:70B3D5E19*
+ ID_OUI_FROM_DATABASE=BAB TECHNOLOGIE GmbH
+
 OUI:70B3D5E1A*
  ID_OUI_FROM_DATABASE=BIZERBA LUCEO
 
@@ -75398,6 +76598,9 @@ OUI:70B3D5E3F*
 OUI:70B3D5E40*
  ID_OUI_FROM_DATABASE=Siemens Mobility GmbH - MO TI SPA
 
+OUI:70B3D5E42*
+ ID_OUI_FROM_DATABASE=Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd
+
 OUI:70B3D5E43*
  ID_OUI_FROM_DATABASE=SL Audio A/S
 
@@ -75482,6 +76685,9 @@ OUI:70B3D5E5D*
 OUI:70B3D5E5E*
  ID_OUI_FROM_DATABASE=Critical Link LLC
 
+OUI:70B3D5E60*
+ ID_OUI_FROM_DATABASE=Davitor AB
+
 OUI:70B3D5E61*
  ID_OUI_FROM_DATABASE=Adeli
 
@@ -75854,6 +77060,9 @@ OUI:70B3D5EDE*
 OUI:70B3D5EDF*
  ID_OUI_FROM_DATABASE=GridNavigator
 
+OUI:70B3D5EE0*
+ ID_OUI_FROM_DATABASE=Stecomp
+
 OUI:70B3D5EE1*
  ID_OUI_FROM_DATABASE=allora Factory BVBA
 
@@ -75899,6 +77108,9 @@ OUI:70B3D5EEE*
 OUI:70B3D5EEF*
  ID_OUI_FROM_DATABASE=TATTILE SRL
 
+OUI:70B3D5EF0*
+ ID_OUI_FROM_DATABASE=PNETWORKS
+
 OUI:70B3D5EF1*
  ID_OUI_FROM_DATABASE=Nanotok LLC
 
@@ -76025,6 +77237,9 @@ OUI:70B3D5F19*
 OUI:70B3D5F1A*
  ID_OUI_FROM_DATABASE=Sator Controls s.r.o.
 
+OUI:70B3D5F1B*
+ ID_OUI_FROM_DATABASE=RoyalShield Technologies India Private Limited
+
 OUI:70B3D5F1C*
  ID_OUI_FROM_DATABASE=Bavaria Digital Technik GmbH
 
@@ -76052,6 +77267,9 @@ OUI:70B3D5F24*
 OUI:70B3D5F25*
  ID_OUI_FROM_DATABASE=JSC â€œScientific Industrial Enterprise Rubin
 
+OUI:70B3D5F26*
+ ID_OUI_FROM_DATABASE=XJ ELECTRIC CO., LTD.
+
 OUI:70B3D5F27*
  ID_OUI_FROM_DATABASE=NIRIT- Xinwei  Telecom Technology Co., Ltd.
 
@@ -76082,6 +77300,9 @@ OUI:70B3D5F2F*
 OUI:70B3D5F30*
  ID_OUI_FROM_DATABASE=ADE Technology Inc.
 
+OUI:70B3D5F31*
+ ID_OUI_FROM_DATABASE=The-Box Development
+
 OUI:70B3D5F32*
  ID_OUI_FROM_DATABASE=Elektronik Art
 
@@ -76299,7 +77520,7 @@ OUI:70B3D5F7B*
  ID_OUI_FROM_DATABASE=KST technology
 
 OUI:70B3D5F7C*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Medicomp, Inc
 
 OUI:70B3D5F7D*
  ID_OUI_FROM_DATABASE=2M Technology
@@ -76466,6 +77687,9 @@ OUI:70B3D5FB2*
 OUI:70B3D5FB3*
  ID_OUI_FROM_DATABASE=3PS Inc
 
+OUI:70B3D5FB4*
+ ID_OUI_FROM_DATABASE=Array Technologies Inc.
+
 OUI:70B3D5FB5*
  ID_OUI_FROM_DATABASE=Orange Tree Technologies Ltd
 
@@ -76595,6 +77819,12 @@ OUI:70B3D5FDE*
 OUI:70B3D5FDF*
  ID_OUI_FROM_DATABASE=NARA CONTROLS INC.
 
+OUI:70B3D5FE0*
+ ID_OUI_FROM_DATABASE=Blueprint Lab
+
+OUI:70B3D5FE1*
+ ID_OUI_FROM_DATABASE=Shenzhen Zhiting Technology Co.,Ltd
+
 OUI:70B3D5FE2*
  ID_OUI_FROM_DATABASE=Galileo Tıp Teknolojileri San. ve Tic. A.S.
 
@@ -76802,6 +78032,9 @@ OUI:70DEF9*
 OUI:70DF2F*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:70DFF7*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:70E027*
  ID_OUI_FROM_DATABASE=HONGYU COMMUNICATION TECHNOLOGY LIMITED
 
@@ -76850,6 +78083,9 @@ OUI:70EF00*
 OUI:70F087*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:70F088*
+ ID_OUI_FROM_DATABASE=Nintendo Co.,Ltd
+
 OUI:70F096*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -76964,6 +78200,9 @@ OUI:7404F0*
 OUI:7405A5*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:7409AC*
+ ID_OUI_FROM_DATABASE=Quext, LLC
+
 OUI:740ABC*
  ID_OUI_FROM_DATABASE=LightwaveRF Technology Ltd
 
@@ -76982,6 +78221,9 @@ OUI:7412BB*
 OUI:741489*
  ID_OUI_FROM_DATABASE=SRT Wireless
 
+OUI:741575*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:7415E2*
  ID_OUI_FROM_DATABASE=Tri-Sen Systems Corporation
 
@@ -77588,6 +78830,9 @@ OUI:74AC5F*
 OUI:74ACB9*
  ID_OUI_FROM_DATABASE=Ubiquiti Networks Inc.
 
+OUI:74AD98*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:74ADB7*
  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
 
@@ -77687,6 +78932,9 @@ OUI:74D0DC*
 OUI:74D21D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:74D285*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:74D435*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -78005,6 +79253,9 @@ OUI:780ED1*
 OUI:780F77*
  ID_OUI_FROM_DATABASE=HangZhou Gubei Electronics Technology Co.,Ltd
 
+OUI:781053*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:781100*
  ID_OUI_FROM_DATABASE=Quantumsolution
 
@@ -78026,6 +79277,9 @@ OUI:7817BE*
 OUI:781881*
  ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
 
+OUI:7818A8*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:78192E*
  ID_OUI_FROM_DATABASE=NASCENT Technology
 
@@ -78284,9 +79538,15 @@ OUI:78617C*
 OUI:786256*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:7864C0*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:7864E6*
  ID_OUI_FROM_DATABASE=Green Motive Technology Limited
 
+OUI:78653B*
+ ID_OUI_FROM_DATABASE=Shaoxing Ourten Electronics Co., Ltd.
+
 OUI:786559*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -78326,6 +79586,9 @@ OUI:78719C*
 OUI:78725D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:787A6F*
+ ID_OUI_FROM_DATABASE=Juice Technology AG
+
 OUI:787B8A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -78488,6 +79751,9 @@ OUI:78A5DD*
 OUI:78A683*
  ID_OUI_FROM_DATABASE=Precidata
 
+OUI:78A6A0*
+ ID_OUI_FROM_DATABASE=Hangzhou Ezviz Software Co.,Ltd.
+
 OUI:78A6BD*
  ID_OUI_FROM_DATABASE=DAEYEON Control&Instrument Co,.Ltd
 
@@ -78545,6 +79811,9 @@ OUI:78B3CE*
 OUI:78B46A*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:78B554*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:78B5D2*
  ID_OUI_FROM_DATABASE=Ever Treasure Industrial Limited
 
@@ -78731,6 +80000,9 @@ OUI:78CD8E*
 OUI:78CF2F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:78CFF9*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:78D004*
  ID_OUI_FROM_DATABASE=Neousys Technology Inc.
 
@@ -78866,6 +80138,9 @@ OUI:78D800E*
 OUI:78D99F*
  ID_OUI_FROM_DATABASE=NuCom HK Ltd.
 
+OUI:78D9E9*
+ ID_OUI_FROM_DATABASE=MOMENTUM IOT
+
 OUI:78DA07*
  ID_OUI_FROM_DATABASE=Zhejiang Tmall Technology Co., Ltd.
 
@@ -78905,6 +80180,9 @@ OUI:78E22C*
 OUI:78E2BD*
  ID_OUI_FROM_DATABASE=Vodafone Automotive S.p.A.
 
+OUI:78E36D*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:78E3B5*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -78941,6 +80219,9 @@ OUI:78EF4C*
 OUI:78F09B*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:78F235*
+ ID_OUI_FROM_DATABASE=Sichuan AI-Link Technology Co., Ltd.
+
 OUI:78F29E*
  ID_OUI_FROM_DATABASE=PEGATRON CORPORATION
 
@@ -78992,6 +80273,9 @@ OUI:78FF57*
 OUI:78FFCA*
  ID_OUI_FROM_DATABASE=TECNO MOBILE LIMITED
 
+OUI:7C004D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:7C010A*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -79037,6 +80321,9 @@ OUI:7C08D9*
 OUI:7C092B*
  ID_OUI_FROM_DATABASE=Bekey A/S
 
+OUI:7C0A3F*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:7C0A50*
  ID_OUI_FROM_DATABASE=J-MEX Inc.
 
@@ -79076,6 +80363,9 @@ OUI:7C1A03*
 OUI:7C1AFC*
  ID_OUI_FROM_DATABASE=Dalian Co-Edifice Video Technology Co., Ltd
 
+OUI:7C1B93*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:7C1C4E*
  ID_OUI_FROM_DATABASE=LG Innotek
 
@@ -79187,6 +80477,9 @@ OUI:7C3BD5*
 OUI:7C3CB6*
  ID_OUI_FROM_DATABASE=Shenzhen Homecare Technology Co.,Ltd.
 
+OUI:7C3D2B*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:7C3E9D*
  ID_OUI_FROM_DATABASE=PATECH
 
@@ -79298,6 +80591,9 @@ OUI:7C5259*
 OUI:7C534A*
  ID_OUI_FROM_DATABASE=Metamako
 
+OUI:7C55A7*
+ ID_OUI_FROM_DATABASE=Kastle Systems
+
 OUI:7C55E7*
  ID_OUI_FROM_DATABASE=YSI, Inc.
 
@@ -79553,6 +80849,9 @@ OUI:7C9A9B*
 OUI:7C9EBD*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:7C9F07*
+ ID_OUI_FROM_DATABASE=CIG SHANGHAI CO LTD
+
 OUI:7CA15D*
  ID_OUI_FROM_DATABASE=GN ReSound A/S
 
@@ -79637,6 +80936,9 @@ OUI:7CB733*
 OUI:7CB77B*
  ID_OUI_FROM_DATABASE=Paradigm Electronics Inc
 
+OUI:7CB94C*
+ ID_OUI_FROM_DATABASE=Bouffalo Lab (Nanjing) Co., Ltd.
+
 OUI:7CB960*
  ID_OUI_FROM_DATABASE=Shanghai X-Cheng telecom LTD
 
@@ -79874,6 +81176,9 @@ OUI:7CD95C*
 OUI:7CD9A0*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:7CD9F4*
+ ID_OUI_FROM_DATABASE=UAB Teltonika Telematics
+
 OUI:7CD9FE*
  ID_OUI_FROM_DATABASE=New Cosmos Electric Co., Ltd.
 
@@ -79970,9 +81275,15 @@ OUI:7CF31B*
 OUI:7CF429*
  ID_OUI_FROM_DATABASE=NUUO Inc.
 
+OUI:7CF666*
+ ID_OUI_FROM_DATABASE=Tuya Smart Inc.
+
 OUI:7CF854*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:7CF880*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:7CF90E*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -80036,6 +81347,9 @@ OUI:800588*
 OUI:8005DF*
  ID_OUI_FROM_DATABASE=Montage Technology Group Limited
 
+OUI:80071B*
+ ID_OUI_FROM_DATABASE=VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.
+
 OUI:8007A2*
  ID_OUI_FROM_DATABASE=Esson Technology Inc.
 
@@ -80150,6 +81464,9 @@ OUI:802278*
 OUI:8022A7*
  ID_OUI_FROM_DATABASE=NEC Platforms, Ltd.
 
+OUI:802511*
+ ID_OUI_FROM_DATABASE=ITEL MOBILE LIMITED
+
 OUI:802689*
  ID_OUI_FROM_DATABASE=D-Link International
 
@@ -80192,6 +81509,9 @@ OUI:8031F0*
 OUI:803253*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:803428*
+ ID_OUI_FROM_DATABASE=Microchip Technology Inc.
+
 OUI:803457*
  ID_OUI_FROM_DATABASE=OT Systems Limited
 
@@ -80252,9 +81572,18 @@ OUI:80414E*
 OUI:80427C*
  ID_OUI_FROM_DATABASE=Adolf Tedsen GmbH & Co. KG
 
+OUI:8044FD*
+ ID_OUI_FROM_DATABASE=China Mobile (Hangzhou) Information Technology Co., Ltd.
+
+OUI:8045DD*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:804731*
  ID_OUI_FROM_DATABASE=Packet Design, Inc.
 
+OUI:804786*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:8048A5*
  ID_OUI_FROM_DATABASE=SICHUAN TIANYI COMHEART TELECOMCO.,LTD
 
@@ -80381,6 +81710,9 @@ OUI:80717A*
 OUI:807215*
  ID_OUI_FROM_DATABASE=BSkyB Ltd
 
+OUI:807264*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:80739F*
  ID_OUI_FROM_DATABASE=KYOCERA CORPORATION
 
@@ -80507,6 +81839,9 @@ OUI:808917*
 OUI:808A8B*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:808AF7*
+ ID_OUI_FROM_DATABASE=Nanoleaf
+
 OUI:808B5C*
  ID_OUI_FROM_DATABASE=Shenzhen Runhuicheng Technology Co., Ltd
 
@@ -80852,6 +82187,9 @@ OUI:80F1F1*
 OUI:80F25E*
  ID_OUI_FROM_DATABASE=Kyynel
 
+OUI:80F3EF*
+ ID_OUI_FROM_DATABASE=Facebook Technologies, LLC
+
 OUI:80F503*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -80900,6 +82238,9 @@ OUI:840328*
 OUI:8404D2*
  ID_OUI_FROM_DATABASE=Kirale Technologies SL
 
+OUI:8406FA*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:840B2D*
  ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO MECHANICS CO., LTD.
 
@@ -81002,6 +82343,9 @@ OUI:841C70*
 OUI:841E26*
  ID_OUI_FROM_DATABASE=KERNEL-I Co.,LTD
 
+OUI:841EA3*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:842096*
  ID_OUI_FROM_DATABASE=SHENZHEN RF-LINK TECHNOLOGY CO.,LTD.
 
@@ -81014,6 +82358,9 @@ OUI:8421F1*
 OUI:84225E*
  ID_OUI_FROM_DATABASE=SHENZHEN TECHNEWCHIP TECHNOLOGY CO.,LTD.
 
+OUI:842388*
+ ID_OUI_FROM_DATABASE=Ruckus Wireless
+
 OUI:84248D*
  ID_OUI_FROM_DATABASE=Zebra Technologies Inc
 
@@ -81035,6 +82382,9 @@ OUI:842615*
 OUI:84262B*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:84267A*
+ ID_OUI_FROM_DATABASE=GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD
+
 OUI:842690*
  ID_OUI_FROM_DATABASE=BEIJING THOUGHT SCIENCE CO.,LTD.
 
@@ -81143,6 +82493,12 @@ OUI:8439BED*
 OUI:843A4B*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:843A5B*
+ ID_OUI_FROM_DATABASE=Inventec(Chongqing) Corporation
+
+OUI:843B10*
+ ID_OUI_FROM_DATABASE=Lv switch Inc.
+
 OUI:843DC6*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -81311,6 +82667,9 @@ OUI:847973*
 OUI:847A88*
  ID_OUI_FROM_DATABASE=HTC Corporation
 
+OUI:847AB6*
+ ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
+
 OUI:847BEB*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -81455,6 +82814,9 @@ OUI:848BCDD*
 OUI:848BCDE*
  ID_OUI_FROM_DATABASE=Emotiv Inc
 
+OUI:848C8D*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:848D84*
  ID_OUI_FROM_DATABASE=Rajant Corporation
 
@@ -81474,7 +82836,7 @@ OUI:848F69*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
 OUI:849000*
- ID_OUI_FROM_DATABASE=Arnold & Richter Cine Technik
+ ID_OUI_FROM_DATABASE=Arnold&Richter Cine Technik GmbH & Co. Betriebs KG
 
 OUI:84930C*
  ID_OUI_FROM_DATABASE=InCoax Networks Europe AB
@@ -81566,6 +82928,9 @@ OUI:84AA9C*
 OUI:84AB1A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:84AB26*
+ ID_OUI_FROM_DATABASE=Tiinlab Corporation
+
 OUI:84ACA4*
  ID_OUI_FROM_DATABASE=Beijing Novel Super Digital TV Technology Co., Ltd
 
@@ -81639,7 +83004,7 @@ OUI:84C727*
  ID_OUI_FROM_DATABASE=Gnodal Ltd
 
 OUI:84C78F*
- ID_OUI_FROM_DATABASE=STORDIS GmbH
+ ID_OUI_FROM_DATABASE=APS Networks GmbH
 
 OUI:84C7A9*
  ID_OUI_FROM_DATABASE=C3PO S.A.
@@ -81689,6 +83054,9 @@ OUI:84D47E*
 OUI:84D4C8*
  ID_OUI_FROM_DATABASE=Widex A/S
 
+OUI:84D608*
+ ID_OUI_FROM_DATABASE=Wingtech Mobile Communications Co., Ltd.
+
 OUI:84D6C5*
  ID_OUI_FROM_DATABASE=SolarEdge Technologies
 
@@ -81803,6 +83171,9 @@ OUI:84E714*
 OUI:84E892*
  ID_OUI_FROM_DATABASE=Actiontec Electronics, Inc
 
+OUI:84E986*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:84EA97*
  ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
 
@@ -81851,6 +83222,9 @@ OUI:84FCAC*
 OUI:84FCFE*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:84FD27*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:84FDD1*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -81968,6 +83342,9 @@ OUI:882950*
 OUI:88299C*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:882A5E*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:882B94*
  ID_OUI_FROM_DATABASE=MADOKA SYSTEM Co.,Ltd.
 
@@ -82061,6 +83438,9 @@ OUI:884477*
 OUI:8844F6*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:884604*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:88462A*
  ID_OUI_FROM_DATABASE=Telechips Inc.
 
@@ -82355,6 +83735,9 @@ OUI:888C19*
 OUI:888E68*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:889009*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:88908D*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -82592,6 +83975,9 @@ OUI:88C397*
 OUI:88C3B3*
  ID_OUI_FROM_DATABASE=SOVICO
 
+OUI:88C3E5*
+ ID_OUI_FROM_DATABASE=Betop Techonologies
+
 OUI:88C626*
  ID_OUI_FROM_DATABASE=Logitech, Inc
 
@@ -82679,6 +84065,9 @@ OUI:88DF9E*
 OUI:88E034*
  ID_OUI_FROM_DATABASE=Shinwa industries(China) ltd.
 
+OUI:88E056*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:88E0A0*
  ID_OUI_FROM_DATABASE=Shenzhen VisionSTOR Technologies Co., Ltd
 
@@ -82928,6 +84317,9 @@ OUI:8C192DD*
 OUI:8C192DE*
  ID_OUI_FROM_DATABASE=Elcon AB
 
+OUI:8C19B5*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:8C1ABF*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -82994,6 +84386,9 @@ OUI:8C278A*
 OUI:8C2937*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:8C2A8E*
+ ID_OUI_FROM_DATABASE=DongGuan Ramaxel Memory Technology
+
 OUI:8C2DAA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -83003,6 +84398,9 @@ OUI:8C2F39*
 OUI:8C2FA6*
  ID_OUI_FROM_DATABASE=Solid Optics B.V.
 
+OUI:8C31E2*
+ ID_OUI_FROM_DATABASE=DAYOUPLUS
+
 OUI:8C3330*
  ID_OUI_FROM_DATABASE=EmFirst Co., Ltd.
 
@@ -83012,12 +84410,18 @@ OUI:8C3357*
 OUI:8C3401*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:8C3446*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:8C34FD*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:8C3579*
  ID_OUI_FROM_DATABASE=QDIQO Sp. z o.o.
 
+OUI:8C367A*
+ ID_OUI_FROM_DATABASE=Palo Alto Networks
+
 OUI:8C395C*
  ID_OUI_FROM_DATABASE=Bit4id Srl
 
@@ -83048,6 +84452,9 @@ OUI:8C41F4*
 OUI:8C426D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:8C4361*
+ ID_OUI_FROM_DATABASE=Hailo Digital Hub GmbH & Co. KG
+
 OUI:8C4435*
  ID_OUI_FROM_DATABASE=Shanghai BroadMobi Communication Technology Co., Ltd.
 
@@ -83309,6 +84716,9 @@ OUI:8C71F8*
 OUI:8C736E*
  ID_OUI_FROM_DATABASE=FUJITSU LIMITED
 
+OUI:8C73A0*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:8C76C1*
  ID_OUI_FROM_DATABASE=Goden Tech Limited
 
@@ -83366,6 +84776,9 @@ OUI:8C83DF*
 OUI:8C83E1*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:8C83FC*
+ ID_OUI_FROM_DATABASE=Axioma Metering UAB
+
 OUI:8C8401*
  ID_OUI_FROM_DATABASE=Private
 
@@ -83477,6 +84890,9 @@ OUI:8CA982*
 OUI:8CAAB5*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:8CAACE*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:8CAB8E*
  ID_OUI_FROM_DATABASE=Shanghai Feixun Communication Co.,Ltd.
 
@@ -83681,6 +85097,9 @@ OUI:8CD628*
 OUI:8CD67F*
  ID_OUI_FROM_DATABASE=EM Microelectronic
 
+OUI:8CD9D6*
+ ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
+
 OUI:8CDB25*
  ID_OUI_FROM_DATABASE=ESG Solutions
 
@@ -83730,7 +85149,7 @@ OUI:8CE5EF*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:8CE748*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Hangzhou Hikvision Digital Technology Co.,Ltd.
 
 OUI:8CE78C*
  ID_OUI_FROM_DATABASE=DK Networks
@@ -83954,6 +85373,9 @@ OUI:902155*
 OUI:902181*
  ID_OUI_FROM_DATABASE=Shanghai Huaqin Telecom Technology Co.,Ltd
 
+OUI:9023B4*
+ ID_OUI_FROM_DATABASE=New H3C Technologies Co., Ltd
+
 OUI:9023EC*
  ID_OUI_FROM_DATABASE=Availink, Inc.
 
@@ -84425,6 +85847,9 @@ OUI:90A783*
 OUI:90A7C1*
  ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc.
 
+OUI:90A822*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:90A935*
  ID_OUI_FROM_DATABASE=JWEntertainment
 
@@ -84467,6 +85892,9 @@ OUI:90B21F*
 OUI:90B4DD*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:90B67A*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+
 OUI:90B686*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -84491,6 +85919,9 @@ OUI:90BDE6*
 OUI:90C115*
  ID_OUI_FROM_DATABASE=Sony Mobile Communications Inc
 
+OUI:90C119*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:90C1C6*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -84734,6 +86165,9 @@ OUI:90F72F*
 OUI:90F891*
  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
 
+OUI:90F9B7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:90FB5B*
  ID_OUI_FROM_DATABASE=Avaya Inc
 
@@ -84789,7 +86223,7 @@ OUI:9405BB2*
  ID_OUI_FROM_DATABASE=Dongguan CXWE Technology Co.,Ltd.
 
 OUI:9405BB3*
- ID_OUI_FROM_DATABASE=Neurik AG
+ ID_OUI_FROM_DATABASE=Neutrik AG
 
 OUI:9405BB4*
  ID_OUI_FROM_DATABASE=Shenzhen Baolijie Technology Co., Ltd.
@@ -84950,6 +86384,9 @@ OUI:9437F7*
 OUI:9439E5*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:943A91*
+ ID_OUI_FROM_DATABASE=Amazon Technologies Inc.
+
 OUI:943AF0*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -84959,6 +86396,9 @@ OUI:943BB0*
 OUI:943BB1*
  ID_OUI_FROM_DATABASE=Kaonmedia CO., LTD.
 
+OUI:943CC6*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:943DC9*
  ID_OUI_FROM_DATABASE=Asahi Net, Inc.
 
@@ -85232,6 +86672,9 @@ OUI:94A3CA*
 OUI:94A40C*
  ID_OUI_FROM_DATABASE=Diehl Metering GmbH
 
+OUI:94A4F9*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:94A67E*
  ID_OUI_FROM_DATABASE=NETGEAR
 
@@ -85499,6 +86942,9 @@ OUI:94E1AC*
 OUI:94E226*
  ID_OUI_FROM_DATABASE=D. ORtiz Consulting, LLC
 
+OUI:94E23C*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:94E2FD*
  ID_OUI_FROM_DATABASE=Boge Kompressoren OTTO Boge GmbH & Co. KG
 
@@ -85541,6 +86987,9 @@ OUI:94E98C*
 OUI:94E9EE*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:94EA32*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:94EAEA*
  ID_OUI_FROM_DATABASE=TELLESCOM INDUSTRIA E COMERCIO EM TELECOMUNICACAO
 
@@ -85829,6 +87278,9 @@ OUI:9816EC*
 OUI:981888*
  ID_OUI_FROM_DATABASE=Cisco Meraki
 
+OUI:981A35*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:981BB5*
  ID_OUI_FROM_DATABASE=ASSA ABLOY Korea Co., Ltd iRevo
 
@@ -85856,6 +87308,51 @@ OUI:98234E*
 OUI:98262A*
  ID_OUI_FROM_DATABASE=Applied Research Associates, Inc
 
+OUI:9827820*
+ ID_OUI_FROM_DATABASE=SHENZHEN HEROFUN BIO-TECH CO., LTD
+
+OUI:9827821*
+ ID_OUI_FROM_DATABASE=INFODAS GmbH
+
+OUI:9827822*
+ ID_OUI_FROM_DATABASE=Anhui Shengren Electronic Technology Co., Ltd
+
+OUI:9827823*
+ ID_OUI_FROM_DATABASE=Danfoss Power Solutions
+
+OUI:9827824*
+ ID_OUI_FROM_DATABASE=Dspread Technology (Beijing) Inc.
+
+OUI:9827825*
+ ID_OUI_FROM_DATABASE=Guangzhou Wuzhou Technology Co, Ltd.
+
+OUI:9827826*
+ ID_OUI_FROM_DATABASE=WESTERN SECURITY SOLUTIONS
+
+OUI:9827827*
+ ID_OUI_FROM_DATABASE=KORTEK CORPORATION
+
+OUI:9827828*
+ ID_OUI_FROM_DATABASE=CATS Power design
+
+OUI:9827829*
+ ID_OUI_FROM_DATABASE=Wuxi GuoYiHaiJu Technology Co.,Ltd.
+
+OUI:982782A*
+ ID_OUI_FROM_DATABASE=Nanjing BianYu Future Home Technology Co.Ltd
+
+OUI:982782B*
+ ID_OUI_FROM_DATABASE=RayTron, INC.
+
+OUI:982782C*
+ ID_OUI_FROM_DATABASE=KRISTECH Krzysztof Kajstura
+
+OUI:982782D*
+ ID_OUI_FROM_DATABASE=Thorlabs GmbH
+
+OUI:982782E*
+ ID_OUI_FROM_DATABASE=SureFlap Ltd
+
 OUI:9828A6*
  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
 
@@ -85910,6 +87407,9 @@ OUI:9835ED*
 OUI:983713*
  ID_OUI_FROM_DATABASE=PT.Navicom Indonesia
 
+OUI:98387D*
+ ID_OUI_FROM_DATABASE=ITRONIC  TECHNOLOGY CO . , LTD .
+
 OUI:98398E*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -85922,6 +87422,9 @@ OUI:983B8F*
 OUI:983F60*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:983F66*
+ ID_OUI_FROM_DATABASE=Wuhan Funshion Online Technologies Co.,Ltd
+
 OUI:983F9F*
  ID_OUI_FROM_DATABASE=China SSJ (Suzhou) Network Technology Inc.
 
@@ -85934,6 +87437,9 @@ OUI:98415C*
 OUI:984246*
  ID_OUI_FROM_DATABASE=SOL INDUSTRY PTE., LTD
 
+OUI:984265*
+ ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
+
 OUI:9843DA*
  ID_OUI_FROM_DATABASE=INTERTECH
 
@@ -85955,6 +87461,9 @@ OUI:98473C*
 OUI:984827*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:984874*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:984914*
  ID_OUI_FROM_DATABASE=Wistron Neweb Corporation
 
@@ -86111,6 +87620,9 @@ OUI:98743D*
 OUI:9874DA*
  ID_OUI_FROM_DATABASE=Infinix mobility limited
 
+OUI:98751A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:9876B6*
  ID_OUI_FROM_DATABASE=Adafruit
 
@@ -86282,6 +87794,9 @@ OUI:98AAFCD*
 OUI:98AAFCE*
  ID_OUI_FROM_DATABASE=Comarch S.A.
 
+OUI:98AD1D*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:98AE71*
  ID_OUI_FROM_DATABASE=VVDN Technologies Pvt Ltd
 
@@ -86330,6 +87845,9 @@ OUI:98BEDC*
 OUI:98C0EB*
  ID_OUI_FROM_DATABASE=Global Regency Ltd
 
+OUI:98C3D2*
+ ID_OUI_FROM_DATABASE=Ningbo Sanxing Medical Electric Co.,Ltd
+
 OUI:98C5DB*
  ID_OUI_FROM_DATABASE=Ericsson AB
 
@@ -86357,6 +87875,9 @@ OUI:98CBA4*
 OUI:98CC4D*
  ID_OUI_FROM_DATABASE=Shenzhen mantunsci co., LTD
 
+OUI:98CDAC*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:98CDB4*
  ID_OUI_FROM_DATABASE=Virident Systems, Inc.
 
@@ -86672,6 +88193,9 @@ OUI:9C19C2*
 OUI:9C1C12*
  ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
 
+OUI:9C1C37*
+ ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
+
 OUI:9C1D36*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -86861,6 +88385,9 @@ OUI:9C4E8E*
 OUI:9C4EBF*
  ID_OUI_FROM_DATABASE=BoxCast
 
+OUI:9C4F5F*
+ ID_OUI_FROM_DATABASE=TAP Sound System
+
 OUI:9C4FCF*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
@@ -87041,6 +88568,12 @@ OUI:9C746F*
 OUI:9C7514*
  ID_OUI_FROM_DATABASE=Wildix srl
 
+OUI:9C760E*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
+OUI:9C7613*
+ ID_OUI_FROM_DATABASE=Ring LLC
+
 OUI:9C77AA*
  ID_OUI_FROM_DATABASE=NADASNV
 
@@ -87062,6 +88595,9 @@ OUI:9C7DA3*
 OUI:9C7F57*
  ID_OUI_FROM_DATABASE=UNIC Memory Technology Co Ltd
 
+OUI:9C7F81*
+ ID_OUI_FROM_DATABASE=SHENZHEN FAST TECHNOLOGIES CO.,LTD
+
 OUI:9C807D*
  ID_OUI_FROM_DATABASE=SYSCABLE Korea Inc.
 
@@ -87074,6 +88610,9 @@ OUI:9C823F*
 OUI:9C8275*
  ID_OUI_FROM_DATABASE=Yichip Microelectronics (Hangzhou) Co.,Ltd
 
+OUI:9C8281*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:9C83BF*
  ID_OUI_FROM_DATABASE=PRO-VISION, Inc.
 
@@ -87134,6 +88673,9 @@ OUI:9C93B0*
 OUI:9C93E4*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:9C9567*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:9C95F8*
  ID_OUI_FROM_DATABASE=SmartDoor Systems, LLC
 
@@ -87335,6 +88877,9 @@ OUI:9CDA3E*
 OUI:9CDB07*
  ID_OUI_FROM_DATABASE=Thum+Mahr GmbH
 
+OUI:9CDBCB*
+ ID_OUI_FROM_DATABASE=Wuhan Funshion Online Technologies Co.,Ltd
+
 OUI:9CDC71*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
@@ -87803,6 +89348,9 @@ OUI:A03299*
 OUI:A0341B*
  ID_OUI_FROM_DATABASE=Adero Inc
 
+OUI:A03679*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A0369F*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -87929,6 +89477,9 @@ OUI:A047D7*
 OUI:A0481C*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:A04A5E*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
 OUI:A04C5B*
  ID_OUI_FROM_DATABASE=Shenzhen TINNO Mobile Technology Corp.
 
@@ -88046,6 +89597,9 @@ OUI:A06FAA*
 OUI:A07099*
  ID_OUI_FROM_DATABASE=Beijing Huacan Electronics Co., Ltd
 
+OUI:A070B7*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A071A9*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -88445,6 +89999,9 @@ OUI:A0D635*
 OUI:A0D795*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:A0D7A0*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:A0D807*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -88586,6 +90143,9 @@ OUI:A402B9*
 OUI:A40450*
  ID_OUI_FROM_DATABASE=nFore Technology Inc.
 
+OUI:A4056E*
+ ID_OUI_FROM_DATABASE=Tiinlab Corporation
+
 OUI:A4059E*
  ID_OUI_FROM_DATABASE=STA Infinity LLP
 
@@ -88712,6 +90272,9 @@ OUI:A41875*
 OUI:A41908*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:A41B34*
+ ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
+
 OUI:A41BC0*
  ID_OUI_FROM_DATABASE=Fastec Imaging Corporation
 
@@ -88790,6 +90353,9 @@ OUI:A434F1*
 OUI:A43523*
  ID_OUI_FROM_DATABASE=Guangdong Donyan Network Technologies Co.,Ltd.
 
+OUI:A4352D*
+ ID_OUI_FROM_DATABASE=TRIZ Networks corp.
+
 OUI:A43831*
  ID_OUI_FROM_DATABASE=RF elements s.r.o.
 
@@ -88799,6 +90365,9 @@ OUI:A438CC*
 OUI:A438FC*
  ID_OUI_FROM_DATABASE=Plastic Logic
 
+OUI:A439B6*
+ ID_OUI_FROM_DATABASE=SHENZHEN PEIZHE MICROELECTRONICS CO .LTD
+
 OUI:A43A69*
  ID_OUI_FROM_DATABASE=Vers Inc
 
@@ -88898,6 +90467,9 @@ OUI:A44BD5*
 OUI:A44C11*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:A44C62*
+ ID_OUI_FROM_DATABASE=Hangzhou Microimage Software Co., Ltd
+
 OUI:A44CC8*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -88998,7 +90570,7 @@ OUI:A453EE5*
  ID_OUI_FROM_DATABASE=Foshan Yisihang Electrical Technology Co., Ltd.
 
 OUI:A453EE6*
- ID_OUI_FROM_DATABASE=Aura Home, Inc.
+ ID_OUI_FROM_DATABASE=Shenzhen Xunqi Interconnet Technology Co., Ltd
 
 OUI:A453EE7*
  ID_OUI_FROM_DATABASE=Beijing Lanke Science and Technology Co.,LTd.
@@ -89030,6 +90602,9 @@ OUI:A45630*
 OUI:A456CC*
  ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
 
+OUI:A45802*
+ ID_OUI_FROM_DATABASE=SHIN-IL TECH
+
 OUI:A4580F0*
  ID_OUI_FROM_DATABASE=INNOPRO
 
@@ -89162,6 +90737,9 @@ OUI:A47AA4*
 OUI:A47ACF*
  ID_OUI_FROM_DATABASE=VIBICOM COMMUNICATIONS INC.
 
+OUI:A47B1A*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:A47B2C*
  ID_OUI_FROM_DATABASE=Nokia
 
@@ -89183,6 +90761,9 @@ OUI:A47CC9*
 OUI:A47D9F*
  ID_OUI_FROM_DATABASE=Shenzhen iComm Semiconductor CO.,LTD
 
+OUI:A47E36*
+ ID_OUI_FROM_DATABASE=EM Microelectronic
+
 OUI:A47E39*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -89276,6 +90857,9 @@ OUI:A49B13*
 OUI:A49B4F*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:A49BCD*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:A49BF5*
  ID_OUI_FROM_DATABASE=Hybridserver Tec GmbH
 
@@ -89303,6 +90887,9 @@ OUI:A4A1E4*
 OUI:A4A24A*
  ID_OUI_FROM_DATABASE=Cisco SPVTG
 
+OUI:A4A46B*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A4A4D3*
  ID_OUI_FROM_DATABASE=Bluebank Communication Technology Co.Ltd
 
@@ -89447,6 +91034,9 @@ OUI:A4CCB9*
 OUI:A4CD23*
  ID_OUI_FROM_DATABASE=Shenzhenshi Xinzhongxin  Co., Ltd
 
+OUI:A4CEDA*
+ ID_OUI_FROM_DATABASE=Arcadyan Corporation
+
 OUI:A4CF12*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
@@ -89477,6 +91067,9 @@ OUI:A4D4B2*
 OUI:A4D578*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:A4D795*
+ ID_OUI_FROM_DATABASE=Wingtech Mobile Communications Co.,Ltd
+
 OUI:A4D856*
  ID_OUI_FROM_DATABASE=Gimbal, Inc
 
@@ -89543,6 +91136,9 @@ OUI:A4DA32*
 OUI:A4DA3F*
  ID_OUI_FROM_DATABASE=Bionics Corp.
 
+OUI:A4DAD4*
+ ID_OUI_FROM_DATABASE=Yamato Denki Co.,Ltd.
+
 OUI:A4DB2E*
  ID_OUI_FROM_DATABASE=Kingspan Environmental Ltd
 
@@ -89903,6 +91499,9 @@ OUI:A84122*
 OUI:A842A7*
  ID_OUI_FROM_DATABASE=Jiangsu Huitong Group Co.,Ltd.
 
+OUI:A84397*
+ ID_OUI_FROM_DATABASE=Innogrit Corporation
+
 OUI:A84481*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -89930,6 +91529,9 @@ OUI:A84D4A*
 OUI:A84E3F*
  ID_OUI_FROM_DATABASE=Hitron Technologies. Inc
 
+OUI:A85081*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:A8515B*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -89984,6 +91586,9 @@ OUI:A861AA*
 OUI:A862A2*
  ID_OUI_FROM_DATABASE=JIWUMEDIA CO., LTD.
 
+OUI:A8637D*
+ ID_OUI_FROM_DATABASE=D-Link International
+
 OUI:A863DF*
  ID_OUI_FROM_DATABASE=DISPLAIRE CORPORATION
 
@@ -90050,6 +91655,9 @@ OUI:A875E2*
 OUI:A8776F*
  ID_OUI_FROM_DATABASE=Zonoff
 
+OUI:A877E5*
+ ID_OUI_FROM_DATABASE=SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD
+
 OUI:A87B39*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -90122,6 +91730,9 @@ OUI:A8913D*
 OUI:A8922C*
  ID_OUI_FROM_DATABASE=LG Electronics (Mobile Communications)
 
+OUI:A8934A*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
 OUI:A89352*
  ID_OUI_FROM_DATABASE=SHANGHAI ZHONGMI COMMUNICATION TECHNOLOGY CO.,LTD
 
@@ -90356,6 +91967,9 @@ OUI:A8E705*
 OUI:A8E77D*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
+OUI:A8E81E*
+ ID_OUI_FROM_DATABASE=ATW TECHNOLOGY, INC.
+
 OUI:A8E824*
  ID_OUI_FROM_DATABASE=INIM ELECTRONICS S.R.L.
 
@@ -90371,6 +91985,9 @@ OUI:A8EF26*
 OUI:A8F038*
  ID_OUI_FROM_DATABASE=SHEN ZHEN SHI JIN HUA TAI ELECTRONICS CO.,LTD
 
+OUI:A8F266*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:A8F274*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -90467,6 +92084,9 @@ OUI:AC1203*
 OUI:AC122F*
  ID_OUI_FROM_DATABASE=Fantasia Trading LLC
 
+OUI:AC139C*
+ ID_OUI_FROM_DATABASE=Adtran Inc
+
 OUI:AC1461*
  ID_OUI_FROM_DATABASE=ATAW  Co., Ltd.
 
@@ -90551,6 +92171,9 @@ OUI:AC1ED0*
 OUI:AC1F09*
  ID_OUI_FROM_DATABASE=shenzhen RAKwireless technology  Co.,Ltd
 
+OUI:AC1F0F*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:AC1F6B*
  ID_OUI_FROM_DATABASE=Super Micro Computer, Inc.
 
@@ -90575,6 +92198,9 @@ OUI:AC2205*
 OUI:AC220B*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:AC2316*
+ ID_OUI_FROM_DATABASE=Mist Systems, Inc.
+
 OUI:AC2334*
  ID_OUI_FROM_DATABASE=Infinix mobility limited
 
@@ -90743,6 +92369,9 @@ OUI:AC5A14*
 OUI:AC5AEE*
  ID_OUI_FROM_DATABASE=China Mobile Group Device Co.,Ltd.
 
+OUI:AC5AFC*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:AC5D10*
  ID_OUI_FROM_DATABASE=Pace Americas
 
@@ -90884,6 +92513,9 @@ OUI:AC7289*
 OUI:AC7409*
  ID_OUI_FROM_DATABASE=Hangzhou H3C Technologies Co., Limited
 
+OUI:AC74C4*
+ ID_OUI_FROM_DATABASE=Maytronics Ltd.
+
 OUI:AC751D*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -90989,6 +92621,9 @@ OUI:AC9403*
 OUI:AC9572*
  ID_OUI_FROM_DATABASE=Jovision Technology Co., Ltd.
 
+OUI:AC9929*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:AC9A22*
  ID_OUI_FROM_DATABASE=NXP Semiconductors
 
@@ -91169,6 +92804,9 @@ OUI:ACD364*
 OUI:ACD564*
  ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
 
+OUI:ACD618*
+ ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
+
 OUI:ACD657*
  ID_OUI_FROM_DATABASE=Shaanxi GuoLian Digital TV Technology Co.,Ltd.
 
@@ -91421,6 +93059,12 @@ OUI:B01F81E*
 OUI:B01F81F*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:B0227A*
+ ID_OUI_FROM_DATABASE=HP Inc.
+
+OUI:B02491*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:B024F3*
  ID_OUI_FROM_DATABASE=Progeny Systems
 
@@ -91472,9 +93116,15 @@ OUI:B03850*
 OUI:B03956*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:B03ACE*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:B03D96*
  ID_OUI_FROM_DATABASE=Vision Valley FZ LLC
 
+OUI:B03DC2*
+ ID_OUI_FROM_DATABASE=Wasp artificial intelligence(Shenzhen) Co.,ltd
+
 OUI:B03E51*
  ID_OUI_FROM_DATABASE=BSkyB Ltd
 
@@ -91538,6 +93188,9 @@ OUI:B04C05*
 OUI:B04E26*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:B04F13*
+ ID_OUI_FROM_DATABASE=Dell Inc.
+
 OUI:B04FC3*
  ID_OUI_FROM_DATABASE=Shenzhen NVC Cloud Technology Co., Ltd.
 
@@ -91580,6 +93233,9 @@ OUI:B05CDA*
 OUI:B05CE5*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:B05DD4*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:B06088*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -92018,6 +93674,9 @@ OUI:B0C83F*
 OUI:B0C8AD*
  ID_OUI_FROM_DATABASE=People Power Company
 
+OUI:B0C952*
+ ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
+
 OUI:B0C95B*
  ID_OUI_FROM_DATABASE=Beijing Symtech CO.,LTD
 
@@ -92270,9 +93929,15 @@ OUI:B40F3B*
 OUI:B40FB3*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:B4107B*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:B41489*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:B414E6*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:B41513*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -92558,6 +94223,9 @@ OUI:B45D50*
 OUI:B46077*
  ID_OUI_FROM_DATABASE=Sichuan Changhong Electric Ltd.
 
+OUI:B4608C*
+ ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
+
 OUI:B460ED*
  ID_OUI_FROM_DATABASE=Beijing Xiaomi Mobile Software Co., Ltd
 
@@ -92669,9 +94337,15 @@ OUI:B485E1*
 OUI:B48655*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:B48901*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:B48910*
  ID_OUI_FROM_DATABASE=Coster T.E. S.P.A.
 
+OUI:B48A5F*
+ ID_OUI_FROM_DATABASE=Juniper Networks
+
 OUI:B48B19*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -92714,6 +94388,9 @@ OUI:B49EAC*
 OUI:B49EE6*
  ID_OUI_FROM_DATABASE=SHENZHEN TECHNOLOGY CO LTD
 
+OUI:B4A25C*
+ ID_OUI_FROM_DATABASE=Cambium Networks Limited
+
 OUI:B4A2EB0*
  ID_OUI_FROM_DATABASE=QKM Technology(Dongguan)Co.,Ltd
 
@@ -92990,6 +94667,9 @@ OUI:B4E1C4*
 OUI:B4E1EB*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:B4E3F9*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:B4E62A*
  ID_OUI_FROM_DATABASE=LG Innotek
 
@@ -93074,6 +94754,9 @@ OUI:B4F81E*
 OUI:B4F949*
  ID_OUI_FROM_DATABASE=optilink networks pvt ltd
 
+OUI:B4FA48*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B4FBE3*
  ID_OUI_FROM_DATABASE=AltoBeam (China) Inc.
 
@@ -93137,6 +94820,9 @@ OUI:B813E9*
 OUI:B81413*
  ID_OUI_FROM_DATABASE=Keen High Holding(HK) Ltd.
 
+OUI:B814DB*
+ ID_OUI_FROM_DATABASE=OHSUNG
+
 OUI:B81619*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -93200,6 +94886,9 @@ OUI:B829F7*
 OUI:B82A72*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
+OUI:B82AA9*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B82ADC*
  ID_OUI_FROM_DATABASE=EFR Europäische Funk-Rundsteuerung GmbH
 
@@ -93260,6 +94949,9 @@ OUI:B841A4*
 OUI:B843E4*
  ID_OUI_FROM_DATABASE=Vlatacom
 
+OUI:B844AE*
+ ID_OUI_FROM_DATABASE=TCT mobile ltd
+
 OUI:B844D9*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -93419,6 +95111,9 @@ OUI:B8804F*
 OUI:B88198*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:B881FA*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:B88303*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
@@ -93539,6 +95234,9 @@ OUI:B89F09*
 OUI:B8A175*
  ID_OUI_FROM_DATABASE=Roku, Inc.
 
+OUI:B8A377*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:B8A386*
  ID_OUI_FROM_DATABASE=D-Link International
 
@@ -93701,6 +95399,9 @@ OUI:B8D06F*
 OUI:B8D309*
  ID_OUI_FROM_DATABASE=Cox Communications, Inc
 
+OUI:B8D43E*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:B8D49D*
  ID_OUI_FROM_DATABASE=M Seven System Ltd.
 
@@ -93713,6 +95414,9 @@ OUI:B8D50B*
 OUI:B8D526*
  ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
 
+OUI:B8D6F6*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:B8D7AF*
  ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
 
@@ -94736,6 +96440,9 @@ OUI:BCEC5D*
 OUI:BCEE7B*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
+OUI:BCF171*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:BCF1F2*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -94766,6 +96473,9 @@ OUI:BCF811*
 OUI:BCF9F2*
  ID_OUI_FROM_DATABASE=TEKO
 
+OUI:BCFAB8*
+ ID_OUI_FROM_DATABASE=Guangzhou Shiyuan Electronic Technology Company Limited
+
 OUI:BCFE8C*
  ID_OUI_FROM_DATABASE=Altronic, LLC
 
@@ -94775,6 +96485,9 @@ OUI:BCFED9*
 OUI:BCFF21*
  ID_OUI_FROM_DATABASE=Smart Code(shenzhen)Technology Co.,Ltd
 
+OUI:BCFF4D*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:BCFFAC*
  ID_OUI_FROM_DATABASE=TOPCON CORPORATION
 
@@ -94790,6 +96503,9 @@ OUI:C00380*
 OUI:C005C2*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
+OUI:C006C3*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:C0074A*
  ID_OUI_FROM_DATABASE=Brita GmbH
 
@@ -94985,6 +96701,9 @@ OUI:C04301*
 OUI:C044E3*
  ID_OUI_FROM_DATABASE=Shenzhen Sinkna Electronics Co., LTD
 
+OUI:C04754*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:C048E6*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -95000,6 +96719,9 @@ OUI:C04A00*
 OUI:C04A09*
  ID_OUI_FROM_DATABASE=Zhejiang Everbright Communication Equip. Co,. Ltd
 
+OUI:C04B13*
+ ID_OUI_FROM_DATABASE=WonderSound Technology Co., Ltd
+
 OUI:C04DF7*
  ID_OUI_FROM_DATABASE=SERELEC
 
@@ -95237,6 +96959,9 @@ OUI:C09132*
 OUI:C09134*
  ID_OUI_FROM_DATABASE=ProCurve Networking by HP
 
+OUI:C09296*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:C09435*
  ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
 
@@ -95378,6 +97103,9 @@ OUI:C0AA68*
 OUI:C0AC54*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:C0AEFD*
+ ID_OUI_FROM_DATABASE=Shenzhen HC-WLAN Technology Co.,Ltd
+
 OUI:C0B101*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -95549,6 +97277,9 @@ OUI:C0D391E*
 OUI:C0D3C0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:C0D46B*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C0D682*
  ID_OUI_FROM_DATABASE=Arista Networks
 
@@ -95567,6 +97298,9 @@ OUI:C0DA74*
 OUI:C0DC6A*
  ID_OUI_FROM_DATABASE=Qingdao Eastsoft Communication Technology Co.,LTD
 
+OUI:C0DCD7*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C0DCDA*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -95576,6 +97310,9 @@ OUI:C0DF77*
 OUI:C0E018*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:C0E1BE*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:C0E3A0*
  ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
 
@@ -95966,6 +97703,9 @@ OUI:C45976*
 OUI:C45A86*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:C45BBE*
+ ID_OUI_FROM_DATABASE=Espressif Inc.
+
 OUI:C45BF7*
  ID_OUI_FROM_DATABASE=ants
 
@@ -96041,6 +97781,9 @@ OUI:C46E7B*
 OUI:C4700B*
  ID_OUI_FROM_DATABASE=GUANGZHOU CHIP TECHNOLOGIES CO.,LTD
 
+OUI:C470AB*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
 OUI:C47130*
  ID_OUI_FROM_DATABASE=Fon Technology S.L.
 
@@ -96176,6 +97919,9 @@ OUI:C4910C*
 OUI:C4913A*
  ID_OUI_FROM_DATABASE=Shenzhen Sanland Electronic Co., ltd.
 
+OUI:C491CF*
+ ID_OUI_FROM_DATABASE=Luxul
+
 OUI:C4924C*
  ID_OUI_FROM_DATABASE=KEISOKUKI CENTER CO.,LTD.
 
@@ -96338,6 +98084,9 @@ OUI:C4BB4C*
 OUI:C4BBEA*
  ID_OUI_FROM_DATABASE=Pakedge Device and Software Inc
 
+OUI:C4BCD7*
+ ID_OUI_FROM_DATABASE=New Ryatek
+
 OUI:C4BD6A*
  ID_OUI_FROM_DATABASE=SKF GmbH
 
@@ -96389,6 +98138,9 @@ OUI:C4CD45*
 OUI:C4CD82*
  ID_OUI_FROM_DATABASE=Hangzhou Lowan Information Technology Co., Ltd.
 
+OUI:C4D0E3*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:C4D197*
  ID_OUI_FROM_DATABASE=Ventia Utility Services
 
@@ -96482,6 +98234,9 @@ OUI:C4F081*
 OUI:C4F0EC*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
+OUI:C4F174*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:C4F1D1*
  ID_OUI_FROM_DATABASE=BEIJING SOGOU TECHNOLOGY DEVELOPMENT CO., LTD.
 
@@ -96620,6 +98375,9 @@ OUI:C80E95*
 OUI:C81073*
  ID_OUI_FROM_DATABASE=CENTURY OPTICOMM CO.,LTD
 
+OUI:C8138B*
+ ID_OUI_FROM_DATABASE=Shenzhen Skyworth  Digital  Technology  CO., Ltd
+
 OUI:C81451*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -96749,6 +98507,9 @@ OUI:C83232*
 OUI:C8334B*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:C833E5*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:C8348E*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -96818,6 +98579,9 @@ OUI:C848F5*
 OUI:C84C75*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:C84D34*
+ ID_OUI_FROM_DATABASE=LIONS Taiwan Technology Inc.
+
 OUI:C84F0E*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
@@ -96968,6 +98732,9 @@ OUI:C87765*
 OUI:C8778B*
  ID_OUI_FROM_DATABASE=Mercury Systems â€“ Trusted Mission Solutions, Inc.
 
+OUI:C87B23*
+ ID_OUI_FROM_DATABASE=Bose Corporation
+
 OUI:C87B5B*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -97082,6 +98849,9 @@ OUI:C89346*
 OUI:C89383*
  ID_OUI_FROM_DATABASE=Embedded Automation, Inc.
 
+OUI:C89402*
+ ID_OUI_FROM_DATABASE=CHONGQING FUGUI ELECTRONICS CO.,LTD.
+
 OUI:C894BB*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -97091,6 +98861,9 @@ OUI:C894D2*
 OUI:C8979F*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
+OUI:C89BAD*
+ ID_OUI_FROM_DATABASE=Honor Device Co., Ltd.
+
 OUI:C89C13*
  ID_OUI_FROM_DATABASE=Inspiremobile
 
@@ -97190,6 +98963,9 @@ OUI:C8BA94*
 OUI:C8BAE9*
  ID_OUI_FROM_DATABASE=QDIS
 
+OUI:C8BB81*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C8BBD3*
  ID_OUI_FROM_DATABASE=Embrane
 
@@ -97205,6 +98981,9 @@ OUI:C8BCE5*
 OUI:C8BE19*
  ID_OUI_FROM_DATABASE=D-Link International
 
+OUI:C8BFFE*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:C8C126*
  ID_OUI_FROM_DATABASE=ZPM Industria e Comercio Ltda
 
@@ -97295,6 +99074,9 @@ OUI:C8D779*
 OUI:C8D7B0*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:C8D884*
+ ID_OUI_FROM_DATABASE=Universal Electronics, Inc.
+
 OUI:C8D9D2*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
@@ -97613,6 +99395,9 @@ OUI:CC2237D*
 OUI:CC2237E*
  ID_OUI_FROM_DATABASE=MANUFACTURAS Y TRANSFORMADOS AB, S.L.
 
+OUI:CC242E*
+ ID_OUI_FROM_DATABASE=Shenzhen SuperElectron Technology Co.,Ltd.
+
 OUI:CC25EF*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -97652,9 +99437,15 @@ OUI:CC2F71*
 OUI:CC3080*
  ID_OUI_FROM_DATABASE=VAIO Corporation
 
+OUI:CC3296*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:CC32E5*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:CC3331*
+ ID_OUI_FROM_DATABASE=Texas Instruments
+
 OUI:CC33BB*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -97868,6 +99659,9 @@ OUI:CC660A*
 OUI:CC66B2*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:CC68B6*
+ ID_OUI_FROM_DATABASE=TP-Link Corporation Limited
+
 OUI:CC69B0*
  ID_OUI_FROM_DATABASE=Global Traffic Technologies, LLC
 
@@ -97877,6 +99671,9 @@ OUI:CC69FA*
 OUI:CC6A10*
  ID_OUI_FROM_DATABASE=The Chamberlain Group, Inc
 
+OUI:CC6B1E*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:CC6B98*
  ID_OUI_FROM_DATABASE=Minetec Wireless Technologies
 
@@ -97946,6 +99743,9 @@ OUI:CC7F75*
 OUI:CC7F76*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:CC812A*
+ ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
+
 OUI:CC81DA*
  ID_OUI_FROM_DATABASE=Phicomm (Shanghai) Co., Ltd.
 
@@ -97955,12 +99755,21 @@ OUI:CC82EB*
 OUI:CC856C*
  ID_OUI_FROM_DATABASE=SHENZHEN MDK DIGITAL TECHNOLOGY CO.,LTD
 
+OUI:CC86EC*
+ ID_OUI_FROM_DATABASE=Silicon Laboratories
+
 OUI:CC874A*
  ID_OUI_FROM_DATABASE=Nokia
 
 OUI:CC8826*
  ID_OUI_FROM_DATABASE=LG Innotek
 
+OUI:CC88C7*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
+OUI:CC895E*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:CC89FD*
  ID_OUI_FROM_DATABASE=Nokia Corporation
 
@@ -98012,6 +99821,9 @@ OUI:CC9891*
 OUI:CC9916*
  ID_OUI_FROM_DATABASE=Integrated Device Technology (Malaysia) Sdn. Bhd.
 
+OUI:CC9C3E*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:CC9E00*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
@@ -98342,6 +100154,9 @@ OUI:CCD9AC*
 OUI:CCD9E9*
  ID_OUI_FROM_DATABASE=SCR Engineers Ltd.
 
+OUI:CCDB04*
+ ID_OUI_FROM_DATABASE=DataRemote Inc.
+
 OUI:CCDB93*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -98375,6 +100190,9 @@ OUI:CCE8AC*
 OUI:CCEA1C*
  ID_OUI_FROM_DATABASE=DCONWORKS  Co., Ltd
 
+OUI:CCED21*
+ ID_OUI_FROM_DATABASE=Nokia Shanghai Bell Co., Ltd.
+
 OUI:CCEDDC*
  ID_OUI_FROM_DATABASE=MitraStar Technology Corp.
 
@@ -98993,6 +100811,9 @@ OUI:D07AB5*
 OUI:D07C2D*
  ID_OUI_FROM_DATABASE=Leie IOT technology Co., Ltd
 
+OUI:D07D33*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:D07DE5*
  ID_OUI_FROM_DATABASE=Forward Pay Systems, Inc.
 
@@ -99059,6 +100880,9 @@ OUI:D095C7*
 OUI:D096FB*
  ID_OUI_FROM_DATABASE=DASAN Network Solutions
 
+OUI:D097FE*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:D099D5*
  ID_OUI_FROM_DATABASE=Alcatel-Lucent
 
@@ -99242,6 +101066,9 @@ OUI:D0CDE1*
 OUI:D0CF5E*
  ID_OUI_FROM_DATABASE=Energy Micro AS
 
+OUI:D0CFD8*
+ ID_OUI_FROM_DATABASE=Huizhou Boshijie Technology Co.,Ltd
+
 OUI:D0D003*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,LTD
 
@@ -99341,6 +101168,9 @@ OUI:D0DFB2*
 OUI:D0DFC7*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:D0E042*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:D0E140*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
@@ -99647,6 +101477,9 @@ OUI:D44649*
 OUI:D446E1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:D4475A*
+ ID_OUI_FROM_DATABASE=ScreenBeam, Inc.
+
 OUI:D4482D*
  ID_OUI_FROM_DATABASE=Shenzhen Deejoy Lighting Technology Co.,Ltd.
 
@@ -99842,6 +101675,9 @@ OUI:D476EA*
 OUI:D4772B*
  ID_OUI_FROM_DATABASE=Nanjing Ztlink Network Technology Co.,Ltd
 
+OUI:D47798*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:D477B2*
  ID_OUI_FROM_DATABASE=Netix Global B.V.
 
@@ -100577,6 +102413,9 @@ OUI:D857EF*
 OUI:D858D7*
  ID_OUI_FROM_DATABASE=CZ.NIC, z.s.p.o.
 
+OUI:D85982*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:D85B2A*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -100595,6 +102434,9 @@ OUI:D85DEF*
 OUI:D85DFB*
  ID_OUI_FROM_DATABASE=Private
 
+OUI:D85ED3*
+ ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
+
 OUI:D85F77*
  ID_OUI_FROM_DATABASE=Telink Semiconductor (Shanghai) Co., Ltd.
 
@@ -100814,6 +102656,9 @@ OUI:D897BA*
 OUI:D89A34*
  ID_OUI_FROM_DATABASE=Beijing SHENQI Technology Co., Ltd.
 
+OUI:D89AC1*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:D89B3B*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -100850,6 +102695,9 @@ OUI:D8A25E*
 OUI:D8A315*
  ID_OUI_FROM_DATABASE=vivo Mobile Communication Co., Ltd.
 
+OUI:D8A35C*
+ ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
+
 OUI:D8A491*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
@@ -100922,6 +102770,9 @@ OUI:D8B90E*
 OUI:D8BB2C*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:D8BBC1*
+ ID_OUI_FROM_DATABASE=Micro-Star INTL CO., LTD.
+
 OUI:D8BC59*
  ID_OUI_FROM_DATABASE=Shenzhen DAPU Microelectronics Co., Ltd
 
@@ -100982,6 +102833,9 @@ OUI:D8CB8A*
 OUI:D8CC98*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:D8CD2C*
+ ID_OUI_FROM_DATABASE=WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD
+
 OUI:D8CE3A*
  ID_OUI_FROM_DATABASE=Xiaomi Communications Co Ltd
 
@@ -101067,7 +102921,7 @@ OUI:D8E56D*
  ID_OUI_FROM_DATABASE=TCT mobile ltd
 
 OUI:D8E72B*
- ID_OUI_FROM_DATABASE=NetAlly
+ ID_OUI_FROM_DATABASE=NETSCOUT SYSTEMS INC
 
 OUI:D8E743*
  ID_OUI_FROM_DATABASE=Wush, Inc
@@ -101075,9 +102929,18 @@ OUI:D8E743*
 OUI:D8E952*
  ID_OUI_FROM_DATABASE=KEOPSYS
 
+OUI:D8EB46*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:D8EB97*
  ID_OUI_FROM_DATABASE=TRENDnet, Inc.
 
+OUI:D8EC5E*
+ ID_OUI_FROM_DATABASE=Belkin International Inc.
+
+OUI:D8ECE5*
+ ID_OUI_FROM_DATABASE=Zyxel Communications Corporation
+
 OUI:D8ED1C*
  ID_OUI_FROM_DATABASE=Magna Technology SL
 
@@ -101192,6 +103055,9 @@ OUI:DC0D30*
 OUI:DC0EA1*
  ID_OUI_FROM_DATABASE=COMPAL INFORMATION (KUNSHAN) CO., LTD.
 
+OUI:DC15C8*
+ ID_OUI_FROM_DATABASE=AVM Audiovisuelles Marketing und Computersysteme GmbH
+
 OUI:DC15DB*
  ID_OUI_FROM_DATABASE=Ge Ruili Intelligent Technology ( Beijing ) Co., Ltd.
 
@@ -101267,6 +103133,9 @@ OUI:DC2BCA*
 OUI:DC2C26*
  ID_OUI_FROM_DATABASE=Iton Technology Limited
 
+OUI:DC2D3C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:DC2DCB*
  ID_OUI_FROM_DATABASE=Beijing Unis HengYue Technology Co., Ltd.
 
@@ -101597,6 +103466,9 @@ OUI:DC85DE*
 OUI:DC86D8*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:DC87CB*
+ ID_OUI_FROM_DATABASE=Beijing Perfectek Technologies Co., Ltd.
+
 OUI:DC8983*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -101711,6 +103583,9 @@ OUI:DCB058*
 OUI:DCB082*
  ID_OUI_FROM_DATABASE=Nokia
 
+OUI:DCB131*
+ ID_OUI_FROM_DATABASE=SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD
+
 OUI:DCB3B4*
  ID_OUI_FROM_DATABASE=Honeywell Environmental & Combustion Controls (Tianjin) Co., Ltd.
 
@@ -101901,7 +103776,7 @@ OUI:DCE5339*
  ID_OUI_FROM_DATABASE=Tiertime Corporation
 
 OUI:DCE533A*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Amazinglayer Network Co., Ltd.
 
 OUI:DCE533B*
  ID_OUI_FROM_DATABASE=Tintel Hongkong Co.Ltd
@@ -102026,6 +103901,9 @@ OUI:E00B28*
 OUI:E00C7F*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
+OUI:E00CE5*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E00DB9*
  ID_OUI_FROM_DATABASE=Cree, Inc.
 
@@ -102455,6 +104333,9 @@ OUI:E09153*
 OUI:E091F5*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:E0925C*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:E092A7*
  ID_OUI_FROM_DATABASE=Feitian Technologies Co., Ltd
 
@@ -102746,6 +104627,9 @@ OUI:E0D9A2*
 OUI:E0D9E3*
  ID_OUI_FROM_DATABASE=Eltex Enterprise Ltd.
 
+OUI:E0DA90*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E0DADC*
  ID_OUI_FROM_DATABASE=JVC KENWOOD Corporation
 
@@ -102758,6 +104642,9 @@ OUI:E0DB55*
 OUI:E0DB88*
  ID_OUI_FROM_DATABASE=Open Standard Digital-IF Interface for SATCOM Systems
 
+OUI:E0DBD1*
+ ID_OUI_FROM_DATABASE=Technicolor CH USA Inc.
+
 OUI:E0DCA0*
  ID_OUI_FROM_DATABASE=Siemens Industrial Automation Products Ltd Chengdu
 
@@ -102779,6 +104666,9 @@ OUI:E0E1A9*
 OUI:E0E2E6*
  ID_OUI_FROM_DATABASE=Espressif Inc.
 
+OUI:E0E37C*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:E0E5CF*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -102788,12 +104678,18 @@ OUI:E0E62E*
 OUI:E0E631*
  ID_OUI_FROM_DATABASE=SNB TECHNOLOGIES LIMITED
 
+OUI:E0E656*
+ ID_OUI_FROM_DATABASE=Nethesis  srl
+
 OUI:E0E751*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
 OUI:E0E7BB*
  ID_OUI_FROM_DATABASE=Nureva, Inc.
 
+OUI:E0E8BB*
+ ID_OUI_FROM_DATABASE=Unicom Vsens Telecommunications Co., Ltd.
+
 OUI:E0E8E6*
  ID_OUI_FROM_DATABASE=Shenzhen C-Data Technology Co., Ltd.
 
@@ -102855,7 +104751,7 @@ OUI:E40439*
  ID_OUI_FROM_DATABASE=TomTom Software Ltd
 
 OUI:E405F8*
- ID_OUI_FROM_DATABASE=Delta Innovation Technology Co., Ltd.
+ ID_OUI_FROM_DATABASE=Bytedance
 
 OUI:E40EEE*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
@@ -102974,6 +104870,9 @@ OUI:E42761*
 OUI:E42771*
  ID_OUI_FROM_DATABASE=Smartlabs
 
+OUI:E428A4*
+ ID_OUI_FROM_DATABASE=Prama India Private Limited
+
 OUI:E42AD3*
  ID_OUI_FROM_DATABASE=Magneti Marelli S.p.A. Powertrain
 
@@ -103055,6 +104954,9 @@ OUI:E440E2*
 OUI:E44122*
  ID_OUI_FROM_DATABASE=OnePlus Technology (Shenzhen) Co., Ltd
 
+OUI:E44164*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:E441E6*
  ID_OUI_FROM_DATABASE=Ottec Technology GmbH
 
@@ -103133,6 +105035,9 @@ OUI:E44CC7E*
 OUI:E44E18*
  ID_OUI_FROM_DATABASE=Gardasoft VisionLimited
 
+OUI:E44E2D*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:E44E76*
  ID_OUI_FROM_DATABASE=CHAMPIONTECH  ENTERPRISE (SHENZHEN) INC
 
@@ -103151,6 +105056,9 @@ OUI:E450EB*
 OUI:E454E8*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
+OUI:E455A8*
+ ID_OUI_FROM_DATABASE=Cisco Meraki
+
 OUI:E455EA*
  ID_OUI_FROM_DATABASE=Dedicated Computing
 
@@ -103244,6 +105152,9 @@ OUI:E47684*
 OUI:E47723*
  ID_OUI_FROM_DATABASE=zte corporation
 
+OUI:E47727*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E4776B*
  ID_OUI_FROM_DATABASE=AARTESYS AG
 
@@ -103529,6 +105440,9 @@ OUI:E4C801*
 OUI:E4C806*
  ID_OUI_FROM_DATABASE=Ceiec Electric Technology Inc.
 
+OUI:E4C90B*
+ ID_OUI_FROM_DATABASE=Radwin
+
 OUI:E4CA12*
  ID_OUI_FROM_DATABASE=zte corporation
 
@@ -103640,6 +105554,9 @@ OUI:E4F3F5*
 OUI:E4F4C6*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:E4F75B*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:E4F7A1*
  ID_OUI_FROM_DATABASE=Datafox GmbH
 
@@ -103670,6 +105587,9 @@ OUI:E4FB8F*
 OUI:E4FC82*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:E4FD45*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:E4FDA1*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -103826,6 +105746,9 @@ OUI:E81B69*
 OUI:E81CBA*
  ID_OUI_FROM_DATABASE=Fortinet, Inc.
 
+OUI:E81CD8*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:E81DA8*
  ID_OUI_FROM_DATABASE=Ruckus Wireless
 
@@ -103931,6 +105854,9 @@ OUI:E84943*
 OUI:E84C56*
  ID_OUI_FROM_DATABASE=INTERCEPT SERVICES LIMITED
 
+OUI:E84D74*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E84DD0*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -103943,6 +105869,9 @@ OUI:E84E84*
 OUI:E84ECE*
  ID_OUI_FROM_DATABASE=Nintendo Co., Ltd.
 
+OUI:E84F25*
+ ID_OUI_FROM_DATABASE=Murata Manufacturing Co., Ltd.
+
 OUI:E84F4B*
  ID_OUI_FROM_DATABASE=Shenzhen Delos Electronic Co., Ltd
 
@@ -104024,6 +105953,51 @@ OUI:E868E7*
 OUI:E86A64*
  ID_OUI_FROM_DATABASE=LCFC(HeFei) Electronics Technology co., ltd
 
+OUI:E86CC70*
+ ID_OUI_FROM_DATABASE=Trapeze Switzerland GmbH
+
+OUI:E86CC71*
+ ID_OUI_FROM_DATABASE=ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd
+
+OUI:E86CC72*
+ ID_OUI_FROM_DATABASE=Xirgo Technologies LLC
+
+OUI:E86CC73*
+ ID_OUI_FROM_DATABASE=Shenzhen Yibaifen Industrial Co.,Ltd.
+
+OUI:E86CC74*
+ ID_OUI_FROM_DATABASE=Koal Software Co., Ltd
+
+OUI:E86CC75*
+ ID_OUI_FROM_DATABASE=Shenzhen Rongda Computer Co.,Ltd
+
+OUI:E86CC76*
+ ID_OUI_FROM_DATABASE=KLAB
+
+OUI:E86CC77*
+ ID_OUI_FROM_DATABASE=Huaqin Technology Co.,Ltd
+
+OUI:E86CC78*
+ ID_OUI_FROM_DATABASE=Lighthouse EIP
+
+OUI:E86CC79*
+ ID_OUI_FROM_DATABASE=Hangzhou Lanxum Security Technology Co., Ltd
+
+OUI:E86CC7A*
+ ID_OUI_FROM_DATABASE=CoxSpace
+
+OUI:E86CC7B*
+ ID_OUI_FROM_DATABASE=MORNSUN Guangzhou Science & Technology Co., Ltd.
+
+OUI:E86CC7C*
+ ID_OUI_FROM_DATABASE=Limited Liability Company M.S.Korp
+
+OUI:E86CC7D*
+ ID_OUI_FROM_DATABASE=z-max mediasolution
+
+OUI:E86CC7E*
+ ID_OUI_FROM_DATABASE=Annapurna labs
+
 OUI:E86CDA*
  ID_OUI_FROM_DATABASE=Supercomputers and Neurocomputers Research Center
 
@@ -104163,11 +106137,14 @@ OUI:E89D87*
  ID_OUI_FROM_DATABASE=Toshiba
 
 OUI:E89E0C*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=MAX8USA DISTRIBUTORS INC.
 
 OUI:E89EB4*
  ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co.,Ltd.
 
+OUI:E89F39*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:E89F80*
  ID_OUI_FROM_DATABASE=Belkin International Inc.
 
@@ -104189,6 +106166,9 @@ OUI:E8A364*
 OUI:E8A4C1*
  ID_OUI_FROM_DATABASE=Deep Sea Electronics Ltd
 
+OUI:E8A660*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E8A788*
  ID_OUI_FROM_DATABASE=XIAMEN LEELEN TECHNOLOGY CO., LTD
 
@@ -104432,6 +106412,9 @@ OUI:E8E8B7*
 OUI:E8E98E*
  ID_OUI_FROM_DATABASE=SOLAR controls s.r.o.
 
+OUI:E8EA4D*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E8EA6A*
  ID_OUI_FROM_DATABASE=StarTech.com
 
@@ -104474,6 +106457,9 @@ OUI:E8F2E3*
 OUI:E8F408*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
+OUI:E8F654*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:E8F724*
  ID_OUI_FROM_DATABASE=Hewlett Packard Enterprise
 
@@ -104492,6 +106478,9 @@ OUI:E8FC60*
 OUI:E8FCAF*
  ID_OUI_FROM_DATABASE=NETGEAR
 
+OUI:E8FD35*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:E8FD72*
  ID_OUI_FROM_DATABASE=SHANGHAI LINGUO TECHNOLOGY CO., LTD.
 
@@ -104510,12 +106499,18 @@ OUI:EC01E2*
 OUI:EC01EE*
  ID_OUI_FROM_DATABASE=GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD
 
+OUI:EC0273*
+ ID_OUI_FROM_DATABASE=Aruba, a Hewlett Packard Enterprise Company
+
 OUI:EC0441*
  ID_OUI_FROM_DATABASE=ShenZhen TIGO Semiconductor Co., Ltd.
 
 OUI:EC086B*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
+OUI:EC0BAE*
+ ID_OUI_FROM_DATABASE=Hangzhou BroadLink Technology Co.,Ltd
+
 OUI:EC0D9A*
  ID_OUI_FROM_DATABASE=Mellanox Technologies, Inc.
 
@@ -104546,6 +106541,9 @@ OUI:EC13DB*
 OUI:EC14F6*
  ID_OUI_FROM_DATABASE=BioControl AS
 
+OUI:EC153D*
+ ID_OUI_FROM_DATABASE=Beijing Yaxunhongda Technology Co., Ltd.
+
 OUI:EC172F*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -104612,6 +106610,9 @@ OUI:EC2CE2*
 OUI:EC2E4E*
  ID_OUI_FROM_DATABASE=HITACHI-LG DATA STORAGE INC
 
+OUI:EC2E98*
+ ID_OUI_FROM_DATABASE=AzureWave Technology Inc.
+
 OUI:EC3091*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -104747,6 +106748,9 @@ OUI:EC60E0*
 OUI:EC6264*
  ID_OUI_FROM_DATABASE=Global411 Internet Services, LLC
 
+OUI:EC63D7*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:EC63E5*
  ID_OUI_FROM_DATABASE=ePBoard Design LLC
 
@@ -105008,6 +107012,9 @@ OUI:ECB1D7*
 OUI:ECB313*
  ID_OUI_FROM_DATABASE=SHENZHEN GONGJIN ELECTRONICS CO.,LT
 
+OUI:ECB4E8*
+ ID_OUI_FROM_DATABASE=Wistron Mexico SA de CV
+
 OUI:ECB541*
  ID_OUI_FROM_DATABASE=SHINANO E and E Co.Ltd.
 
@@ -105020,6 +107027,9 @@ OUI:ECB870*
 OUI:ECB907*
  ID_OUI_FROM_DATABASE=CloudGenix Inc
 
+OUI:ECB970*
+ ID_OUI_FROM_DATABASE=Ruijie Networks Co.,LTD
+
 OUI:ECBAFE*
  ID_OUI_FROM_DATABASE=GIROPTIC
 
@@ -105056,6 +107066,9 @@ OUI:ECC40D*
 OUI:ECC57F*
  ID_OUI_FROM_DATABASE=Suzhou Pairlink Network Technology
 
+OUI:ECC5D2*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:ECC882*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -105203,6 +107216,9 @@ OUI:ECFE7E*
 OUI:F0007F*
  ID_OUI_FROM_DATABASE=Janz - Contadores de Energia, SA
 
+OUI:F0016E*
+ ID_OUI_FROM_DATABASE=Tianyi Telecom Terminals Company Limited
+
 OUI:F0022B*
  ID_OUI_FROM_DATABASE=Chrontel
 
@@ -105287,6 +107303,9 @@ OUI:F01FAF*
 OUI:F0219D*
  ID_OUI_FROM_DATABASE=Cal-Comp Electronics & Communications Company Ltd.
 
+OUI:F021E0*
+ ID_OUI_FROM_DATABASE=eero inc.
+
 OUI:F0224E*
  ID_OUI_FROM_DATABASE=Esan electronic co.
 
@@ -105336,7 +107355,7 @@ OUI:F023B9C*
  ID_OUI_FROM_DATABASE=Shenzhen Lachesis Mhealth Co., Ltd.
 
 OUI:F023B9D*
- ID_OUI_FROM_DATABASE=Private
+ ID_OUI_FROM_DATABASE=Shenyang Ali Technology Company Limited
 
 OUI:F023B9E*
  ID_OUI_FROM_DATABASE=Domotz Ltd
@@ -105386,6 +107405,9 @@ OUI:F02A61*
 OUI:F02E51*
  ID_OUI_FROM_DATABASE=Casa Systems
 
+OUI:F02F4B*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F02F74*
  ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
 
@@ -105503,6 +107525,9 @@ OUI:F045DA*
 OUI:F0463B*
  ID_OUI_FROM_DATABASE=Comcast Cable Corporation
 
+OUI:F04A02*
+ ID_OUI_FROM_DATABASE=Cisco Systems, Inc
+
 OUI:F04A2B*
  ID_OUI_FROM_DATABASE=PYRAMID Computer GmbH
 
@@ -105569,6 +107594,9 @@ OUI:F06130*
 OUI:F0620D*
  ID_OUI_FROM_DATABASE=Shenzhen Egreat Tech Corp.,Ltd
 
+OUI:F0625A*
+ ID_OUI_FROM_DATABASE=Realme Chongqing Mobile Telecommunications Corp.,Ltd.
+
 OUI:F06281*
  ID_OUI_FROM_DATABASE=ProCurve Networking by HP
 
@@ -105632,6 +107660,9 @@ OUI:F0766F*
 OUI:F07765*
  ID_OUI_FROM_DATABASE=Sourcefire, Inc
 
+OUI:F077C3*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:F077D0*
  ID_OUI_FROM_DATABASE=Xcellen
 
@@ -105752,6 +107783,9 @@ OUI:F09CD7*
 OUI:F09CE9*
  ID_OUI_FROM_DATABASE=Extreme Networks, Inc.
 
+OUI:F09E4A*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:F09E63*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -105767,6 +107801,9 @@ OUI:F0A225*
 OUI:F0A35A*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F0A3B2*
+ ID_OUI_FROM_DATABASE=Hui Zhou Gaoshengda Technology Co.,LTD
+
 OUI:F0A764*
  ID_OUI_FROM_DATABASE=GST Co., Ltd.
 
@@ -105857,6 +107894,9 @@ OUI:F0B0E7*
 OUI:F0B107*
  ID_OUI_FROM_DATABASE=Ericsson AB
 
+OUI:F0B11D*
+ ID_OUI_FROM_DATABASE=Nokia
+
 OUI:F0B2E5*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -105932,6 +107972,9 @@ OUI:F0C9D1*
 OUI:F0CBA1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F0D08C*
+ ID_OUI_FROM_DATABASE=TCT mobile ltd
+
 OUI:F0D14F*
  ID_OUI_FROM_DATABASE=LINEAR LLC
 
@@ -106151,6 +108194,12 @@ OUI:F0FE6B*
 OUI:F0FEE7*
  ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
 
+OUI:F40223*
+ ID_OUI_FROM_DATABASE=PAX Computer Technology(Shenzhen) Ltd.
+
+OUI:F40228*
+ ID_OUI_FROM_DATABASE=SAMSUNG ELECTRO-MECHANICS(THAILAND)
+
 OUI:F40270*
  ID_OUI_FROM_DATABASE=Dell Inc.
 
@@ -106373,6 +108422,9 @@ OUI:F43E9D*
 OUI:F44156*
  ID_OUI_FROM_DATABASE=Arrikto Inc.
 
+OUI:F4419E*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:F44227*
  ID_OUI_FROM_DATABASE=S & S Research Inc.
 
@@ -106382,6 +108434,9 @@ OUI:F4428F*
 OUI:F44450*
  ID_OUI_FROM_DATABASE=BND Co., Ltd.
 
+OUI:F44588*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F445ED*
  ID_OUI_FROM_DATABASE=Portable Innovation Technology Ltd.
 
@@ -106418,6 +108473,9 @@ OUI:F44D30*
 OUI:F44E05*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:F44EE3*
+ ID_OUI_FROM_DATABASE=Intel Corporate
+
 OUI:F44EFD*
  ID_OUI_FROM_DATABASE=Actions Semiconductor Co.,Ltd.(Cayman Islands)
 
@@ -106544,6 +108602,12 @@ OUI:F46A92*
 OUI:F46ABC*
  ID_OUI_FROM_DATABASE=Adonit Corp. Ltd.
 
+OUI:F46AD7*
+ ID_OUI_FROM_DATABASE=Microsoft Corporation
+
+OUI:F46B8C*
+ ID_OUI_FROM_DATABASE=Hon Hai Precision Ind. Co., Ltd.
+
 OUI:F46BEF*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
@@ -106748,6 +108812,9 @@ OUI:F4A59D*
 OUI:F4A739*
  ID_OUI_FROM_DATABASE=Juniper Networks
 
+OUI:F4A80D*
+ ID_OUI_FROM_DATABASE=Wistron InfoComm(Kunshan)Co.,Ltd.
+
 OUI:F4A997*
  ID_OUI_FROM_DATABASE=CANON INC.
 
@@ -106760,6 +108827,9 @@ OUI:F4AFE7*
 OUI:F4B164*
  ID_OUI_FROM_DATABASE=Lightning Telecommunications Technology Co. Ltd
 
+OUI:F4B1C2*
+ ID_OUI_FROM_DATABASE=Zhejiang Dahua Technology Co., Ltd.
+
 OUI:F4B301*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -106817,6 +108887,9 @@ OUI:F4BD7C*
 OUI:F4BD9E*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
+OUI:F4BEEC*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:F4BF80*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
@@ -106845,7 +108918,10 @@ OUI:F4C714*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
 OUI:F4C795*
- ID_OUI_FROM_DATABASE=WEY Elektronik AG
+ ID_OUI_FROM_DATABASE=WEY Technology AG
+
+OUI:F4C7AA*
+ ID_OUI_FROM_DATABASE=Marvell Semiconductors
 
 OUI:F4C7C8*
  ID_OUI_FROM_DATABASE=Kelvin Inc.
@@ -107021,6 +109097,9 @@ OUI:F4F646*
 OUI:F4F951*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F4FBB8*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F4FC32*
  ID_OUI_FROM_DATABASE=Texas Instruments
 
@@ -107159,6 +109238,9 @@ OUI:F81654*
 OUI:F81897*
  ID_OUI_FROM_DATABASE=2Wire Inc
 
+OUI:F81A2B*
+ ID_OUI_FROM_DATABASE=Google, Inc.
+
 OUI:F81A67*
  ID_OUI_FROM_DATABASE=TP-LINK TECHNOLOGIES CO.,LTD.
 
@@ -107339,6 +109421,9 @@ OUI:F83D4E*
 OUI:F83DFF*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:F83E95*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F83F51*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -107351,6 +109436,9 @@ OUI:F844E3*
 OUI:F845AD*
  ID_OUI_FROM_DATABASE=Konka Group Co., Ltd.
 
+OUI:F845C4*
+ ID_OUI_FROM_DATABASE=Shenzhen Netforward Micro-Electronic Co., Ltd.
+
 OUI:F8461C*
  ID_OUI_FROM_DATABASE=Sony Interactive Entertainment Inc.
 
@@ -107375,6 +109463,9 @@ OUI:F84A7F*
 OUI:F84ABF*
  ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
 
+OUI:F84CDA*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:F84D33*
  ID_OUI_FROM_DATABASE=Fiberhome Telecommunication Technologies Co.,LTD
 
@@ -107537,6 +109628,9 @@ OUI:F8769B*
 OUI:F877B8*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:F8790A*
+ ID_OUI_FROM_DATABASE=ARRIS Group, Inc.
+
 OUI:F87A41*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -107570,12 +109664,18 @@ OUI:F88479*
 OUI:F884F2*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
+OUI:F885F9*
+ ID_OUI_FROM_DATABASE=Calix Inc.
+
 OUI:F887F1*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
 OUI:F8893C*
  ID_OUI_FROM_DATABASE=Inventec Appliances Corp.
 
+OUI:F889D2*
+ ID_OUI_FROM_DATABASE=CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.
+
 OUI:F88A3C0*
  ID_OUI_FROM_DATABASE=ART SPA
 
@@ -107669,6 +109769,9 @@ OUI:F895C7*
 OUI:F895EA*
  ID_OUI_FROM_DATABASE=Apple, Inc.
 
+OUI:F89753*
+ ID_OUI_FROM_DATABASE=Huawei Device Co., Ltd.
+
 OUI:F897CF*
  ID_OUI_FROM_DATABASE=DAESHIN-INFORMATION TECHNOLOGY CO., LTD.
 
@@ -107744,12 +109847,18 @@ OUI:F8A9D0*
 OUI:F8A9DE*
  ID_OUI_FROM_DATABASE=PUISSANCE PLUS
 
+OUI:F8AA3F*
+ ID_OUI_FROM_DATABASE=DWnet Technologies(Suzhou) Corporation
+
 OUI:F8AA8A*
  ID_OUI_FROM_DATABASE=Axview Technology (Shenzhen) Co.,Ltd
 
 OUI:F8AB05*
  ID_OUI_FROM_DATABASE=Sagemcom Broadband SAS
 
+OUI:F8ABE5*
+ ID_OUI_FROM_DATABASE=shenzhen worldelite electronics co., LTD
+
 OUI:F8AC65*
  ID_OUI_FROM_DATABASE=Intel Corporate
 
@@ -108128,6 +110237,9 @@ OUI:FC1186*
 OUI:FC1349*
  ID_OUI_FROM_DATABASE=Global Apps Corp.
 
+OUI:FC13F0*
+ ID_OUI_FROM_DATABASE=Bouffalo Lab (Nanjing) Co., Ltd.
+
 OUI:FC1499*
  ID_OUI_FROM_DATABASE=Aimore Acoustics Incorporation
 
@@ -108236,6 +110348,9 @@ OUI:FC3342*
 OUI:FC335F*
  ID_OUI_FROM_DATABASE=Polyera
 
+OUI:FC3497*
+ ID_OUI_FROM_DATABASE=ASUSTek COMPUTER INC.
+
 OUI:FC3598*
  ID_OUI_FROM_DATABASE=Favite Inc.
 
@@ -108266,6 +110381,9 @@ OUI:FC3FAB*
 OUI:FC3FDB*
  ID_OUI_FROM_DATABASE=Hewlett Packard
 
+OUI:FC4009*
+ ID_OUI_FROM_DATABASE=zte corporation
+
 OUI:FC4203*
  ID_OUI_FROM_DATABASE=Samsung Electronics Co.,Ltd
 
@@ -108311,9 +110429,15 @@ OUI:FC4BBC*
 OUI:FC4D8C*
  ID_OUI_FROM_DATABASE=SHENZHEN PANTE ELECTRONICS TECHNOLOGY CO., LTD
 
+OUI:FC4DA6*
+ ID_OUI_FROM_DATABASE=HUAWEI TECHNOLOGIES CO.,LTD
+
 OUI:FC4DD4*
  ID_OUI_FROM_DATABASE=Universal Global Scientific Industrial Co., Ltd.
 
+OUI:FC4EA4*
+ ID_OUI_FROM_DATABASE=Apple, Inc.
+
 OUI:FC5090*
  ID_OUI_FROM_DATABASE=SIMEX Sp. z o.o.
 
@@ -108332,6 +110456,9 @@ OUI:FC539E*
 OUI:FC55DC*
  ID_OUI_FROM_DATABASE=Baltic Latvian Universal Electronics LLC
 
+OUI:FC584A*
+ ID_OUI_FROM_DATABASE=xiamenshi c-chip technology co., ltd
+
 OUI:FC589A*
  ID_OUI_FROM_DATABASE=Cisco Systems, Inc
 
@@ -108518,6 +110645,9 @@ OUI:FC9AFA*
 OUI:FC9BC6*
  ID_OUI_FROM_DATABASE=Sumavision Technologies Co.,Ltd
 
+OUI:FC9C98*
+ ID_OUI_FROM_DATABASE=Arlo Technology
+
 OUI:FC9DD8*
  ID_OUI_FROM_DATABASE=Beijing TongTongYiLian Science and Technology Ltd.
 
@@ -108605,6 +110735,9 @@ OUI:FCA89A*
 OUI:FCA9B0*
  ID_OUI_FROM_DATABASE=MIARTECH (SHANGHAI),INC.
 
+OUI:FCA9DC*
+ ID_OUI_FROM_DATABASE=Renesas Electronics (Penang) Sdn. Bhd.
+
 OUI:FCAA14*
  ID_OUI_FROM_DATABASE=GIGA-BYTE TECHNOLOGY CO.,LTD.
 
@@ -108860,6 +110993,9 @@ OUI:FCE557*
 OUI:FCE66A*
  ID_OUI_FROM_DATABASE=Industrial Software Co
 
+OUI:FCE806*
+ ID_OUI_FROM_DATABASE=Edifier International
+
 OUI:FCE892*
  ID_OUI_FROM_DATABASE=Hangzhou Lancable Technology Co.,Ltd
 
index ac8710870ea66bc3565043967212f959bd51059c..776030da0bcf30d48db20181c03d442fe48be80d 100644 (file)
@@ -6732,6 +6732,9 @@ acpi:TGS*:
 acpi:TGV*:
  ID_VENDOR_FROM_DATABASE=Grass Valley Germany GmbH
 
+acpi:TGW*:
+ ID_VENDOR_FROM_DATABASE=TECHNOGYM S.p.A.
+
 acpi:THN*:
  ID_VENDOR_FROM_DATABASE=Thundercom Holdings Sdn. Bhd.
 
index cdfe663c2667fdc49f7b97a70150bb83fc185389..bc5e3b7a60322de1abefc6a4a3242badcabab170 100644 (file)
@@ -1,5 +1,5 @@
---- 20-acpi-vendor.hwdb.base   2020-11-26 13:49:35.243482590 +0100
-+++ 20-acpi-vendor.hwdb        2020-11-26 13:49:35.260482675 +0100
+--- 20-acpi-vendor.hwdb.base   2021-02-12 15:42:10.664053745 +0100
++++ 20-acpi-vendor.hwdb        2021-02-12 15:42:10.706054210 +0100
 @@ -3,6 +3,8 @@
  # Data imported from:
  #     https://uefi.org/uefi-pnp-export
  acpi:TEZ*:
   ID_VENDOR_FROM_DATABASE=Tech Source Inc.
  
-@@ -6760,9 +6828,6 @@
+@@ -6763,9 +6831,6 @@
  acpi:TNC*:
   ID_VENDOR_FROM_DATABASE=TNC Industrial Company Ltd
  
  acpi:TNM*:
   ID_VENDOR_FROM_DATABASE=TECNIMAGEN SA
  
-@@ -7069,14 +7134,14 @@
+@@ -7072,14 +7137,14 @@
  acpi:UNC*:
   ID_VENDOR_FROM_DATABASE=Unisys Corporation
  
  
  acpi:UNI*:
   ID_VENDOR_FROM_DATABASE=Uniform Industry Corp.
-@@ -7111,6 +7176,9 @@
+@@ -7114,6 +7179,9 @@
  acpi:USA*:
   ID_VENDOR_FROM_DATABASE=Utimaco Safeware AG
  
  acpi:USD*:
   ID_VENDOR_FROM_DATABASE=U.S. Digital Corporation
  
-@@ -7357,9 +7425,6 @@
+@@ -7360,9 +7428,6 @@
  acpi:WAL*:
   ID_VENDOR_FROM_DATABASE=Wave Access
  
  acpi:WAV*:
   ID_VENDOR_FROM_DATABASE=Wavephore
  
-@@ -7484,7 +7549,7 @@
+@@ -7487,7 +7552,7 @@
   ID_VENDOR_FROM_DATABASE=WyreStorm Technologies LLC
  
  acpi:WYS*:
  
  acpi:WYT*:
   ID_VENDOR_FROM_DATABASE=Wooyoung Image & Information Co.,Ltd.
-@@ -7498,9 +7563,6 @@
+@@ -7501,9 +7566,6 @@
  acpi:XDM*:
   ID_VENDOR_FROM_DATABASE=XDM Ltd.
  
  acpi:XES*:
   ID_VENDOR_FROM_DATABASE=Extreme Engineering Solutions, Inc.
  
-@@ -7531,9 +7593,6 @@
+@@ -7534,9 +7596,6 @@
  acpi:XNT*:
   ID_VENDOR_FROM_DATABASE=XN Technologies, Inc.
  
  acpi:XQU*:
   ID_VENDOR_FROM_DATABASE=SHANGHAI SVA-DAV ELECTRONICS CO., LTD
  
-@@ -7600,6 +7659,9 @@
+@@ -7603,6 +7662,9 @@
  acpi:ZBX*:
   ID_VENDOR_FROM_DATABASE=Zebax Technologies
  
index 21defccc8bfdbd73e4222c84022d73269124f344..1c8715f89b32a77c385eda9e74ed89ecf30ba020 100644 (file)
@@ -1998,7 +1998,10 @@ pci:v00001000d000000AFsv00001D49sd00000204*
  ID_MODEL_FROM_DATABASE=SAS3408 Fusion-MPT Tri-Mode I/O Controller Chip (IOC) (ThinkSystem 430-8i SAS/SATA 12Gb Dense HBA)
 
 pci:v00001000d000000B2*
- ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch SES management endpoint
+ ID_MODEL_FROM_DATABASE=PCIe Switch management endpoint
+
+pci:v00001000d000000B2sv00001D49sd00000003*
+ ID_MODEL_FROM_DATABASE=PCIe Switch management endpoint (ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter)
 
 pci:v00001000d000000BE*
  ID_MODEL_FROM_DATABASE=SAS3504 Fusion-MPT Tri-Mode RAID On Chip (ROC)
@@ -2549,6 +2552,12 @@ pci:v00001000d00003050*
 pci:v00001000d00006001*
  ID_MODEL_FROM_DATABASE=DX1 Multiformat Broadcast HD/SD Encoder/Decoder
 
+pci:v00001000d0000C012*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch
+
+pci:v00001000d0000C012sv00001D49sd00000003*
+ ID_MODEL_FROM_DATABASE=PEX880xx PCIe Gen 4 Switch (ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter)
+
 pci:v00001001*
  ID_VENDOR_FROM_DATABASE=Kolter Electronic
 
@@ -2675,6 +2684,9 @@ pci:v00001002d00001479*
 pci:v00001002d0000154C*
  ID_MODEL_FROM_DATABASE=Kryptos [Radeon RX 350]
 
+pci:v00001002d0000154Csv00001462sd00007C28*
+ ID_MODEL_FROM_DATABASE=Kryptos [Radeon RX 350] (MS-7C28 Motherboard)
+
 pci:v00001002d0000154E*
  ID_MODEL_FROM_DATABASE=Garfield
 
@@ -2696,30 +2708,48 @@ pci:v00001002d000015D8sv0000103Csd00008615*
 pci:v00001002d000015D8sv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Picasso (ThinkPad E595)
 
+pci:v00001002d000015D8sv0000EA50sd0000CC10*
+ ID_MODEL_FROM_DATABASE=Picasso (RXi2-BP)
+
 pci:v00001002d000015DD*
  ID_MODEL_FROM_DATABASE=Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
 
 pci:v00001002d000015DDsv0000103Csd000083C6*
  ID_MODEL_FROM_DATABASE=Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] (Radeon Vega 8 Mobile)
 
+pci:v00001002d000015DDsv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] (PRIME Motherboard)
+
 pci:v00001002d000015DDsv00001458sd0000D000*
  ID_MODEL_FROM_DATABASE=Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] (Radeon RX Vega 11)
 
+pci:v00001002d000015DDsv0000EA50sd0000CC10*
+ ID_MODEL_FROM_DATABASE=Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series] (RXi2-BP)
+
 pci:v00001002d000015DE*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang HDMI/DP Audio Controller
 
 pci:v00001002d000015DEsv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang HDMI/DP Audio Controller (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001002d000015DEsv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang HDMI/DP Audio Controller (PRIME B450M-A Motherboard)
+
 pci:v00001002d000015DEsv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang HDMI/DP Audio Controller (ThinkPad E595)
 
+pci:v00001002d000015DEsv0000EA50sd0000CC10*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang HDMI/DP Audio Controller (RXi2-BP)
+
 pci:v00001002d000015DF*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor
 
 pci:v00001002d000015DFsv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001002d000015DFsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor (mCOM10-L1900)
+
 pci:v00001002d000015FF*
  ID_MODEL_FROM_DATABASE=Fenghuang [Zhongshan Subor Z+]
 
@@ -2729,6 +2759,15 @@ pci:v00001002d00001607*
 pci:v00001002d00001636*
  ID_MODEL_FROM_DATABASE=Renoir
 
+pci:v00001002d00001638*
+ ID_MODEL_FROM_DATABASE=Cezanne
+
+pci:v00001002d0000163F*
+ ID_MODEL_FROM_DATABASE=VanGogh
+
+pci:v00001002d0000164C*
+ ID_MODEL_FROM_DATABASE=Lucienne
+
 pci:v00001002d00001714*
  ID_MODEL_FROM_DATABASE=BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
 
@@ -3275,6 +3314,9 @@ pci:v00001002d00004383sv00001458sd0000A022*
 pci:v00001002d00004383sv00001458sd0000A102*
  ID_MODEL_FROM_DATABASE=SBx00 Azalia (Intel HDA) (GA-880GMA-USB3)
 
+pci:v00001002d00004383sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SBx00 Azalia (Intel HDA) (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004383sv000017F2sd00005000*
  ID_MODEL_FROM_DATABASE=SBx00 Azalia (Intel HDA) (KI690-AM2 Motherboard)
 
@@ -3311,6 +3353,9 @@ pci:v00001002d00004385sv00001458sd00004385*
 pci:v00001002d00004385sv00001462sd00007368*
  ID_MODEL_FROM_DATABASE=SBx00 SMBus Controller (K9AG Neo2)
 
+pci:v00001002d00004385sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SBx00 SMBus Controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004385sv000015D9sd0000A811*
  ID_MODEL_FROM_DATABASE=SBx00 SMBus Controller (H8DGU)
 
@@ -3461,6 +3506,9 @@ pci:v00001002d00004390sv0000105Bsd00000E13*
 pci:v00001002d00004390sv00001458sd0000B002*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode] (GA-MA770-DS3rev2.0 Motherboard)
 
+pci:v00001002d00004390sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode] (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004390sv00001849sd00004390*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 SATA Controller [IDE mode] (Motherboard (one of many))
 
@@ -3530,6 +3578,9 @@ pci:v00001002d00004396sv0000105Bsd00000E13*
 pci:v00001002d00004396sv00001458sd00005004*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller (GA-880GMA-USB3)
 
+pci:v00001002d00004396sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004396sv000015D9sd0000A811*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB EHCI Controller (H8DGU)
 
@@ -3560,6 +3611,9 @@ pci:v00001002d00004397sv0000105Bsd00000E13*
 pci:v00001002d00004397sv00001458sd00005004*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (GA-880GMA-USB3)
 
+pci:v00001002d00004397sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004397sv000015D9sd0000A811*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI0 Controller (H8DGU)
 
@@ -3578,6 +3632,9 @@ pci:v00001002d00004398sv00001043sd000082EF*
 pci:v00001002d00004398sv0000105Bsd00000E13*
  ID_MODEL_FROM_DATABASE=SB7x0 USB OHCI1 Controller (N15235/A74MX mainboard / AMD SB700)
 
+pci:v00001002d00004398sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0 USB OHCI1 Controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004398sv000015D9sd0000A811*
  ID_MODEL_FROM_DATABASE=SB7x0 USB OHCI1 Controller (H8DGU)
 
@@ -3599,6 +3656,9 @@ pci:v00001002d00004399sv0000105Bsd00000E13*
 pci:v00001002d00004399sv00001458sd00005004*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (GA-880GMA-USB3)
 
+pci:v00001002d00004399sv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00004399sv0000174Bsd00001001*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 USB OHCI2 Controller (PURE Fusion Mini)
 
@@ -3620,6 +3680,9 @@ pci:v00001002d0000439Csv00001043sd000082EF*
 pci:v00001002d0000439Csv0000105Bsd00000E13*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller (N15235/A74MX mainboard / AMD SB700)
 
+pci:v00001002d0000439Csv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 IDE Controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d0000439D*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 LPC host controller
 
@@ -3641,6 +3704,9 @@ pci:v00001002d0000439Dsv00001043sd00008443*
 pci:v00001002d0000439Dsv0000105Bsd00000E13*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 LPC host controller (N15235/A74MX mainboard / AMD SB700)
 
+pci:v00001002d0000439Dsv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 LPC host controller (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d0000439Dsv0000174Bsd00001001*
  ID_MODEL_FROM_DATABASE=SB7x0/SB8x0/SB9x0 LPC host controller (PURE Fusion Mini)
 
@@ -5094,7 +5160,7 @@ pci:v00001002d00005964sv00001043sd0000C006*
  ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Radeon 9200 SE / TD / 128M)
 
 pci:v00001002d00005964sv00001458sd00004018*
- ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Radeon 9200 SE)
+ ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (R92S128T (Radeon 9200 SE 128MB))
 
 pci:v00001002d00005964sv00001458sd00004032*
  ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Radeon 9200 SE 128MB)
@@ -5358,7 +5424,7 @@ pci:v00001002d00005D44*
  ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Secondary)
 
 pci:v00001002d00005D44sv00001458sd00004019*
- ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Secondary) (Radeon 9200 SE (Secondary))
+ ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Secondary) (R92S128T (Radeon 9200 SE 128MB Secondary))
 
 pci:v00001002d00005D44sv00001458sd00004032*
  ID_MODEL_FROM_DATABASE=RV280 [Radeon 9200 SE] (Secondary) (Radeon 9200 SE 128MB)
@@ -5519,6 +5585,9 @@ pci:v00001002d00006608*
 pci:v00001002d00006608sv000013CCsd00003D28*
  ID_MODEL_FROM_DATABASE=Oland GL [FirePro W2100] (MXRT-2600)
 
+pci:v00001002d00006609*
+ ID_MODEL_FROM_DATABASE=Oland GL [FirePro W2100 / Barco MXRT 2600]
+
 pci:v00001002d00006610*
  ID_MODEL_FROM_DATABASE=Oland XT [Radeon HD 8670 / R7 250/350]
 
@@ -5766,13 +5835,13 @@ pci:v00001002d000066A0*
  ID_MODEL_FROM_DATABASE=Vega 20 [Radeon Instinct]
 
 pci:v00001002d000066A1*
- ID_MODEL_FROM_DATABASE=Vega 20
+ ID_MODEL_FROM_DATABASE=Vega 20 WKS GL-XE [Radeon Pro VII]
 
 pci:v00001002d000066A2*
  ID_MODEL_FROM_DATABASE=Vega 20
 
 pci:v00001002d000066A3*
- ID_MODEL_FROM_DATABASE=Vega 20
+ ID_MODEL_FROM_DATABASE=Vega 20 [Radeon Pro Vega II/Radeon Pro Vega II Duo]
 
 pci:v00001002d000066A7*
  ID_MODEL_FROM_DATABASE=Vega 20 [Radeon Pro Vega 20]
@@ -7535,6 +7604,9 @@ pci:v00001002d000067B1sv0000148Csd00002358*
 pci:v00001002d000067B1sv0000174Bsd0000E324*
  ID_MODEL_FROM_DATABASE=Hawaii PRO [Radeon R9 290/390] (Sapphire Nitro R9 390)
 
+pci:v00001002d000067B8*
+ ID_MODEL_FROM_DATABASE=Hawaii XT [Radeon R9 290X Engineering Sample]
+
 pci:v00001002d000067B9*
  ID_MODEL_FROM_DATABASE=Vesuvius [Radeon R9 295X2]
 
@@ -7637,6 +7709,9 @@ pci:v00001002d000067DFsv00001462sd0000341B*
 pci:v00001002d000067DFsv00001462sd0000341E*
  ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 570 Armor 4G OC)
 
+pci:v00001002d000067DFsv00001462sd0000809E*
+ ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 480 4GB)
+
 pci:v00001002d000067DFsv00001462sd00008A92*
  ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 580)
 
@@ -7661,6 +7736,9 @@ pci:v00001002d000067DFsv00001682sd00009470*
 pci:v00001002d000067DFsv00001682sd00009480*
  ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 480)
 
+pci:v00001002d000067DFsv00001682sd00009587*
+ ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 590 FATBOY 8GB)
+
 pci:v00001002d000067DFsv00001682sd00009588*
  ID_MODEL_FROM_DATABASE=Ellesmere [Radeon RX 470/480/570/570X/580/580X/590] (Radeon RX 580 XTR)
 
@@ -8474,9 +8552,24 @@ pci:v00001002d00006867*
 pci:v00001002d00006868*
  ID_MODEL_FROM_DATABASE=Vega 10 [Radeon PRO WX 8100/8200]
 
+pci:v00001002d00006869*
+ ID_MODEL_FROM_DATABASE=Vega 10 XGA [Radeon Pro Vega 48]
+
+pci:v00001002d0000686A*
+ ID_MODEL_FROM_DATABASE=Vega 10 LEA
+
+pci:v00001002d0000686B*
+ ID_MODEL_FROM_DATABASE=Vega 10 XTXA [Radeon Pro Vega 64X]
+
 pci:v00001002d0000686C*
  ID_MODEL_FROM_DATABASE=Vega 10 [Radeon Instinct MI25 MxGPU]
 
+pci:v00001002d0000686D*
+ ID_MODEL_FROM_DATABASE=Vega 10 GLXTA
+
+pci:v00001002d0000686E*
+ ID_MODEL_FROM_DATABASE=Vega 10 GLXLA
+
 pci:v00001002d0000687F*
  ID_MODEL_FROM_DATABASE=Vega 10 XL/XT [Radeon RX Vega 56/64]
 
@@ -8489,6 +8582,9 @@ pci:v00001002d0000687Fsv00001002sd00006B76*
 pci:v00001002d0000687Fsv00001458sd0000230C*
  ID_MODEL_FROM_DATABASE=Vega 10 XL/XT [Radeon RX Vega 56/64] (Radeon RX VEGA 56 GAMING OC 8G)
 
+pci:v00001002d0000687Fsv00001DA2sd0000E376*
+ ID_MODEL_FROM_DATABASE=Vega 10 XL/XT [Radeon RX Vega 56/64] (Radeon RX VEGA 56 Pulse 8GB OC HBM2)
+
 pci:v00001002d00006880*
  ID_MODEL_FROM_DATABASE=Lexington [Radeon HD 6550M]
 
@@ -9218,6 +9314,9 @@ pci:v00001002d000068D9sv000017AFsd00003010*
 pci:v00001002d000068DA*
  ID_MODEL_FROM_DATABASE=Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570]
 
+pci:v00001002d000068DAsv00001462sd00008071*
+ ID_MODEL_FROM_DATABASE=Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570] (VR5550-MD1G (Radeon HD 5550))
+
 pci:v00001002d000068DAsv0000148Csd00003000*
  ID_MODEL_FROM_DATABASE=Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570] (Radeon HD 6390)
 
@@ -10535,6 +10634,9 @@ pci:v00001002d0000731F*
 pci:v00001002d0000731Fsv00001458sd00002313*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Radeon RX 5700 XT Gaming OC)
 
+pci:v00001002d0000731Fsv00001682sd00005701*
+ ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (RX 5700 XT RAW II)
+
 pci:v00001002d0000731Fsv00001DA2sd0000E411*
  ID_MODEL_FROM_DATABASE=Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT] (Radeon RX 5600 XT)
 
@@ -10553,15 +10655,30 @@ pci:v00001002d0000734F*
 pci:v00001002d00007360*
  ID_MODEL_FROM_DATABASE=Navi 12 [Radeon Pro 5600M]
 
+pci:v00001002d00007388*
+ ID_MODEL_FROM_DATABASE=Arcturus GL-XL
+
+pci:v00001002d0000738C*
+ ID_MODEL_FROM_DATABASE=Arcturus GL-XL [AMD Instinct MI100]
+
+pci:v00001002d0000738E*
+ ID_MODEL_FROM_DATABASE=Arcturus GL-XL
+
 pci:v00001002d000073BF*
  ID_MODEL_FROM_DATABASE=Navi 21 [Radeon RX 6800/6800 XT / 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)
+
 pci:v00001002d000073C3*
  ID_MODEL_FROM_DATABASE=Navi 22
 
 pci:v00001002d000073DF*
  ID_MODEL_FROM_DATABASE=Navi 22
 
+pci:v00001002d000073E0*
+ ID_MODEL_FROM_DATABASE=Navi 23
+
 pci:v00001002d000073FF*
  ID_MODEL_FROM_DATABASE=Navi 23
 
@@ -11171,6 +11288,9 @@ pci:v00001002d000095CF*
 pci:v00001002d0000960F*
  ID_MODEL_FROM_DATABASE=RS780 HDMI Audio [Radeon 3000/3100 / HD 3200/3300]
 
+pci:v00001002d0000960Fsv00001462sd00007596*
+ ID_MODEL_FROM_DATABASE=RS780 HDMI Audio [Radeon 3000/3100 / HD 3200/3300] (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00009610*
  ID_MODEL_FROM_DATABASE=RS780 [Radeon HD 3200]
 
@@ -11195,6 +11315,9 @@ pci:v00001002d00009615*
 pci:v00001002d00009616*
  ID_MODEL_FROM_DATABASE=RS780L [Radeon 3000]
 
+pci:v00001002d00009616sv00001462sd00007501*
+ ID_MODEL_FROM_DATABASE=RS780L [Radeon 3000] (760GM-E51(MS-7596) Motherboard)
+
 pci:v00001002d00009640*
  ID_MODEL_FROM_DATABASE=Sumo [Radeon HD 6550D]
 
@@ -11309,6 +11432,9 @@ pci:v00001002d0000980A*
 pci:v00001002d00009830*
  ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8400 / R3 Series]
 
+pci:v00001002d00009830sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8400 / R3 Series] (AM1I-A Motherboard)
+
 pci:v00001002d00009831*
  ID_MODEL_FROM_DATABASE=Kabini [Radeon HD 8400E]
 
@@ -11345,6 +11471,9 @@ pci:v00001002d0000983D*
 pci:v00001002d00009840*
  ID_MODEL_FROM_DATABASE=Kabini HDMI/DP Audio
 
+pci:v00001002d00009840sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=Kabini HDMI/DP Audio (AM1I-A Motherboard)
+
 pci:v00001002d00009840sv00001849sd00009840*
  ID_MODEL_FROM_DATABASE=Kabini HDMI/DP Audio (QC5000-ITX/PH)
 
@@ -13574,6 +13703,9 @@ pci:v00001022d00001451*
 pci:v00001022d00001452*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
 
+pci:v00001022d00001452sv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge (mCOM10-L1900)
+
 pci:v00001022d00001453*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 00h-0fh) PCIe GPP Bridge
 
@@ -13736,6 +13868,9 @@ pci:v00001022d0000149C*
 pci:v00001022d0000149Csv00001462sd00007C37*
  ID_MODEL_FROM_DATABASE=Matisse USB 3.0 Host Controller (X570-A PRO motherboard)
 
+pci:v00001022d0000149D*
+ ID_MODEL_FROM_DATABASE=Vangogh CVIP
+
 pci:v00001022d00001510*
  ID_MODEL_FROM_DATABASE=Family 14h Processor Root Complex
 
@@ -13778,6 +13913,9 @@ pci:v00001022d00001535*
 pci:v00001022d00001536*
  ID_MODEL_FROM_DATABASE=Family 16h Processor Root Complex
 
+pci:v00001022d00001536sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=Family 16h Processor Root Complex (AM1I-A Motherboard)
+
 pci:v00001022d00001536sv00001849sd00001536*
  ID_MODEL_FROM_DATABASE=Family 16h Processor Root Complex (QC5000-ITX/PH)
 
@@ -13988,12 +14126,21 @@ pci:v00001022d000015D0*
 pci:v00001022d000015D0sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 Root Complex (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d000015D0sv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Root Complex (PRIME B450M-A Motherboard)
+
 pci:v00001022d000015D1*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 IOMMU
 
 pci:v00001022d000015D1sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 IOMMU (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d000015D1sv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 IOMMU (PRIME B450M-A Motherboard)
+
+pci:v00001022d000015D1sv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 IOMMU (mCOM10-L1900)
+
 pci:v00001022d000015D2*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 PCIe Dummy Host Bridge
 
@@ -14012,36 +14159,60 @@ pci:v00001022d000015DA*
 pci:v00001022d000015DB*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
 
+pci:v00001022d000015DBsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A (mCOM10-L1900)
+
 pci:v00001022d000015DC*
  ID_MODEL_FROM_DATABASE=Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
 
+pci:v00001022d000015DCsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B (mCOM10-L1900)
+
 pci:v00001022d000015DE*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight HD Audio Controller
 
 pci:v00001022d000015DF*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) Platform Security Processor
 
+pci:v00001022d000015DFsv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) Platform Security Processor (PRIME Motherboard)
+
 pci:v00001022d000015DFsv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) Platform Security Processor (ThinkPad E595)
 
+pci:v00001022d000015DFsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) Platform Security Processor (mCOM10-L1900)
+
 pci:v00001022d000015E0*
  ID_MODEL_FROM_DATABASE=Raven USB 3.1
 
 pci:v00001022d000015E0sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Raven USB 3.1 (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d000015E0sv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Raven USB 3.1 (PRIME Motherboard)
+
 pci:v00001022d000015E0sv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Raven USB 3.1 (ThinkPad E595)
 
+pci:v00001022d000015E0sv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Raven USB 3.1 (mCOM10-L1900)
+
 pci:v00001022d000015E1*
  ID_MODEL_FROM_DATABASE=Raven USB 3.1
 
 pci:v00001022d000015E1sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Raven USB 3.1 (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d000015E1sv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=Raven USB 3.1 (PRIME Motherboard)
+
 pci:v00001022d000015E1sv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Raven USB 3.1 (ThinkPad E595)
 
+pci:v00001022d000015E1sv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=Raven USB 3.1 (mCOM10-L1900)
+
 pci:v00001022d000015E2*
  ID_MODEL_FROM_DATABASE=Raven/Raven2/FireFlight/Renoir Audio Processor
 
@@ -14054,6 +14225,9 @@ pci:v00001022d000015E3*
 pci:v00001022d000015E3sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) 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)
+
 pci:v00001022d000015E3sv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=Family 17h (Models 10h-1fh) HD Audio Controller (ThinkPad E595)
 
@@ -14258,6 +14432,12 @@ pci:v00001022d00001643*
 pci:v00001022d00001644*
  ID_MODEL_FROM_DATABASE=Renoir I2S
 
+pci:v00001022d00001648*
+ ID_MODEL_FROM_DATABASE=VanGogh Root Complex
+
+pci:v00001022d00001649*
+ ID_MODEL_FROM_DATABASE=VanGogh PSP/CCP
+
 pci:v00001022d00001700*
  ID_MODEL_FROM_DATABASE=Family 12h/14h Processor Function 0
 
@@ -14681,6 +14861,9 @@ pci:v00001022d00007801sv0000103Csd0000168B*
 pci:v00001022d00007801sv0000103Csd0000194E*
  ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (ProBook 455 G1 Notebook)
 
+pci:v00001022d00007801sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (AM1I-A Motherboard)
+
 pci:v00001022d00007801sv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (Z50-75)
 
@@ -14714,6 +14897,9 @@ pci:v00001022d00007807sv0000103Csd0000194E*
 pci:v00001022d00007807sv0000103Csd00001985*
  ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller (Pavilion 17-e163sg Notebook PC)
 
+pci:v00001022d00007807sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller (AM1I-A Motherboard)
+
 pci:v00001022d00007807sv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH USB OHCI Controller (Z50-75)
 
@@ -14729,6 +14915,9 @@ pci:v00001022d00007808sv0000103Csd0000194E*
 pci:v00001022d00007808sv0000103Csd00001985*
  ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller (Pavilion 17-e163sg Notebook PC)
 
+pci:v00001022d00007808sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller (AM1I-A Motherboard)
+
 pci:v00001022d00007808sv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH USB EHCI Controller (Z50-75)
 
@@ -14756,6 +14945,9 @@ pci:v00001022d0000780Bsv0000103Csd0000194E*
 pci:v00001022d0000780Bsv0000103Csd00001985*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (Pavilion 17-e163sg Notebook PC)
 
+pci:v00001022d0000780Bsv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=FCH SMBus Controller (AM1I-A Motherboard)
+
 pci:v00001022d0000780Bsv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (Z50-75)
 
@@ -14777,6 +14969,9 @@ pci:v00001022d0000780Dsv0000103Csd00001985*
 pci:v00001022d0000780Dsv00001043sd00008444*
  ID_MODEL_FROM_DATABASE=FCH Azalia Controller (F2A85-M Series)
 
+pci:v00001022d0000780Dsv00001043sd00008576*
+ ID_MODEL_FROM_DATABASE=FCH Azalia Controller (AM1I-A Motherboard)
+
 pci:v00001022d0000780Dsv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH Azalia Controller (Z50-75)
 
@@ -14792,6 +14987,9 @@ pci:v00001022d0000780Esv0000103Csd0000194E*
 pci:v00001022d0000780Esv0000103Csd00001985*
  ID_MODEL_FROM_DATABASE=FCH LPC Bridge (Pavilion 17-e163sg Notebook PC)
 
+pci:v00001022d0000780Esv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=FCH LPC Bridge (AM1I-A Motherboard)
+
 pci:v00001022d0000780Esv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH LPC Bridge (Z50-75)
 
@@ -14816,6 +15014,9 @@ pci:v00001022d00007814sv0000103Csd0000194E*
 pci:v00001022d00007814sv0000103Csd00001985*
  ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller (Pavilion 17-e163sg Notebook PC)
 
+pci:v00001022d00007814sv00001043sd00008623*
+ ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller (AM1I-A Motherboard)
+
 pci:v00001022d00007814sv000017AAsd00003988*
  ID_MODEL_FROM_DATABASE=FCH USB XHCI Controller (Z50-75)
 
@@ -14831,9 +15032,15 @@ pci:v00001022d00007901*
 pci:v00001022d00007901sv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d00007901sv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (PRIME Motherboard)
+
 pci:v00001022d00007901sv00001462sd00007C37*
  ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (X570-A PRO motherboard)
 
+pci:v00001022d00007901sv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=FCH SATA Controller [AHCI mode] (mCOM10-L1900)
+
 pci:v00001022d00007902*
  ID_MODEL_FROM_DATABASE=FCH SATA Controller [RAID mode]
 
@@ -14855,24 +15062,36 @@ pci:v00001022d0000790B*
 pci:v00001022d0000790Bsv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d0000790Bsv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=FCH SMBus Controller (PRIME Motherboard)
+
 pci:v00001022d0000790Bsv00001462sd00007C37*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (X570-A PRO motherboard)
 
 pci:v00001022d0000790Bsv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=FCH SMBus Controller (ThinkPad E595)
 
+pci:v00001022d0000790Bsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=FCH SMBus Controller (mCOM10-L1900)
+
 pci:v00001022d0000790E*
  ID_MODEL_FROM_DATABASE=FCH LPC Bridge
 
 pci:v00001022d0000790Esv0000103Csd00008615*
  ID_MODEL_FROM_DATABASE=FCH LPC Bridge (Pavilion Laptop 15-cw1xxx)
 
+pci:v00001022d0000790Esv00001043sd0000876B*
+ ID_MODEL_FROM_DATABASE=FCH LPC Bridge (PRIME B450M-A Motherboard)
+
 pci:v00001022d0000790Esv00001462sd00007C37*
  ID_MODEL_FROM_DATABASE=FCH LPC Bridge (X570-A PRO motherboard)
 
 pci:v00001022d0000790Esv000017AAsd00005124*
  ID_MODEL_FROM_DATABASE=FCH LPC Bridge (ThinkPad E595)
 
+pci:v00001022d0000790Esv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=FCH LPC Bridge (mCOM10-L1900)
+
 pci:v00001022d0000790F*
  ID_MODEL_FROM_DATABASE=FCH PCI Bridge
 
@@ -16610,6 +16829,9 @@ pci:v00001033d00000035sv00001931sd0000000B*
 pci:v00001033d00000035sv0000807Dsd00000035*
  ID_MODEL_FROM_DATABASE=OHCI USB Controller (PCI-USB2 (OHCI subsystem))
 
+pci:v00001033d00000035sv00008086sd00004D44*
+ ID_MODEL_FROM_DATABASE=OHCI USB Controller (D850EMV2 motherboard)
+
 pci:v00001033d0000003B*
  ID_MODEL_FROM_DATABASE=PCI to C-bus Bridge
 
@@ -16700,6 +16922,9 @@ pci:v00001033d000000E0sv00001799sd00000002*
 pci:v00001033d000000E0sv0000807Dsd00001043*
  ID_MODEL_FROM_DATABASE=uPD72010x USB 2.0 Controller (PCI-USB2 (EHCI subsystem))
 
+pci:v00001033d000000E0sv00008086sd00004D44*
+ ID_MODEL_FROM_DATABASE=uPD72010x USB 2.0 Controller (D850EMV2 motherboard)
+
 pci:v00001033d000000E7*
  ID_MODEL_FROM_DATABASE=uPD72873 [Firewarden] IEEE1394a OHCI 1.1 Link/2-port PHY Controller
 
@@ -20696,6 +20921,9 @@ pci:v00001077d00002031sv0000103Csd00001939*
 pci:v00001077d00002031sv0000103Csd00008002*
  ID_MODEL_FROM_DATABASE=ISP8324-based 16Gb Fibre Channel to PCI Express Adapter (3830C 16G Fibre Channel Host Bus Adapter)
 
+pci:v00001077d00002031sv00001077sd00000241*
+ ID_MODEL_FROM_DATABASE=ISP8324-based 16Gb Fibre Channel to PCI Express Adapter (QLE2670 16Gb Single Port Fibre Channel Adapter)
+
 pci:v00001077d00002071*
  ID_MODEL_FROM_DATABASE=ISP2714-based 16/32Gb Fibre Channel to PCIe Adapter
 
@@ -20720,6 +20948,15 @@ pci:v00001077d00002081sv00001077sd000002E1*
 pci:v00001077d00002081sv00001077sd000002E3*
  ID_MODEL_FROM_DATABASE=ISP2814-based 64/32G Fibre Channel to PCIe Controller (QLE2774 Quad Port 32GFC PCIe Gen4 x16 Adapter)
 
+pci:v00001077d00002089*
+ ID_MODEL_FROM_DATABASE=ISP2854-based 64/32G Fibre Channel to PCIe Controller with StorCryption
+
+pci:v00001077d00002089sv00001077sd000002E8*
+ ID_MODEL_FROM_DATABASE=ISP2854-based 64/32G Fibre Channel to PCIe Controller with StorCryption (QLE2884 Quad Port 64GFC PCIe Gen4 x16 Adapter with StorCryption)
+
+pci:v00001077d00002089sv00001077sd000002EA*
+ ID_MODEL_FROM_DATABASE=ISP2854-based 64/32G Fibre Channel to PCIe Controller with StorCryption (QLE2784 Quad Port 32GFC PCIe Gen4 x16 Adapter with StorCryption)
+
 pci:v00001077d00002100*
  ID_MODEL_FROM_DATABASE=QLA2100 64-bit Fibre Channel Adapter
 
@@ -20780,6 +21017,9 @@ pci:v00001077d00002261sv00001590sd00000204*
 pci:v00001077d00002261sv00001590sd0000022D*
  ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (5830C 32Gb Dual Port Fibre Channel Adapter)
 
+pci:v00001077d00002261sv0000193Dsd0000100D*
+ ID_MODEL_FROM_DATABASE=ISP2722-based 16/32Gb Fibre Channel to PCIe Adapter (NIC-FC680i-Mb-2x16G)
+
 pci:v00001077d00002281*
  ID_MODEL_FROM_DATABASE=ISP2812-based 64/32G Fibre Channel to PCIe Controller
 
@@ -20807,6 +21047,21 @@ pci:v00001077d00002281sv00001590sd000002D3*
 pci:v00001077d00002281sv00001590sd000002D4*
  ID_MODEL_FROM_DATABASE=ISP2812-based 64/32G Fibre Channel to PCIe Controller (SN1610Q â€“ 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter)
 
+pci:v00001077d00002289*
+ ID_MODEL_FROM_DATABASE=ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption
+
+pci:v00001077d00002289sv00001077sd000002E9*
+ ID_MODEL_FROM_DATABASE=ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption (QLE2882 Dual Port 64GFC PCIe Gen4 x8 Adapter with StorCryption)
+
+pci:v00001077d00002289sv00001077sd000002EB*
+ ID_MODEL_FROM_DATABASE=ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption (QLE2782 Dual Port 32GFC PCIe Gen4 x8 Adapter with StorCryption)
+
+pci:v00001077d00002289sv00001077sd000002EF*
+ ID_MODEL_FROM_DATABASE=ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption (QLE2880 Single Port 64GFC PCIe Gen4 x8 Adapter with StorCryption)
+
+pci:v00001077d00002289sv00001077sd000002F1*
+ ID_MODEL_FROM_DATABASE=ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption (QLE2780 Single Port 32GFC PCIe Gen4 x8 Adapter with StorCryption)
+
 pci:v00001077d00002300*
  ID_MODEL_FROM_DATABASE=QLA2300 64-bit Fibre Channel Adapter
 
@@ -21083,6 +21338,12 @@ pci:v00001077d00008070sv00001590sd00000220*
 pci:v00001077d00008070sv00001590sd000002BD*
  ID_MODEL_FROM_DATABASE=FastLinQ QL41000 Series 10/25/40/50GbE Controller (10Gb 2P 524SFP+ NIC)
 
+pci:v00001077d00008070sv0000193Dsd00001030*
+ ID_MODEL_FROM_DATABASE=FastLinQ QL41000 Series 10/25/40/50GbE Controller (NIC-ETH681i-Mb-2x25G)
+
+pci:v00001077d00008070sv0000193Dsd00001032*
+ ID_MODEL_FROM_DATABASE=FastLinQ QL41000 Series 10/25/40/50GbE Controller (NIC-ETH682i-Mb-2x25G)
+
 pci:v00001077d00008080*
  ID_MODEL_FROM_DATABASE=FastLinQ QL41000 Series 10/25/40/50GbE Controller (FCoE)
 
@@ -25331,6 +25592,9 @@ pci:v000010B5d00009050sv000010B5sd00003196*
 pci:v000010B5d00009050sv000010B5sd00009050*
  ID_MODEL_FROM_DATABASE=PCI <-> IOBus Bridge (PCI-I04 PCI Passive PC/CAN Interface)
 
+pci:v000010B5d00009050sv000012FEsd00000001*
+ ID_MODEL_FROM_DATABASE=PCI <-> IOBus Bridge (CAN-PCI/331 CAN bus controller)
+
 pci:v000010B5d00009050sv00001369sd00008901*
  ID_MODEL_FROM_DATABASE=PCI <-> IOBus Bridge (PCX11+ PCI)
 
@@ -31808,6 +32072,9 @@ pci:v000010DEd00000A22*
 pci:v000010DEd00000A23*
  ID_MODEL_FROM_DATABASE=GT216 [GeForce 210]
 
+pci:v000010DEd00000A24*
+ ID_MODEL_FROM_DATABASE=GT216 [GeForce 405]
+
 pci:v000010DEd00000A26*
  ID_MODEL_FROM_DATABASE=GT216 [GeForce 405]
 
@@ -35177,6 +35444,9 @@ pci:v000010DEd00001AEC*
 pci:v000010DEd00001AED*
  ID_MODEL_FROM_DATABASE=TU116 USB Type-C UCSI Controller
 
+pci:v000010DEd00001AEF*
+ ID_MODEL_FROM_DATABASE=GA102 High Definition Audio Controller
+
 pci:v000010DEd00001B00*
  ID_MODEL_FROM_DATABASE=GP102 [TITAN X]
 
@@ -35201,6 +35471,9 @@ pci:v000010DEd00001B30*
 pci:v000010DEd00001B38*
  ID_MODEL_FROM_DATABASE=GP102GL [Tesla P40]
 
+pci:v000010DEd00001B39*
+ ID_MODEL_FROM_DATABASE=GP102GL [Tesla P10]
+
 pci:v000010DEd00001B70*
  ID_MODEL_FROM_DATABASE=GP102GL
 
@@ -35364,10 +35637,10 @@ pci:v000010DEd00001C31*
  ID_MODEL_FROM_DATABASE=GP106GL [Quadro P2200]
 
 pci:v000010DEd00001C35*
- ID_MODEL_FROM_DATABASE=GP106
+ ID_MODEL_FROM_DATABASE=GP106M [Quadro P2000 Mobile]
 
 pci:v000010DEd00001C36*
- ID_MODEL_FROM_DATABASE=GP106
+ ID_MODEL_FROM_DATABASE=GP106 [P106M]
 
 pci:v000010DEd00001C60*
  ID_MODEL_FROM_DATABASE=GP106BM [GeForce GTX 1060 Mobile 6GB]
@@ -35804,6 +36077,9 @@ pci:v000010DEd00001F99*
 pci:v000010DEd00001F9C*
  ID_MODEL_FROM_DATABASE=TU117M [GeForce MX450]
 
+pci:v000010DEd00001F9D*
+ ID_MODEL_FROM_DATABASE=TU117M [GeForce GTX 1650 Mobile / Max-Q]
+
 pci:v000010DEd00001FAE*
  ID_MODEL_FROM_DATABASE=TU117GL
 
@@ -35813,6 +36089,9 @@ pci:v000010DEd00001FB8*
 pci:v000010DEd00001FB9*
  ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T1000 Mobile]
 
+pci:v000010DEd00001FBB*
+ ID_MODEL_FROM_DATABASE=TU117GLM [Quadro T500 Mobile]
+
 pci:v000010DEd00001FBF*
  ID_MODEL_FROM_DATABASE=TU117GL
 
@@ -35828,6 +36107,9 @@ pci:v000010DEd000020B0*
 pci:v000010DEd000020B1*
  ID_MODEL_FROM_DATABASE=GA100 [A100 PCIe 40GB]
 
+pci:v000010DEd000020B2*
+ ID_MODEL_FROM_DATABASE=GA100 [A100 SXM4 80GB]
+
 pci:v000010DEd000020BE*
  ID_MODEL_FROM_DATABASE=GA100 [GRID A100A]
 
@@ -35864,6 +36146,9 @@ pci:v000010DEd000021AE*
 pci:v000010DEd000021BF*
  ID_MODEL_FROM_DATABASE=TU116GL
 
+pci:v000010DEd000021C2*
+ ID_MODEL_FROM_DATABASE=TU116
+
 pci:v000010DEd000021C4*
  ID_MODEL_FROM_DATABASE=TU116 [GeForce GTX 1660 SUPER]
 
@@ -35873,9 +36158,15 @@ pci:v000010DEd000021D1*
 pci:v000010DEd00002204*
  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3090]
 
+pci:v000010DEd00002205*
+ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080 Ti]
+
 pci:v000010DEd00002206*
  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080]
 
+pci:v000010DEd00002206sv000010DEsd00001467*
+ ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080]
+
 pci:v000010DEd00002206sv000010DEsd0000146D*
  ID_MODEL_FROM_DATABASE=GA102 [GeForce RTX 3080] (GA102 [GeForce RTX 3080 20GB])
 
@@ -35891,9 +36182,21 @@ pci:v000010DEd0000222F*
 pci:v000010DEd00002230*
  ID_MODEL_FROM_DATABASE=GA102GL [RTX A6000]
 
+pci:v000010DEd00002235*
+ ID_MODEL_FROM_DATABASE=GA102GL [RTX A40]
+
+pci:v000010DEd00002236*
+ ID_MODEL_FROM_DATABASE=GA102GL
+
 pci:v000010DEd0000223F*
  ID_MODEL_FROM_DATABASE=GA102GL
 
+pci:v000010DEd0000228B*
+ ID_MODEL_FROM_DATABASE=GA104 High Definition Audio Controller
+
+pci:v000010DEd00002321*
+ ID_MODEL_FROM_DATABASE=GA103
+
 pci:v000010DEd00002482*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Ti]
 
@@ -35910,11 +36213,14 @@ pci:v000010DEd00002486*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3060 Ti]
 
 pci:v000010DEd0000249C*
- ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q 8GB/16GB]
+ ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 
 pci:v000010DEd0000249D*
  ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
 
+pci:v000010DEd0000249F*
+ ID_MODEL_FROM_DATABASE=GA104M
+
 pci:v000010DEd000024AC*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 30x0 Engineering Sample]
 
@@ -35924,18 +36230,48 @@ pci:v000010DEd000024AD*
 pci:v000010DEd000024AF*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample]
 
+pci:v000010DEd000024B6*
+ ID_MODEL_FROM_DATABASE=GA104
+
+pci:v000010DEd000024B8*
+ ID_MODEL_FROM_DATABASE=GA104
+
 pci:v000010DEd000024BF*
  ID_MODEL_FROM_DATABASE=GA104 [GeForce RTX 3070 Engineering Sample]
 
 pci:v000010DEd000024DC*
- ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile 16GB]
+ ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
 
 pci:v000010DEd000024DD*
  ID_MODEL_FROM_DATABASE=GA104M [GeForce RTX 3070 Mobile / Max-Q]
 
+pci:v000010DEd00002501*
+ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060]
+
+pci:v000010DEd00002503*
+ ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060]
+
+pci:v000010DEd00002505*
+ ID_MODEL_FROM_DATABASE=GA106
+
+pci:v000010DEd00002520*
+ ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
+
 pci:v000010DEd0000252F*
  ID_MODEL_FROM_DATABASE=GA106 [GeForce RTX 3060 Engineering Sample]
 
+pci:v000010DEd00002560*
+ ID_MODEL_FROM_DATABASE=GA106M [GeForce RTX 3060 Mobile / Max-Q]
+
+pci:v000010DEd00002583*
+ ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050]
+
+pci:v000010DEd000025A2*
+ ID_MODEL_FROM_DATABASE=GA107
+
+pci:v000010DEd000025A4*
+ ID_MODEL_FROM_DATABASE=GA107
+
 pci:v000010DEd000025AF*
  ID_MODEL_FROM_DATABASE=GA107 [GeForce RTX 3050 Engineering Sample]
 
@@ -36119,6 +36455,9 @@ pci:v000010DFd0000E300sv00001590sd00000214*
 pci:v000010DFd0000E300sv00001590sd0000022E*
  ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (Synergy 5330C 2-Port 32Gb Fibre Channel Mezz Card)
 
+pci:v000010DFd0000E300sv0000193Dsd00001060*
+ ID_MODEL_FROM_DATABASE=LPe31000/LPe32000 Series 16Gb/32Gb Fibre Channel Adapter (NIC-FC730i-Mb-2P)
+
 pci:v000010DFd0000F011*
  ID_MODEL_FROM_DATABASE=Saturn: LightPulse Fibre Channel Host Adapter
 
@@ -36221,6 +36560,9 @@ pci:v000010DFd0000F400sv00001590sd000002D5*
 pci:v000010DFd0000F400sv00001590sd000002D6*
  ID_MODEL_FROM_DATABASE=LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (StoreFabric SN1610E 2-Port 32Gb Fibre Channel Adapter)
 
+pci:v000010DFd0000F500*
+ ID_MODEL_FROM_DATABASE=LPe37000/LPe38000 Series 32Gb/64Gb Fibre Channel Adapter
+
 pci:v000010DFd0000F700*
  ID_MODEL_FROM_DATABASE=LP7000 Fibre Channel Host Adapter
 
@@ -36536,6 +36878,9 @@ pci:v000010EC*
 pci:v000010ECd00000139*
  ID_MODEL_FROM_DATABASE=RTL-8139/8139C/8139C+ Ethernet Controller
 
+pci:v000010ECd00003000*
+ ID_MODEL_FROM_DATABASE=Killer E3000 2.5GbE Controller
+
 pci:v000010ECd00005208*
  ID_MODEL_FROM_DATABASE=RTS5208 PCI Express Card Reader
 
@@ -36602,6 +36947,9 @@ pci:v000010ECd0000525Asv00001028sd000006DC*
 pci:v000010ECd0000525Asv00001028sd000006E4*
  ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (XPS 15 9550)
 
+pci:v000010ECd0000525Asv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (Latitude 11 5175 2-in-1)
+
 pci:v000010ECd0000525Asv000017AAsd0000224F*
  ID_MODEL_FROM_DATABASE=RTS525A PCI Express Card Reader (ThinkPad X1 Carbon 5th Gen)
 
@@ -36845,6 +37193,12 @@ pci:v000010ECd00008139sv00008E2Esd00007100*
 pci:v000010ECd00008139sv0000A0A0sd00000007*
  ID_MODEL_FROM_DATABASE=RTL-8100/8101L/8139 PCI Fast Ethernet Adapter (ALN-325C)
 
+pci:v000010ECd00008161*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
+
+pci:v000010ECd00008161sv000010ECsd00008168*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (TP-Link TG-3468 v4.0 Gigabit PCI Express Network Adapter)
+
 pci:v000010ECd00008167*
  ID_MODEL_FROM_DATABASE=RTL-8110SC/8169SC Gigabit Ethernet
 
@@ -36923,6 +37277,15 @@ pci:v000010ECd00008168sv00001043sd00008432*
 pci:v000010ECd00008168sv00001043sd00008505*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (P8 series motherboard)
 
+pci:v000010ECd00008168sv00001043sd00008554*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (H81M-C Motherboard)
+
+pci:v000010ECd00008168sv00001043sd0000859E*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (AM1I-A Motherboard)
+
+pci:v000010ECd00008168sv00001043sd00008677*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (PRIME B450M-A Motherboard)
+
 pci:v000010ECd00008168sv0000105Bsd00000D7C*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (D270S/D250S Motherboard)
 
@@ -36956,6 +37319,9 @@ pci:v000010ECd00008168sv00001462sd00007C37*
 pci:v000010ECd00008168sv00001775sd000011CC*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (CC11/CL11)
 
+pci:v000010ECd00008168sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (ThinkCentre E73)
+
 pci:v000010ECd00008168sv000017AAsd00003814*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Z50-75)
 
@@ -36977,6 +37343,9 @@ pci:v000010ECd00008168sv00008086sd00002055*
 pci:v000010ECd00008168sv00008086sd0000D615*
  ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (Desktop Board D510MO/D525MW)
 
+pci:v000010ECd00008168sv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (mCOM10-L1900)
+
 pci:v000010ECd00008169*
  ID_MODEL_FROM_DATABASE=RTL8169 PCI Gigabit Ethernet Controller
 
@@ -37025,6 +37394,30 @@ pci:v000010ECd00008169sv00001734sd00001091*
 pci:v000010ECd00008169sv0000A0A0sd00000449*
  ID_MODEL_FROM_DATABASE=RTL8169 PCI Gigabit Ethernet Controller (AK86-L motherboard)
 
+pci:v000010ECd0000816A*
+ ID_MODEL_FROM_DATABASE=RTL8111xP UART #1
+
+pci:v000010ECd0000816Asv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=RTL8111xP UART #1 (mCOM10-L1900)
+
+pci:v000010ECd0000816B*
+ ID_MODEL_FROM_DATABASE=RTL8111xP UART #2
+
+pci:v000010ECd0000816Bsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=RTL8111xP UART #2 (mCOM10-L1900)
+
+pci:v000010ECd0000816C*
+ ID_MODEL_FROM_DATABASE=RTL8111xP IPMI interface
+
+pci:v000010ECd0000816Csv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=RTL8111xP IPMI interface (mCOM10-L1900)
+
+pci:v000010ECd0000816D*
+ ID_MODEL_FROM_DATABASE=RTL811x EHCI host controller
+
+pci:v000010ECd0000816Dsv0000EA50sd0000CE19*
+ ID_MODEL_FROM_DATABASE=RTL811x EHCI host controller (mCOM10-L1900)
+
 pci:v000010ECd00008171*
  ID_MODEL_FROM_DATABASE=RTL8191SEvA Wireless LAN Controller
 
@@ -37211,6 +37604,9 @@ pci:v000010EEd00007038*
 pci:v000010EEd00007038sv000017AAsd0000402F*
  ID_MODEL_FROM_DATABASE=FPGA Card XC7VX690T (FPGA XC7VX690T-3FFG1157E)
 
+pci:v000010EEd00008019*
+ ID_MODEL_FROM_DATABASE=Memory controller
+
 pci:v000010EEd00008380*
  ID_MODEL_FROM_DATABASE=Ellips ProfiXpress Profibus Master
 
@@ -42938,6 +43334,9 @@ pci:v00001172d000000A7*
 pci:v00001172d00000530*
  ID_MODEL_FROM_DATABASE=Stratix IV
 
+pci:v00001172d0000646C*
+ ID_MODEL_FROM_DATABASE=KT-500/KT-521 board
+
 pci:v00001173*
  ID_VENDOR_FROM_DATABASE=Adobe Systems, Inc
 
@@ -42968,6 +43367,9 @@ pci:v00001179d00000102*
 pci:v00001179d00000103*
  ID_MODEL_FROM_DATABASE=EX-IDE Type-B
 
+pci:v00001179d0000010E*
+ ID_MODEL_FROM_DATABASE=PXP04 NVMe SSD
+
 pci:v00001179d0000010F*
  ID_MODEL_FROM_DATABASE=NVMe Controller
 
@@ -43001,9 +43403,15 @@ pci:v00001179d00000110sv00001D49sd0000403A*
 pci:v00001179d00000113*
  ID_MODEL_FROM_DATABASE=BG3 NVMe SSD Controller
 
+pci:v00001179d00000113sv00001179sd00000001*
+ ID_MODEL_FROM_DATABASE=BG3 NVMe SSD Controller (Toshiba KBG30ZMS128G 128GB NVMe SSD)
+
 pci:v00001179d00000115*
  ID_MODEL_FROM_DATABASE=XG4 NVMe SSD Controller
 
+pci:v00001179d0000011A*
+ ID_MODEL_FROM_DATABASE=XG6 NVMe SSD Controller
+
 pci:v00001179d00000404*
  ID_MODEL_FROM_DATABASE=DVD Decoder card
 
@@ -46841,6 +47249,9 @@ pci:v0000125Bd00009100sv0000A000sd00006000*
 pci:v0000125Bd00009100sv0000A000sd00007000*
  ID_MODEL_FROM_DATABASE=AX99100 PCIe to Multi I/O Controller (Local Bus)
 
+pci:v0000125Bd00009100sv0000EA50sd00001C10*
+ ID_MODEL_FROM_DATABASE=AX99100 PCIe to Multi I/O Controller (RXi2-BP)
+
 pci:v0000125C*
  ID_VENDOR_FROM_DATABASE=Aurora Technologies, Inc.
 
@@ -47222,6 +47633,9 @@ pci:v0000126Fd00000910*
 pci:v0000126Fd00002262*
  ID_MODEL_FROM_DATABASE=SM2262/SM2262EN SSD Controller
 
+pci:v0000126Fd00002263*
+ ID_MODEL_FROM_DATABASE=SM2263EN/SM2263XT SSD Controller
+
 pci:v00001270*
  ID_VENDOR_FROM_DATABASE=Olympus Optical Co., Ltd.
 
@@ -47874,16 +48288,16 @@ pci:v00001282d00006585*
  ID_MODEL_FROM_DATABASE=DM562P V90 Modem
 
 pci:v00001282d00009009*
- ID_MODEL_FROM_DATABASE=Ethernet 100/10 MBit
+ ID_MODEL_FROM_DATABASE=DM9009 Ethernet Controller
 
 pci:v00001282d00009100*
  ID_MODEL_FROM_DATABASE=21x4x DEC-Tulip compatible 10/100 Ethernet
 
 pci:v00001282d00009102*
- ID_MODEL_FROM_DATABASE=21x4x DEC-Tulip compatible 10/100 Ethernet
+ ID_MODEL_FROM_DATABASE=DM9102 Fast Ethernet Controller
 
 pci:v00001282d00009102sv00000291sd00008212*
- ID_MODEL_FROM_DATABASE=21x4x DEC-Tulip compatible 10/100 Ethernet (DM9102A (DM9102AE, SM9102AF) Ethernet 100/10 MBit)
+ ID_MODEL_FROM_DATABASE=DM9102 Fast Ethernet Controller (DM9102A (DM9102AE, SM9102AF) Ethernet 100/10 MBit)
 
 pci:v00001282d00009132*
  ID_MODEL_FROM_DATABASE=Ethernet 100/10 MBit
@@ -47930,6 +48344,9 @@ pci:v00001283d00008889*
 pci:v00001283d00008892*
  ID_MODEL_FROM_DATABASE=IT8892E PCIe to PCI Bridge
 
+pci:v00001283d00008892sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=IT8892E PCIe to PCI Bridge (DH61CR motherboard)
+
 pci:v00001283d00008893*
  ID_MODEL_FROM_DATABASE=IT8893E PCIe to PCI Bridge
 
@@ -48596,6 +49013,9 @@ pci:v000012D8d00002404*
 pci:v000012D8d00002608*
  ID_MODEL_FROM_DATABASE=PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch
 
+pci:v000012D8d00002608sv0000EA50sd0000CC10*
+ ID_MODEL_FROM_DATABASE=PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch (RXi2-BP)
+
 pci:v000012D8d0000400A*
  ID_MODEL_FROM_DATABASE=PI7C9X442SL PCI Express Bridge Port
 
@@ -48626,6 +49046,9 @@ pci:v000012D8d00008152*
 pci:v000012D8d00008154*
  ID_MODEL_FROM_DATABASE=PI7C8154A/PI7C8154B/PI7C8154BI PCI-to-PCI Bridge
 
+pci:v000012D8d00008619*
+ ID_MODEL_FROM_DATABASE=PI7C9X2G1616PR PCIe2 16-Port/16-Lane Packet Switch
+
 pci:v000012D8d0000E110*
  ID_MODEL_FROM_DATABASE=PI7C9X110 PCI Express to PCI bridge
 
@@ -48728,6 +49151,9 @@ pci:v000012EB*
 pci:v000012EBd00000001*
  ID_MODEL_FROM_DATABASE=Vortex 1
 
+pci:v000012EBd00000001sv00000000sd00000300*
+ ID_MODEL_FROM_DATABASE=Vortex 1 (Terasound A3D PCI)
+
 pci:v000012EBd00000001sv0000104Dsd00008036*
  ID_MODEL_FROM_DATABASE=Vortex 1 (AU8820 Vortex Digital Audio Processor)
 
@@ -48744,7 +49170,7 @@ pci:v000012EBd00000001sv00001092sd00002200*
  ID_MODEL_FROM_DATABASE=Vortex 1 (Sonic Impact A3D)
 
 pci:v000012EBd00000001sv0000122Dsd00001002*
- ID_MODEL_FROM_DATABASE=Vortex 1 (AU8820 Vortex Digital Audio Processor)
+ ID_MODEL_FROM_DATABASE=Vortex 1 (SC 338-A3D)
 
 pci:v000012EBd00000001sv000012EBsd00000001*
  ID_MODEL_FROM_DATABASE=Vortex 1 (AU8820 Vortex Digital Audio Processor)
@@ -49602,7 +50028,7 @@ pci:v00001351*
  ID_VENDOR_FROM_DATABASE=Sonix Inc
 
 pci:v00001353*
- ID_VENDOR_FROM_DATABASE=Vierling Communication SAS
+ ID_VENDOR_FROM_DATABASE=dbeeSet Technology
 
 pci:v00001353d00000002*
  ID_MODEL_FROM_DATABASE=Proserver
@@ -49616,6 +50042,12 @@ pci:v00001353d00000004*
 pci:v00001353d00000005*
  ID_MODEL_FROM_DATABASE=PCI-FUT-S0
 
+pci:v00001353d00000006*
+ ID_MODEL_FROM_DATABASE=OTDU-1U (FPGA Zynq-7000)
+
+pci:v00001353d00000007*
+ ID_MODEL_FROM_DATABASE=OTDU-EX
+
 pci:v00001354*
  ID_VENDOR_FROM_DATABASE=Dwave System Inc
 
@@ -54101,8 +54533,14 @@ pci:v0000144Dd0000A800*
 pci:v0000144Dd0000A802*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM951/PM951
 
+pci:v0000144Dd0000A802sv0000144Dsd0000A801*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM951/PM951 (PM963 2.5" NVMe PCIe SSD)
+
 pci:v0000144Dd0000A804*
- ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM961/PM961
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM961/PM961/SM963
+
+pci:v0000144Dd0000A804sv0000144Dsd0000A801*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM961/PM961/SM963 (SM963 2.5" NVMe PCIe SSD)
 
 pci:v0000144Dd0000A808*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM981/PM981/PM983
@@ -54110,6 +54548,9 @@ pci:v0000144Dd0000A808*
 pci:v0000144Dd0000A808sv00001D49sd0000403B*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller SM981/PM981/PM983 (Thinksystem U.2 PM983 NVMe SSD)
 
+pci:v0000144Dd0000A80A*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller PM9A1/980PRO
+
 pci:v0000144Dd0000A820*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller 171X
 
@@ -55886,6 +56327,9 @@ pci:v000014E4d0000168Esv0000193Dsd00001003*
 pci:v000014E4d0000168Esv0000193Dsd00001006*
  ID_MODEL_FROM_DATABASE=NetXtreme II BCM57810 10 Gigabit Ethernet (530F-L)
 
+pci:v000014E4d0000168Esv0000193Dsd0000100F*
+ ID_MODEL_FROM_DATABASE=NetXtreme II BCM57810 10 Gigabit Ethernet (NIC-ETH522i-Mb-2x10G)
+
 pci:v000014E4d00001690*
  ID_MODEL_FROM_DATABASE=NetXtreme BCM57760 Gigabit Ethernet PCIe
 
@@ -55964,6 +56408,9 @@ pci:v000014E4d000016A1*
 pci:v000014E4d000016A1sv00001043sd0000866E*
  ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10 Gigabit Ethernet (PEB-10G/57840-2T 10GBase-T Network Adapter)
 
+pci:v000014E4d000016A1sv0000193Dsd0000100B*
+ ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10 Gigabit Ethernet (NIC-ETH521i-Mb-4x10G)
+
 pci:v000014E4d000016A2*
  ID_MODEL_FROM_DATABASE=BCM57840 NetXtreme II 10/20-Gigabit Ethernet
 
@@ -56546,6 +56993,9 @@ pci:v000014E4d00001806*
 pci:v000014E4d00001807*
  ID_MODEL_FROM_DATABASE=BCM5750X NetXtreme-E RDMA Virtual Function
 
+pci:v000014E4d00002711*
+ ID_MODEL_FROM_DATABASE=BCM2711 PCIe Bridge
+
 pci:v000014E4d00003352*
  ID_MODEL_FROM_DATABASE=BCM3352
 
@@ -59660,6 +60110,9 @@ pci:v000015B3d00001015sv000015B3sd00000025*
 pci:v000015B3d00001015sv0000193Dsd0000100A*
  ID_MODEL_FROM_DATABASE=MT27710 Family [ConnectX-4 Lx] (620F-B)
 
+pci:v000015B3d00001015sv0000193Dsd00001031*
+ ID_MODEL_FROM_DATABASE=MT27710 Family [ConnectX-4 Lx] (NIC-ETH640i-Mb-2x25G)
+
 pci:v000015B3d00001016*
  ID_MODEL_FROM_DATABASE=MT27710 Family [ConnectX-4 Lx Virtual Function]
 
@@ -59678,6 +60131,9 @@ pci:v000015B3d00001017sv000015B3sd00000020*
 pci:v000015B3d00001017sv000015B3sd00000068*
  ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (ConnectX®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN)
 
+pci:v000015B3d00001017sv0000193Dsd00001051*
+ ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5] (NIC-IB1040i-Mb-2P)
+
 pci:v000015B3d00001018*
  ID_MODEL_FROM_DATABASE=MT27800 Family [ConnectX-5 Virtual Function]
 
@@ -60030,10 +60486,10 @@ pci:v000015B7d00005001*
  ID_MODEL_FROM_DATABASE=WD Black NVMe SSD
 
 pci:v000015B7d00005002*
- ID_MODEL_FROM_DATABASE=WD Black 2018 / PC SN720 NVMe SSD
+ ID_MODEL_FROM_DATABASE=WD Black 2018/SN750 / PC SN720 NVMe SSD
 
 pci:v000015B7d00005003*
- ID_MODEL_FROM_DATABASE=WD Black 2018 / PC SN520 NVMe SSD
+ ID_MODEL_FROM_DATABASE=WD Blue SN500 / PC SN520 NVMe SSD
 
 pci:v000015B7d00005004*
  ID_MODEL_FROM_DATABASE=PC SN520 NVMe SSD
@@ -60042,7 +60498,7 @@ pci:v000015B7d00005005*
  ID_MODEL_FROM_DATABASE=PC SN520 NVMe SSD
 
 pci:v000015B7d00005006*
- ID_MODEL_FROM_DATABASE=WD Black 2019/PC SN750 NVMe SSD
+ ID_MODEL_FROM_DATABASE=WD Black SN750 / PC SN730 NVMe SSD
 
 pci:v000015B7d00005009*
  ID_MODEL_FROM_DATABASE=WD Blue SN550 NVMe SSD
@@ -60050,9 +60506,18 @@ pci:v000015B7d00005009*
 pci:v000015B7d00005009sv000015B7sd00005009*
  ID_MODEL_FROM_DATABASE=WD Blue SN550 NVMe SSD
 
+pci:v000015B7d0000500B*
+ ID_MODEL_FROM_DATABASE=PC SN530 NVMe SSD
+
+pci:v000015B7d0000500Bsv00001414sd0000500B*
+ ID_MODEL_FROM_DATABASE=PC SN530 NVMe SSD (Xbox Series X)
+
 pci:v000015B7d0000500D*
  ID_MODEL_FROM_DATABASE=WD Ultrastar DC SN340 NVMe SSD
 
+pci:v000015B7d00005011*
+ ID_MODEL_FROM_DATABASE=WD Black SN850
+
 pci:v000015B8*
  ID_VENDOR_FROM_DATABASE=ADDI-DATA GmbH
 
@@ -62396,6 +62861,18 @@ pci:v00001760d00000303*
 pci:v00001760d00000800*
  ID_MODEL_FROM_DATABASE=PCD8006 - PCIe digital Inputs/Outputs
 
+pci:v00001760d00000840*
+ ID_MODEL_FROM_DATABASE=PCA-8428 General-purpose multifunctional PCIe card with 8 analog inputs and 2 analog outputs
+
+pci:v00001760d00000841*
+ ID_MODEL_FROM_DATABASE=PCA-8429 General-purpose multifunctional PCIe card with 8 analog inputs
+
+pci:v00001760d00000842*
+ ID_MODEL_FROM_DATABASE=PCA-8438 General-purpose multifunctional PCIe card with 16 analog inputs and 2 analog outputs
+
+pci:v00001760d00000843*
+ ID_MODEL_FROM_DATABASE=PCA-8439 General-purpose multifunctional PCIe card with 16 analog inputs
+
 pci:v00001760d0000FF00*
  ID_MODEL_FROM_DATABASE=CTU CAN FD PCIe Card
 
@@ -62990,6 +63467,9 @@ pci:v000017CBd00000401*
 pci:v000017CBd00001000*
  ID_MODEL_FROM_DATABASE=QCS405 PCIe Root Complex
 
+pci:v000017CBd00001101*
+ ID_MODEL_FROM_DATABASE=QCA6390 Wireless Network Adapter [AX500-DBS (2x2)]
+
 pci:v000017CC*
  ID_VENDOR_FROM_DATABASE=NetChip Technology, Inc
 
@@ -65936,9 +66416,45 @@ pci:v000019E5d00001822sv000019E5sd0000D141*
 pci:v000019E5d00001822sv000019E5sd0000D146*
  ID_MODEL_FROM_DATABASE=Hi1822 Family (4*25GE) (Hi1822 SP585 (4*25GE))
 
+pci:v000019E5d00003714*
+ ID_MODEL_FROM_DATABASE=ES3000 V5 NVMe PCIe SSD
+
+pci:v000019E5d00003714sv000019E5sd00005312*
+ ID_MODEL_FROM_DATABASE=ES3000 V5 NVMe PCIe SSD (NVMe SSD ES3500P V5 2000GB 2.5" U.2)
+
 pci:v000019E5d0000371E*
  ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Bridge
 
+pci:v000019E5d00003754*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD
+
+pci:v000019E5d00003754sv000019E5sd00006122*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3600P V6 1600GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006123*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3600P V6 3200GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006124*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3600P V6 6400GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006141*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3800P V6 800GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006142*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3800P V6 1600GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006212*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3500P V6 1920GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006213*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3500P V6 3840GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006214*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3500P V6 7680GB 2.5" U.2)
+
+pci:v000019E5d00003754sv000019E5sd00006215*
+ ID_MODEL_FROM_DATABASE=ES3000 V6 NVMe PCIe SSD (NVMe SSD ES3500P V6 15360GB 2.5" U.2)
+
 pci:v000019E5d0000375E*
  ID_MODEL_FROM_DATABASE=Hi1822 Family Virtual Function
 
@@ -66218,6 +66734,9 @@ pci:v00001A4Ad00001000*
 pci:v00001A4Ad00001010*
  ID_MODEL_FROM_DATABASE=AMC EVR - Stockholm Timing Board
 
+pci:v00001A4Ad00001020*
+ ID_MODEL_FROM_DATABASE=PGPCard - Gen3 Cameralink Interface
+
 pci:v00001A4Ad00001030*
  ID_MODEL_FROM_DATABASE=PGPCard - Gen3 GIGe Interface
 
@@ -66893,6 +67412,9 @@ pci:v00001B36d0000000C*
 pci:v00001B36d0000000D*
  ID_MODEL_FROM_DATABASE=QEMU XHCI Host Controller
 
+pci:v00001B36d00000010*
+ ID_MODEL_FROM_DATABASE=QEMU NVM Express Controller
+
 pci:v00001B36d00000100*
  ID_MODEL_FROM_DATABASE=QXL paravirtual graphic card
 
@@ -67037,6 +67559,9 @@ pci:v00001B4Bd00009178*
 pci:v00001B4Bd0000917A*
  ID_MODEL_FROM_DATABASE=88SE9172 SATA III 6Gb/s RAID Controller
 
+pci:v00001B4Bd00009182*
+ ID_MODEL_FROM_DATABASE=88SE9182 PCIe 2.0 x2 2-port SATA 6 Gb/s Controller
+
 pci:v00001B4Bd00009183*
  ID_MODEL_FROM_DATABASE=88SS9183 PCIe SSD Controller
 
@@ -67049,41 +67574,44 @@ pci:v00001B4Bd000091A0*
 pci:v00001B4Bd000091A4*
  ID_MODEL_FROM_DATABASE=88SE912x IDE Controller
 
+pci:v00001B4Bd00009215*
+ ID_MODEL_FROM_DATABASE=88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
+
 pci:v00001B4Bd00009220*
  ID_MODEL_FROM_DATABASE=88SE9220 PCIe 2.0 x2 2-port SATA 6 Gb/s RAID Controller
 
 pci:v00001B4Bd00009230*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller
 
 pci:v00001B4Bd00009230sv00001028sd00001FD6*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (BOSS-S1 Adapter)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S1 Adapter)
 
 pci:v00001B4Bd00009230sv00001028sd00001FDF*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (BOSS-S1 Modular)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S1 Modular)
 
 pci:v00001B4Bd00009230sv00001028sd00001FE2*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (BOSS-S1 Adapter)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S1 Adapter)
 
 pci:v00001B4Bd00009230sv00001028sd00002010*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (BOSS-S2 Adapter)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (BOSS-S2 Adapter)
 
 pci:v00001B4Bd00009230sv00001D49sd00000300*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem M.2 with Mirroring Enablement Kit)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (ThinkSystem M.2 with Mirroring Enablement Kit)
 
 pci:v00001B4Bd00009230sv00001D49sd00000301*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem SR630 x16 PCIE with 4 SATA ports Riser)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (ThinkSystem SR630 x16 PCIE with 4 SATA ports Riser)
 
 pci:v00001B4Bd00009230sv00001D49sd00000302*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem SE350 M.2 SATA 4-Bay Data RAID Mirroring Enablement Kit)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (ThinkSystem SE350 M.2 SATA 4-Bay Data RAID Mirroring Enablement Kit)
 
 pci:v00001B4Bd00009230sv00001D49sd00000303*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem SE350 M.2 SATA 4-Bay Data RAID Mirroring Enablement Kit)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (ThinkSystem SE350 M.2 SATA 4-Bay Data RAID Mirroring Enablement Kit)
 
 pci:v00001B4Bd00009230sv00001D49sd00000304*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem M.2 SATA 2-Bay RAID Enablement Kit)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (ThinkSystem M.2 SATA 2-Bay RAID Enablement Kit)
 
 pci:v00001B4Bd00009230sv00001D49sd00000305*
- ID_MODEL_FROM_DATABASE=88SE9230 PCIe SATA 6Gb/s Controller (ThinkSystem 7mm SATA 2-Bay Rear RAID Enablement Kit)
+ ID_MODEL_FROM_DATABASE=88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller (ThinkSystem 7mm SATA 2-Bay Rear RAID Enablement Kit)
 
 pci:v00001B4Bd00009235*
  ID_MODEL_FROM_DATABASE=88SE9235 PCIe 2.0 x2 4-port SATA 6 Gb/s Controller
@@ -67229,6 +67757,9 @@ pci:v00001B96d00002404*
 pci:v00001B96d00002500*
  ID_MODEL_FROM_DATABASE=Ultrastar DC SN840 NVMe SSD
 
+pci:v00001B96d00002600*
+ ID_MODEL_FROM_DATABASE=Ultrastar DC ZN540 ZNS NVMe SSD
+
 pci:v00001B96d00003714*
  ID_MODEL_FROM_DATABASE=PC SN730 NVMe SSD
 
@@ -67688,6 +68219,9 @@ pci:v00001C5Cd00001327*
 pci:v00001C5Cd00001504*
  ID_MODEL_FROM_DATABASE=SC300 512GB M.2 2280 SATA Solid State Drive
 
+pci:v00001C5Cd00001527*
+ ID_MODEL_FROM_DATABASE=PC401 NVMe Solid State Drive 256GB
+
 pci:v00001C5Cd0000243B*
  ID_MODEL_FROM_DATABASE=PE6110 NVMe Solid State Drive
 
@@ -67704,16 +68238,25 @@ pci:v00001C5F*
  ID_VENDOR_FROM_DATABASE=Beijing Memblaze Technology Co. Ltd.
 
 pci:v00001C5Fd0000000D*
- ID_MODEL_FROM_DATABASE=PBlaze5 520/526 AIC
+ ID_MODEL_FROM_DATABASE=PBlaze5 520/526
 
 pci:v00001C5Fd0000003D*
- ID_MODEL_FROM_DATABASE=PBlaze5 920/926 AIC
+ ID_MODEL_FROM_DATABASE=PBlaze5 920/926
+
+pci:v00001C5Fd0000003E*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920
 
-pci:v00001C5Fd0000010D*
- ID_MODEL_FROM_DATABASE=PBlaze5 520/526 U.2
+pci:v00001C5Fd0000003Esv00001C5Fsd00000A31*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 3840GB 2.5" U.2)
 
-pci:v00001C5Fd0000013D*
- ID_MODEL_FROM_DATABASE=PBlaze5 920/926 U.2
+pci:v00001C5Fd0000003Esv00001C5Fsd00000A41*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 7680GB 2.5" U.2)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00004A31*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 3200GB 2.5" U.2)
+
+pci:v00001C5Fd0000003Esv00001C5Fsd00004A41*
+ ID_MODEL_FROM_DATABASE=PBlaze6 6920 (NVMe SSD PBlaze6 6920 6400GB 2.5" U.2)
 
 pci:v00001C5Fd00000540*
  ID_MODEL_FROM_DATABASE=PBlaze4 NVMe SSD
@@ -67940,6 +68483,9 @@ pci:v00001D05*
 pci:v00001D0F*
  ID_VENDOR_FROM_DATABASE=Amazon.com, Inc.
 
+pci:v00001D0Fd00008061*
+ ID_MODEL_FROM_DATABASE=NVMe EBS Controller
+
 pci:v00001D0Fd0000CD01*
  ID_MODEL_FROM_DATABASE=NVMe SSD Controller
 
@@ -68327,6 +68873,15 @@ pci:v00001D6Cd00001015*
 pci:v00001D6Cd00001016*
  ID_MODEL_FROM_DATABASE=AR-ARK-BBDEV-FX1 [Arkville 64B DPDK Baseband Device]
 
+pci:v00001D6Cd00001017*
+ ID_MODEL_FROM_DATABASE=AR-ARK-FX1 [Arkville 64B Multi-Homed Primary Endpoint]
+
+pci:v00001D6Cd00001018*
+ ID_MODEL_FROM_DATABASE=AR-ARK-FX1 [Arkville 64B Multi-Homed Secondary Endpoint]
+
+pci:v00001D6Cd00001019*
+ ID_MODEL_FROM_DATABASE=AR-ARK-FX1 [Arkville 64B Multi-Homed Tertiary Endpoint]
+
 pci:v00001D6Cd00004200*
  ID_MODEL_FROM_DATABASE=A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
 
@@ -68406,7 +68961,7 @@ pci:v00001D8F*
  ID_VENDOR_FROM_DATABASE=Enyx
 
 pci:v00001D93*
- ID_VENDOR_FROM_DATABASE=YADRO (KNS Group)
+ ID_VENDOR_FROM_DATABASE=YADRO
 
 pci:v00001D94*
  ID_VENDOR_FROM_DATABASE=Chengdu Haiguang IC Design Co., Ltd.
@@ -68571,10 +69126,10 @@ pci:v00001DD8d00001000sv00001DD8sd00004002*
  ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (Naples 25Gb 2-port SFP28 x8 4GB)
 
 pci:v00001DD8d00001000sv00001DD8sd00004007*
- ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSP DSC-25 10/25G 2p OCP Card)
+ ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSP DSC-25 Ent 10/25G OCP3 Card)
 
 pci:v00001DD8d00001000sv00001DD8sd00004008*
- ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+ ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSP DSC-25 10/25G 2p SFP28 Card)
 
 pci:v00001DD8d00001000sv00001DD8sd0000400A*
  ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card)
@@ -68583,7 +69138,10 @@ pci:v00001DD8d00001000sv00001DD8sd0000400C*
  ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001000sv00001DD8sd0000400D*
- ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSP DSC-100 100G 2p QSFP28 Card)
+ ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSP DSC-100 Ent 100Gb Card)
+
+pci:v00001DD8d00001000sv00001DD8sd0000400E*
+ ID_MODEL_FROM_DATABASE=DSC Capri Upstream Port (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001001*
  ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port
@@ -68598,10 +69156,10 @@ pci:v00001DD8d00001001sv00001DD8sd00004002*
  ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (Naples 25Gb 2-port SFP28 x8 4GB)
 
 pci:v00001DD8d00001001sv00001DD8sd00004007*
- ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSP DSC-25 10/25G 2p OCP Card)
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSP DSC-25 Ent 10/25G OCP3 Card)
 
 pci:v00001DD8d00001001sv00001DD8sd00004008*
- ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSP DSC-25 10/25G 2p SFP28 Card)
 
 pci:v00001DD8d00001001sv00001DD8sd0000400A*
  ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card)
@@ -68610,7 +69168,10 @@ pci:v00001DD8d00001001sv00001DD8sd0000400C*
  ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001001sv00001DD8sd0000400D*
- ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSP DSC-100 100G 2p QSFP28 Card)
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSP DSC-100 Ent 100Gb Card)
+
+pci:v00001DD8d00001001sv00001DD8sd0000400E*
+ ID_MODEL_FROM_DATABASE=DSC Virtual Downstream Port (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001002*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller
@@ -68625,10 +69186,10 @@ pci:v00001DD8d00001002sv00001DD8sd00004002*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (Naples 25Gb 2-port SFP28 x8 4GB)
 
 pci:v00001DD8d00001002sv00001DD8sd00004007*
- ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSP DSC-25 10/25G 2p OCP Card)
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSP DSC-25 Ent 10/25G OCP3 Card)
 
 pci:v00001DD8d00001002sv00001DD8sd00004008*
- ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSP DSC-25 10/25G 2p SFP28 Card)
 
 pci:v00001DD8d00001002sv00001DD8sd0000400A*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card)
@@ -68637,7 +69198,10 @@ pci:v00001DD8d00001002sv00001DD8sd0000400C*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001002sv00001DD8sd0000400D*
- ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSP DSC-100 100G 2p QSFP28 Card)
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSP DSC-100 Ent 100Gb Card)
+
+pci:v00001DD8d00001002sv00001DD8sd0000400E*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001003*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF
@@ -68652,10 +69216,10 @@ pci:v00001DD8d00001003sv00001DD8sd00004002*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (Naples 25Gb 2-port SFP28 x8 4GB)
 
 pci:v00001DD8d00001003sv00001DD8sd00004007*
- ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSP DSC-25 10/25G 2p OCP Card)
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSP DSC-25 Ent 10/25G OCP3 Card)
 
 pci:v00001DD8d00001003sv00001DD8sd00004008*
- ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSP DSC-25 10/25G 2p SFP28 Card)
 
 pci:v00001DD8d00001003sv00001DD8sd0000400A*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card)
@@ -68664,7 +69228,10 @@ pci:v00001DD8d00001003sv00001DD8sd0000400C*
  ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001003sv00001DD8sd0000400D*
- ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSP DSC-100 100G 2p QSFP28 Card)
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSP DSC-100 Ent 100Gb Card)
+
+pci:v00001DD8d00001003sv00001DD8sd0000400E*
+ ID_MODEL_FROM_DATABASE=DSC Ethernet Controller VF (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001004*
  ID_MODEL_FROM_DATABASE=DSC Management Controller
@@ -68679,10 +69246,10 @@ pci:v00001DD8d00001004sv00001DD8sd00004002*
  ID_MODEL_FROM_DATABASE=DSC Management Controller (Naples 25Gb 2-port SFP28 x8 4GB)
 
 pci:v00001DD8d00001004sv00001DD8sd00004007*
- ID_MODEL_FROM_DATABASE=DSC Management Controller (DSP DSC-25 10/25G 2p OCP Card)
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSP DSC-25 Ent 10/25G OCP3 Card)
 
 pci:v00001DD8d00001004sv00001DD8sd00004008*
- ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSP DSC-25 10/25G 2p SFP28 Card)
 
 pci:v00001DD8d00001004sv00001DD8sd0000400A*
  ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card)
@@ -68691,7 +69258,10 @@ pci:v00001DD8d00001004sv00001DD8sd0000400C*
  ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001004sv00001DD8sd0000400D*
- ID_MODEL_FROM_DATABASE=DSC Management Controller (DSP DSC-100 100G 2p QSFP28 Card)
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSP DSC-100 Ent 100Gb Card)
+
+pci:v00001DD8d00001004sv00001DD8sd0000400E*
+ ID_MODEL_FROM_DATABASE=DSC Management Controller (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001007*
  ID_MODEL_FROM_DATABASE=DSC Storage Accelerator
@@ -68706,10 +69276,10 @@ pci:v00001DD8d00001007sv00001DD8sd00004002*
  ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (Naples 25Gb 2-port SFP28 x8 4GB)
 
 pci:v00001DD8d00001007sv00001DD8sd00004007*
- ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSP DSC-25 10/25G 2p OCP Card)
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSP DSC-25 Ent 10/25G OCP3 Card)
 
 pci:v00001DD8d00001007sv00001DD8sd00004008*
- ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC)
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSP DSC-25 10/25G 2p SFP28 Card)
 
 pci:v00001DD8d00001007sv00001DD8sd0000400A*
  ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card)
@@ -68718,13 +69288,16 @@ pci:v00001DD8d00001007sv00001DD8sd0000400C*
  ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DD8d00001007sv00001DD8sd0000400D*
- ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSP DSC-100 100G 2p QSFP28 Card)
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSP DSC-100 Ent 100Gb Card)
+
+pci:v00001DD8d00001007sv00001DD8sd0000400E*
+ ID_MODEL_FROM_DATABASE=DSC Storage Accelerator (DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card)
 
 pci:v00001DE0*
  ID_VENDOR_FROM_DATABASE=Groq
 
 pci:v00001DE0d00000000*
- ID_MODEL_FROM_DATABASE=Q100 Tensor Streaming Processor
+ ID_MODEL_FROM_DATABASE=TSP100 Tensor Streaming Processor
 
 pci:v00001DE1*
  ID_VENDOR_FROM_DATABASE=Tekram Technology Co.,Ltd.
@@ -68783,6 +69356,60 @@ pci:v00001DEFd0000E00B*
 pci:v00001DEFd0000E00C*
  ID_MODEL_FROM_DATABASE=eMAG PCI Express Root Port 7
 
+pci:v00001DEFd0000E100*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Complex A
+
+pci:v00001DEFd0000E101*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a0
+
+pci:v00001DEFd0000E102*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a1
+
+pci:v00001DEFd0000E103*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a2
+
+pci:v00001DEFd0000E104*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a3
+
+pci:v00001DEFd0000E105*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a4
+
+pci:v00001DEFd0000E106*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a5
+
+pci:v00001DEFd0000E107*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a6
+
+pci:v00001DEFd0000E108*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port a7
+
+pci:v00001DEFd0000E110*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Complex B
+
+pci:v00001DEFd0000E111*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b0
+
+pci:v00001DEFd0000E112*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b1
+
+pci:v00001DEFd0000E113*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b2
+
+pci:v00001DEFd0000E114*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b3
+
+pci:v00001DEFd0000E115*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b4
+
+pci:v00001DEFd0000E116*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b5
+
+pci:v00001DEFd0000E117*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b6
+
+pci:v00001DEFd0000E118*
+ ID_MODEL_FROM_DATABASE=Altra PCI Express Root Port b7
+
 pci:v00001DF3*
  ID_VENDOR_FROM_DATABASE=Ethernity Networks
 
@@ -68987,6 +69614,9 @@ pci:v00001E36d00000003*
 pci:v00001E36d00008011*
  ID_MODEL_FROM_DATABASE=I10 [CloudBlazer]
 
+pci:v00001E36d00008012*
+ ID_MODEL_FROM_DATABASE=I10L [CloudBlazer]
+
 pci:v00001E38*
  ID_VENDOR_FROM_DATABASE=Blaize, Inc
 
@@ -69102,10 +69732,10 @@ pci:v00001E4C*
  ID_VENDOR_FROM_DATABASE=GSI Technology
 
 pci:v00001E4Cd00000010*
- ID_MODEL_FROM_DATABASE=APU [Leda-G]
+ ID_MODEL_FROM_DATABASE=APU [Leda]
 
 pci:v00001E4Cd00000010sv00001E4Csd00000120*
- ID_MODEL_FROM_DATABASE=APU [Leda-G] (SE120)
+ ID_MODEL_FROM_DATABASE=APU [Leda] (SE120)
 
 pci:v00001E57*
  ID_VENDOR_FROM_DATABASE=Beijing Panyi Technology Co., Ltd
@@ -69116,6 +69746,12 @@ pci:v00001E57d00000100*
 pci:v00001E57d00000100sv00000000sd00000100*
  ID_MODEL_FROM_DATABASE=The device has already been deleted. (PY8800 64GB Accelerator)
 
+pci:v00001E60*
+ ID_VENDOR_FROM_DATABASE=Hailo Technologies Ltd.
+
+pci:v00001E60d00002864*
+ ID_MODEL_FROM_DATABASE=Hailo-8 AI Processor
+
 pci:v00001E6B*
  ID_VENDOR_FROM_DATABASE=Axiado Corp.
 
@@ -69146,9 +69782,21 @@ pci:v00001E94*
 pci:v00001E95*
  ID_VENDOR_FROM_DATABASE=Solid State Storage Technology Corporation
 
+pci:v00001EA0*
+ ID_VENDOR_FROM_DATABASE=Tencent Technology (Shenzhen) Company Limited
+
+pci:v00001EA0d00002A16*
+ ID_MODEL_FROM_DATABASE=Cloud Intelligent Inference Controller
+
 pci:v00001EAB*
  ID_VENDOR_FROM_DATABASE=Hefei DATANG Storage Technology Co.,LTD.
 
+pci:v00001EABd0000300A*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller 300A
+
+pci:v00001EABd0000300B*
+ ID_MODEL_FROM_DATABASE=NVMe SSD Controller 300B
+
 pci:v00001EAE*
  ID_VENDOR_FROM_DATABASE=XFX Limited
 
@@ -69158,6 +69806,18 @@ pci:v00001EB1*
 pci:v00001EB1d00001001*
  ID_MODEL_FROM_DATABASE=Video Accelerator
 
+pci:v00001ED8*
+ ID_VENDOR_FROM_DATABASE=Digiteq Automotive
+
+pci:v00001ED8d00000101*
+ ID_MODEL_FROM_DATABASE=FG4 PCIe Frame Grabber
+
+pci:v00001ED9*
+ ID_VENDOR_FROM_DATABASE=Myrtle.ai
+
+pci:v00001EE9*
+ ID_VENDOR_FROM_DATABASE=SUSE LLC
+
 pci:v00001FC0*
  ID_VENDOR_FROM_DATABASE=Ascom (Finland) Oy
 
@@ -69395,9 +70055,18 @@ pci:v00002348d00002010*
 pci:v00002646*
  ID_VENDOR_FROM_DATABASE=Kingston Technology Company, Inc.
 
+pci:v00002646d00000010*
+ ID_MODEL_FROM_DATABASE=HyperX Predator PCIe AHCI SSD
+
 pci:v00002646d00002263*
  ID_MODEL_FROM_DATABASE=A2000 NVMe SSD
 
+pci:v00002646d00005008*
+ ID_MODEL_FROM_DATABASE=U-SNS8154P3 NVMe SSD
+
+pci:v00002646d0000500D*
+ ID_MODEL_FROM_DATABASE=OM3PDP3 NVMe SSD
+
 pci:v0000270B*
  ID_VENDOR_FROM_DATABASE=Xantel Corporation
 
@@ -71624,6 +72293,9 @@ pci:v00008086d00000100sv00001028sd000004AA*
 pci:v00008086d00000100sv00001043sd0000844D*
  ID_MODEL_FROM_DATABASE=2nd Generation Core Processor Family DRAM Controller (P8P67/P8H67 Series Motherboard)
 
+pci:v00008086d00000100sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=2nd Generation Core Processor Family DRAM Controller (DH61CR motherboard)
+
 pci:v00008086d00000101*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port
 
@@ -71861,6 +72533,9 @@ pci:v00008086d00000172*
 pci:v00008086d00000176*
  ID_MODEL_FROM_DATABASE=3rd Gen Core processor Graphics Controller
 
+pci:v00008086d00000201*
+ ID_MODEL_FROM_DATABASE=Arctic Sound
+
 pci:v00008086d00000284*
  ID_MODEL_FROM_DATABASE=Comet Lake PCH-LP LPC Premium Controller/eSPI Controller
 
@@ -71873,6 +72548,27 @@ pci:v00008086d000002A4*
 pci:v00008086d000002A6*
  ID_MODEL_FROM_DATABASE=Comet Lake North Peak
 
+pci:v00008086d000002B0*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #9
+
+pci:v00008086d000002B1*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #10
+
+pci:v00008086d000002B3*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #12
+
+pci:v00008086d000002B4*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #13
+
+pci:v00008086d000002B8*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #1
+
+pci:v00008086d000002BC*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCI Express Root Port #5
+
+pci:v00008086d000002C5*
+ ID_MODEL_FROM_DATABASE=Comet Lake Serial IO I2C Host Controller
+
 pci:v00008086d000002C8*
  ID_MODEL_FROM_DATABASE=Comet Lake PCH-LP cAVS
 
@@ -71888,6 +72584,9 @@ pci:v00008086d000002E8*
 pci:v00008086d000002E9*
  ID_MODEL_FROM_DATABASE=Comet Lake Serial IO I2C Host Controller
 
+pci:v00008086d000002EA*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH-LP LPSS: I2C Controller #2
+
 pci:v00008086d000002ED*
  ID_MODEL_FROM_DATABASE=Comet Lake PCH-LP USB 3.1 xHCI Host Controller
 
@@ -72005,6 +72704,9 @@ pci:v00008086d00000412*
 pci:v00008086d00000412sv0000103Csd00001998*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (EliteDesk 800 G1)
 
+pci:v00008086d00000412sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (ThinkCentre E73)
+
 pci:v00008086d00000412sv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller (ThinkCentre M83)
 
@@ -73224,43 +73926,46 @@ pci:v00008086d00000B27*
  ID_MODEL_FROM_DATABASE=Thunderbolt 4 USB Controller [Goshen Ridge 2020]
 
 pci:v00008086d00000B60*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller]
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller]
 
 pci:v00008086d00000B60sv00001028sd00002060*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe SED MU U.2 1.6TB (P5600))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED MU U.2 1.6TB (P5600))
 
 pci:v00008086d00000B60sv00001028sd00002061*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe SED MU U.2 3.2TB (P5600))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED MU U.2 3.2TB (P5600))
 
 pci:v00008086d00000B60sv00001028sd00002062*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe SED MU U.2 6.4TB (P5600))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED MU U.2 6.4TB (P5600))
 
 pci:v00008086d00000B60sv00001028sd00002064*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe SED RI U.2 1.92TB (P5500))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED RI U.2 1.92TB (P5500))
 
 pci:v00008086d00000B60sv00001028sd00002065*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe SED RI U.2 3.84TB (P5500))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED RI U.2 3.84TB (P5500))
 
 pci:v00008086d00000B60sv00001028sd00002066*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe SED RI U.2 7.68TB (P5500))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe SED RI U.2 7.68TB (P5500))
 
 pci:v00008086d00000B60sv00001028sd0000209E*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe MU U.2 1.6TB (P5600))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe MU U.2 1.6TB (P5600))
 
 pci:v00008086d00000B60sv00001028sd0000209F*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe MU U.2 3.2TB (P5600))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe MU U.2 3.2TB (P5600))
 
 pci:v00008086d00000B60sv00001028sd00002100*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe MU U.2 6.4TB (P5600))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe MU U.2 6.4TB (P5600))
 
 pci:v00008086d00000B60sv00001028sd00002102*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe RI U.2 1.92TB (P5500))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe RI U.2 1.92TB (P5500))
 
 pci:v00008086d00000B60sv00001028sd00002103*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe RI U.2 3.84TB (P5500))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe RI U.2 3.84TB (P5500))
 
 pci:v00008086d00000B60sv00001028sd00002104*
- ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Beta Rock Controller] (NVMe RI U.2 7.68TB (P5500))
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe RI U.2 7.68TB (P5500))
+
+pci:v00008086d00000B60sv00008086sd00008008*
+ ID_MODEL_FROM_DATABASE=NVMe DC SSD [3DNAND, Sentinel Rock Controller] (NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510))
 
 pci:v00008086d00000BE0*
  ID_MODEL_FROM_DATABASE=Atom Processor D2xxx/N2xxx Integrated Graphics Controller
@@ -73346,6 +74051,9 @@ pci:v00008086d00000C00*
 pci:v00008086d00000C00sv0000103Csd00001998*
  ID_MODEL_FROM_DATABASE=4th Gen Core Processor DRAM Controller (EliteDesk 800 G1)
 
+pci:v00008086d00000C00sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=4th Gen Core Processor DRAM Controller (ThinkCentre E73)
+
 pci:v00008086d00000C00sv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=4th Gen Core Processor DRAM Controller (ThinkCentre M83)
 
@@ -75704,6 +76412,15 @@ pci:v00008086d00001132sv00008086sd00004541*
 pci:v00008086d00001132sv00008086sd00004557*
  ID_MODEL_FROM_DATABASE=82815 Chipset Graphics Controller (CGC) (D815EGEW Mainboard)
 
+pci:v00008086d00001136*
+ ID_MODEL_FROM_DATABASE=Thunderbolt 4 Bridge [Maple Ridge 4C 2020]
+
+pci:v00008086d00001137*
+ ID_MODEL_FROM_DATABASE=Thunderbolt 4 NHI [Maple Ridge 4C 2020]
+
+pci:v00008086d00001138*
+ ID_MODEL_FROM_DATABASE=Thunderbolt 4 USB Controller [Maple Ridge 4C 2020]
+
 pci:v00008086d00001161*
  ID_MODEL_FROM_DATABASE=82806AA PCI64 Hub Advanced Programmable Interrupt Controller
 
@@ -76403,6 +77120,9 @@ pci:v00008086d00001503sv00001043sd0000849C*
 pci:v00008086d00001503sv000010CFsd0000161C*
  ID_MODEL_FROM_DATABASE=82579V Gigabit Network Connection (LIFEBOOK E752)
 
+pci:v00008086d00001503sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=82579V Gigabit Network Connection (DH61CR motherboard)
+
 pci:v00008086d00001507*
  ID_MODEL_FROM_DATABASE=Ethernet Express Module X520-P2
 
@@ -77060,6 +77780,9 @@ pci:v00008086d0000156Fsv00001028sd000006DC*
 pci:v00008086d0000156Fsv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Ethernet Connection I219-LM (EliteBook 840 G3)
 
+pci:v00008086d0000156Fsv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Ethernet Connection I219-LM (ThinkPad T570)
+
 pci:v00008086d00001570*
  ID_MODEL_FROM_DATABASE=Ethernet Connection I219-V
 
@@ -77114,6 +77837,12 @@ pci:v00008086d00001572sv000017AAsd00004001*
 pci:v00008086d00001572sv000017AAsd00004002*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (ThinkServer X710-2 AnyFabric for 10GbE SFP+)
 
+pci:v00008086d00001572sv0000193Dsd00001020*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (NIC-ETH561F-sL-4x10G)
+
+pci:v00008086d00001572sv0000193Dsd00001021*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (NIC-ETH561F-sL-2x10G)
+
 pci:v00008086d00001572sv000019E5sd0000D11C*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE SFP+ (Ethernet 2-port X710 10Gb SFP+ Adapter SP330)
 
@@ -77213,6 +77942,9 @@ pci:v00008086d00001578*
 pci:v00008086d0000157B*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection
 
+pci:v00008086d0000157Bsv0000EA50sd0000CC10*
+ ID_MODEL_FROM_DATABASE=I210 Gigabit Network Connection (RXi2-BP)
+
 pci:v00008086d0000157C*
  ID_MODEL_FROM_DATABASE=I210 Gigabit Backplane Connection
 
@@ -77249,6 +77981,9 @@ pci:v00008086d00001581sv00001590sd00000000*
 pci:v00008086d00001581sv00001590sd000000F8*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE backplane (Ethernet 2-port 563i Adapter)
 
+pci:v00008086d00001581sv0000193Dsd0000100E*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE backplane (NIC-ETH561i-Mb-4x10G)
+
 pci:v00008086d00001581sv00008086sd00000000*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GbE backplane (Ethernet Converged Network Adapter XL710-Q2)
 
@@ -77477,6 +78212,9 @@ pci:v00008086d00001592*
 pci:v00008086d00001592sv00001137sd000002BF*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (E810CQDA2 2x100 GbE QSFP28 PCIe NIC)
 
+pci:v00008086d00001592sv00008086sd00000001*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q1)
+
 pci:v00008086d00001592sv00008086sd00000002*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-C-Q2)
 
@@ -77501,6 +78239,9 @@ pci:v00008086d00001592sv00008086sd0000000B*
 pci:v00008086d00001592sv00008086sd0000000C*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet 100G 2P E810-C OCP)
 
+pci:v00008086d00001592sv00008086sd0000000D*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for QSFP (Ethernet Network Adapter E810-L-Q2 for OCP 3.0)
+
 pci:v00008086d00001593*
  ID_MODEL_FROM_DATABASE=Ethernet Controller E810-C for SFP
 
@@ -77840,6 +78581,12 @@ pci:v00008086d000015FFsv00001137sd000002C1*
 pci:v00008086d000015FFsv00001137sd000002C2*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (X710T4LG 4x10 GbE RJ45 PCIe NIC)
 
+pci:v00008086d000015FFsv00001137sd000002D9*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T2L OCP 3.0)
+
+pci:v00008086d000015FFsv00001137sd000002DA*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-T4L OCP 3.0)
+
 pci:v00008086d000015FFsv00008086sd00000000*
  ID_MODEL_FROM_DATABASE=Ethernet Controller X710 for 10GBASE-T (Ethernet Network Adapter X710-TL)
 
@@ -78036,7 +78783,7 @@ pci:v00008086d00001900*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 
 pci:v00008086d00001901*
- ID_MODEL_FROM_DATABASE=6th-9th Gen Core Processor PCIe Controller (x16)
+ ID_MODEL_FROM_DATABASE=6th-10th Gen Core Processor PCIe Controller (x16)
 
 pci:v00008086d00001902*
  ID_MODEL_FROM_DATABASE=HD Graphics 510
@@ -78053,6 +78800,9 @@ pci:v00008086d00001903sv00001028sd000006DC*
 pci:v00008086d00001903sv00001028sd000006E4*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (XPS 15 9550)
 
+pci:v00008086d00001903sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00001903sv0000103Csd0000825B*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem (OMEN-17-w001nv)
 
@@ -78071,6 +78821,9 @@ pci:v00008086d00001904sv00001028sd000006F3*
 pci:v00008086d00001904sv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers (EliteBook 840 G3)
 
+pci:v00008086d00001904sv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers (ThinkPad T570)
+
 pci:v00008086d00001904sv000017AAsd0000382A*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers (B51-80 Laptop)
 
@@ -78095,6 +78848,9 @@ pci:v00008086d0000190C*
 pci:v00008086d0000190Csv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers (Latitude 7275 tablet)
 
+pci:v00008086d0000190Csv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers (Latitude 11 5175 2-in-1)
+
 pci:v00008086d0000190F*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -78137,6 +78893,9 @@ pci:v00008086d00001916sv00001028sd000006F3*
 pci:v00008086d00001916sv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Skylake GT2 [HD Graphics 520] (EliteBook 840 G3)
 
+pci:v00008086d00001916sv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Skylake GT2 [HD Graphics 520] (ThinkPad T570)
+
 pci:v00008086d00001918*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -78146,6 +78905,9 @@ pci:v00008086d00001919*
 pci:v00008086d00001919sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit (Latitude 7275 tablet)
 
+pci:v00008086d00001919sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit (Latitude 11 5175 2-in-1)
+
 pci:v00008086d0000191B*
  ID_MODEL_FROM_DATABASE=HD Graphics 530
 
@@ -78164,6 +78926,9 @@ pci:v00008086d0000191E*
 pci:v00008086d0000191Esv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=HD Graphics 515 (Latitude 7275 tablet)
 
+pci:v00008086d0000191Esv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=HD Graphics 515 (Latitude 11 5175 2-in-1)
+
 pci:v00008086d0000191F*
  ID_MODEL_FROM_DATABASE=Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
 
@@ -78497,6 +79262,9 @@ pci:v00008086d00001C02sv00001028sd000004AA*
 pci:v00008086d00001C02sv00001043sd0000844D*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller (P8 series motherboard)
 
+pci:v00008086d00001C02sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller (DH61CR motherboard)
+
 pci:v00008086d00001C02sv00008086sd00007270*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller (Server Board S1200BT Family)
 
@@ -78644,6 +79412,9 @@ pci:v00008086d00001C20sv000017AAsd000021CF*
 pci:v00008086d00001C20sv00008086sd00002008*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family High Definition Audio Controller (DQ67SW board)
 
+pci:v00008086d00001C20sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family High Definition Audio Controller (DH61CR motherboard)
+
 pci:v00008086d00001C20sv00008086sd00007270*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family High Definition Audio Controller (Apple MacBookPro8,2 [Core i7, 15", 2011])
 
@@ -78668,6 +79439,9 @@ pci:v00008086d00001C22sv00001043sd0000844D*
 pci:v00008086d00001C22sv000017AAsd000021CF*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family SMBus Controller (ThinkPad T520)
 
+pci:v00008086d00001C22sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family SMBus Controller (DH61CR motherboard)
+
 pci:v00008086d00001C22sv00008086sd00007270*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family SMBus Controller (Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2)
 
@@ -78698,6 +79472,9 @@ pci:v00008086d00001C26sv00001043sd0000844D*
 pci:v00008086d00001C26sv000017AAsd000021CF*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (ThinkPad T520)
 
+pci:v00008086d00001C26sv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (DH61CR motherboard)
+
 pci:v00008086d00001C26sv00008086sd00007270*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #1 (Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2)
 
@@ -78734,6 +79511,9 @@ pci:v00008086d00001C2Dsv00001043sd0000844D*
 pci:v00008086d00001C2Dsv000017AAsd000021CF*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (ThinkPad T520)
 
+pci:v00008086d00001C2Dsv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (DH61CR motherboard)
+
 pci:v00008086d00001C2Dsv00008086sd00007270*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family USB Enhanced Host Controller #2 (Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2)
 
@@ -78764,6 +79544,9 @@ pci:v00008086d00001C3Asv00001043sd0000844D*
 pci:v00008086d00001C3Asv000017AAsd000021CF*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family MEI Controller #1 (ThinkPad T520)
 
+pci:v00008086d00001C3Asv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family MEI Controller #1 (DH61CR motherboard)
+
 pci:v00008086d00001C3Asv00008086sd00007270*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family MEI Controller #1 (Apple MacBookPro8,2 [Core i7, 15", 2011])
 
@@ -78893,6 +79676,9 @@ pci:v00008086d00001C5B*
 pci:v00008086d00001C5C*
  ID_MODEL_FROM_DATABASE=H61 Express Chipset LPC Controller
 
+pci:v00008086d00001C5Csv00008086sd0000200D*
+ ID_MODEL_FROM_DATABASE=H61 Express Chipset LPC Controller (DH61CR motherboard)
+
 pci:v00008086d00001C5D*
  ID_MODEL_FROM_DATABASE=6 Series/C200 Series Chipset Family LPC Controller
 
@@ -80282,6 +81068,9 @@ pci:v00008086d00002442sv00008086sd00004532*
 pci:v00008086d00002442sv00008086sd00004557*
  ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (D815EGEW Mainboard)
 
+pci:v00008086d00002442sv00008086sd00004D44*
+ ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (D850EMV2 motherboard)
+
 pci:v00008086d00002442sv00008086sd00005744*
  ID_MODEL_FROM_DATABASE=82801BA/BAM UHCI USB 1.1 Controller #1 (S845WD1-E mainboard)
 
@@ -80405,6 +81194,9 @@ pci:v00008086d00002445sv00008086sd00004557*
 pci:v00008086d00002445sv00008086sd00004656*
  ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (Desktop Board D815EFV)
 
+pci:v00008086d00002445sv00008086sd00004D44*
+ ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Audio Controller (D850EMV2 motherboard)
+
 pci:v00008086d00002446*
  ID_MODEL_FROM_DATABASE=82801BA/BAM AC'97 Modem Controller
 
@@ -80627,6 +81419,9 @@ pci:v00008086d0000244Bsv00008086sd00004532*
 pci:v00008086d0000244Bsv00008086sd00004557*
  ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (D815EGEW Mainboard)
 
+pci:v00008086d0000244Bsv00008086sd00004D44*
+ ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (D850EMV2 motherboard)
+
 pci:v00008086d0000244Bsv00008086sd00005744*
  ID_MODEL_FROM_DATABASE=82801BA IDE U100 Controller (S845WD1-E mainboard)
 
@@ -82481,6 +83276,9 @@ pci:v00008086d00002590sv0000103Csd00000944*
 pci:v00008086d00002590sv0000103Csd0000099C*
  ID_MODEL_FROM_DATABASE=Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (NX6110/NC6120)
 
+pci:v00008086d00002590sv00001043sd000082D9*
+ ID_MODEL_FROM_DATABASE=Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (Asus Eee PC 900)
+
 pci:v00008086d00002590sv0000104Dsd000081B7*
  ID_MODEL_FROM_DATABASE=Mobile 915GM/PM/GMS/910GML Express Processor to DRAM Controller (Vaio VGN-S3XP)
 
@@ -86687,6 +87485,9 @@ pci:v00008086d00002A00sv0000103Csd000030C0*
 pci:v00008086d00002A00sv0000103Csd000030C1*
  ID_MODEL_FROM_DATABASE=Mobile PM965/GM965/GL960 Memory Controller Hub (Compaq 6910p)
 
+pci:v00008086d00002A00sv0000103Csd000030C5*
+ ID_MODEL_FROM_DATABASE=Mobile PM965/GM965/GL960 Memory Controller Hub (Compaq 8510p)
+
 pci:v00008086d00002A00sv0000103Csd000030CC*
  ID_MODEL_FROM_DATABASE=Mobile PM965/GM965/GL960 Memory Controller Hub (Pavilion dv6700)
 
@@ -86852,6 +87653,9 @@ pci:v00008086d00002A41sv0000E4BFsd0000CC4D*
 pci:v00008086d00002A42*
  ID_MODEL_FROM_DATABASE=Mobile 4 Series Chipset Integrated Graphics Controller
 
+pci:v00008086d00002A42sv00001028sd000002AA*
+ ID_MODEL_FROM_DATABASE=Mobile 4 Series Chipset Integrated Graphics Controller (Dell Inspiron 1545)
+
 pci:v00008086d00002A42sv000017AAsd00002112*
  ID_MODEL_FROM_DATABASE=Mobile 4 Series Chipset Integrated Graphics Controller (ThinkPad T400)
 
@@ -88092,10 +88896,10 @@ pci:v00008086d00003166sv00008086sd00004210*
  ID_MODEL_FROM_DATABASE=Dual Band Wireless-AC 3165 Plus Bluetooth (Dual Band Wireless-AC 3165)
 
 pci:v00008086d00003184*
- ID_MODEL_FROM_DATABASE=UHD Graphics 605
+ ID_MODEL_FROM_DATABASE=GeminiLake [UHD Graphics 605]
 
 pci:v00008086d00003185*
- ID_MODEL_FROM_DATABASE=UHD Graphics 605
+ ID_MODEL_FROM_DATABASE=GeminiLake [UHD Graphics 600]
 
 pci:v00008086d0000318C*
  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
@@ -88124,6 +88928,12 @@ pci:v00008086d0000319A*
 pci:v00008086d000031A2*
  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Integrated Sensor Solution
 
+pci:v00008086d000031A8*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor USB 3.0 xHCI Controller
+
+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
 
@@ -88175,6 +88985,12 @@ pci:v00008086d000031DB*
 pci:v00008086d000031DC*
  ID_MODEL_FROM_DATABASE=AC 1550i Wireless
 
+pci:v00008086d000031E3*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor SATA Controller
+
+pci:v00008086d000031E8*
+ ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor LPC Controller
+
 pci:v00008086d000031EE*
  ID_MODEL_FROM_DATABASE=Celeron/Pentium Silver Processor Serial IO UART Host Controller
 
@@ -88430,6 +89246,9 @@ pci:v00008086d000034AB*
 pci:v00008086d000034B0*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP PCI Express Root Port #9
 
+pci:v00008086d000034B7*
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP PCI Express Root Port #16
+
 pci:v00008086d000034BC*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP PCI Express Root Port #5
 
@@ -88440,13 +89259,13 @@ pci:v00008086d000034C6*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP Serial IO I2c Controller #5
 
 pci:v00008086d000034C8*
- ID_MODEL_FROM_DATABASE=Smart Sound Technology Audio Controller
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP Smart Sound Technology Audio Controller
 
 pci:v00008086d000034D3*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP SATA Controller [AHCI mode]
 
 pci:v00008086d000034E0*
- ID_MODEL_FROM_DATABASE=Management Engine Interface
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP Management Engine
 
 pci:v00008086d000034E8*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP Serial IO I2C Controller #0
@@ -88463,12 +89282,18 @@ pci:v00008086d000034EB*
 pci:v00008086d000034ED*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP USB 3.1 xHCI Host Controller
 
+pci:v00008086d000034EF*
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP DRAM Controller
+
 pci:v00008086d000034F0*
  ID_MODEL_FROM_DATABASE=Killer Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)
 
 pci:v00008086d000034F8*
  ID_MODEL_FROM_DATABASE=Ice Lake-LP SD Controller
 
+pci:v00008086d000034FC*
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP Integrated Sensor Solution
+
 pci:v00008086d00003500*
  ID_MODEL_FROM_DATABASE=6311ESB/6321ESB PCI Express Upstream Port
 
@@ -90308,35 +91133,38 @@ pci:v00008086d00003E85*
 pci:v00008086d00003E89*
  ID_MODEL_FROM_DATABASE=8th Gen Core Processor PCIe Controller (x4)
 
+pci:v00008086d00003E90*
+ ID_MODEL_FROM_DATABASE=CoffeeLake-S GT1 [UHD Graphics 610]
+
 pci:v00008086d00003E91*
- ID_MODEL_FROM_DATABASE=8th Gen Core Processor Gaussian Mixture Model
+ ID_MODEL_FROM_DATABASE=CoffeeLake-S GT2 [UHD Graphics 630]
 
 pci:v00008086d00003E92*
- ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Desktop)
+ ID_MODEL_FROM_DATABASE=CometLake-S GT2 [UHD Graphics 630]
 
 pci:v00008086d00003E92sv00001028sd00000869*
- ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Desktop) (Vostro 3470)
+ ID_MODEL_FROM_DATABASE=CometLake-S GT2 [UHD Graphics 630] (Vostro 3470)
 
 pci:v00008086d00003E93*
- ID_MODEL_FROM_DATABASE=UHD Graphics 610
+ ID_MODEL_FROM_DATABASE=CoffeeLake-S GT1 [UHD Graphics 610]
 
 pci:v00008086d00003E96*
- ID_MODEL_FROM_DATABASE=HD Graphics P630
+ ID_MODEL_FROM_DATABASE=CoffeeLake-S GT2 [UHD Graphics P630]
 
 pci:v00008086d00003E98*
- ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Desktop 9 Series)
+ ID_MODEL_FROM_DATABASE=CoffeeLake-S GT2 [UHD Graphics 630]
 
 pci:v00008086d00003E9B*
- ID_MODEL_FROM_DATABASE=UHD Graphics 630 (Mobile)
+ ID_MODEL_FROM_DATABASE=CoffeeLake-H GT2 [UHD Graphics 630]
 
 pci:v00008086d00003EA0*
- ID_MODEL_FROM_DATABASE=UHD Graphics 620 (Whiskey Lake)
+ ID_MODEL_FROM_DATABASE=WhiskeyLake-U GT2 [UHD Graphics 620]
 
 pci:v00008086d00003EA0sv00001028sd0000089E*
- ID_MODEL_FROM_DATABASE=UHD Graphics 620 (Whiskey Lake) (Inspiron 5482)
+ ID_MODEL_FROM_DATABASE=WhiskeyLake-U GT2 [UHD Graphics 620] (Inspiron 5482)
 
 pci:v00008086d00003EA5*
- ID_MODEL_FROM_DATABASE=Iris Plus Graphics 655
+ ID_MODEL_FROM_DATABASE=CoffeeLake-U GT3e [Iris Plus Graphics 655]
 
 pci:v00008086d00003EC2*
  ID_MODEL_FROM_DATABASE=8th Gen Core Processor Host Bridge/DRAM Registers
@@ -90419,6 +91247,9 @@ pci:v00008086d00004035*
 pci:v00008086d00004036*
  ID_MODEL_FROM_DATABASE=5400 Chipset FBD Registers
 
+pci:v00008086d00004041*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane]
+
 pci:v00008086d00004100*
  ID_MODEL_FROM_DATABASE=Moorestown Graphics and Video
 
@@ -90458,6 +91289,27 @@ pci:v00008086d00004116*
 pci:v00008086d00004117*
  ID_MODEL_FROM_DATABASE=Atom Processor E6xx PCI Host Bridge #4
 
+pci:v00008086d00004140*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane]
+
+pci:v00008086d00004140sv00001028sd00002134*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (SED 400GB 2.5" U.2 (P5800X))
+
+pci:v00008086d00004140sv00001028sd00002135*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (SED 800GB 2.5" U.2 (P5800X))
+
+pci:v00008086d00004140sv00001028sd00002136*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (SED 1.6GB 2.5" U.2 (P5800X))
+
+pci:v00008086d00004140sv00001028sd00002137*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (400GB 2.5" U.2 (P5800X))
+
+pci:v00008086d00004140sv00001028sd00002138*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (800GB 2.5" U.2 (P5800X))
+
+pci:v00008086d00004140sv00001028sd00002139*
+ ID_MODEL_FROM_DATABASE=NVMe Datacenter SSD [Optane] (1.6TB 2.5" U.2 (P5800X))
+
 pci:v00008086d00004220*
  ID_MODEL_FROM_DATABASE=PRO/Wireless 2200BG [Calexico2] Network Connection
 
@@ -90731,9 +91583,36 @@ pci:v00008086d0000444E*
 pci:v00008086d0000467F*
  ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller
 
+pci:v00008086d00004680*
+ ID_MODEL_FROM_DATABASE=AlderLake-S GT1
+
+pci:v00008086d000046A0*
+ ID_MODEL_FROM_DATABASE=AlderLake-P GT2
+
+pci:v00008086d00004905*
+ ID_MODEL_FROM_DATABASE=DG1 [Iris Xe MAX Graphics]
+
+pci:v00008086d00004906*
+ ID_MODEL_FROM_DATABASE=DG1 [Iris Xe Pod]
+
+pci:v00008086d00004907*
+ ID_MODEL_FROM_DATABASE=SG1 [Server GPU SG-18M]
+
+pci:v00008086d00004908*
+ ID_MODEL_FROM_DATABASE=DG1 [Iris Xe Graphics]
+
 pci:v00008086d00004C3D*
  ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller
 
+pci:v00008086d00004F80*
+ ID_MODEL_FROM_DATABASE=DG2
+
+pci:v00008086d00004F81*
+ ID_MODEL_FROM_DATABASE=DG2
+
+pci:v00008086d00004F82*
+ ID_MODEL_FROM_DATABASE=DG2
+
 pci:v00008086d00005001*
  ID_MODEL_FROM_DATABASE=LE80578
 
@@ -92081,6 +92960,9 @@ pci:v00008086d00008500sv00001993sd00000DEE*
 pci:v00008086d00008500sv00001993sd00000DEF*
  ID_MODEL_FROM_DATABASE=IXP4XX Network Processor (IXP420/421/422/425/IXC1100) (mGuard-PCI AV#0)
 
+pci:v00008086d00008603*
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP Dynamic Tuning Processor Participant
+
 pci:v00008086d000087C0*
  ID_MODEL_FROM_DATABASE=UHD Graphics 617
 
@@ -92165,12 +93047,18 @@ pci:v00008086d00008819*
 pci:v00008086d00008A0D*
  ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #1
 
+pci:v00008086d00008A12*
+ ID_MODEL_FROM_DATABASE=Ice Lake-LP Processor Host Bridge/DRAM Registers
+
 pci:v00008086d00008A13*
  ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 USB Controller
 
 pci:v00008086d00008A17*
  ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 NHI #0
 
+pci:v00008086d00008A19*
+ ID_MODEL_FROM_DATABASE=Image Signal Processor
+
 pci:v00008086d00008A1D*
  ID_MODEL_FROM_DATABASE=Ice Lake Thunderbolt 3 PCI Express Root Port #0
 
@@ -92210,6 +93098,9 @@ pci:v00008086d00008C02*
 pci:v00008086d00008C02sv0000103Csd00001998*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (EliteDesk 800 G1)
 
+pci:v00008086d00008C02sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (ThinkCentre E73)
+
 pci:v00008086d00008C02sv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode] (ThinkCentre M83)
 
@@ -92258,6 +93149,9 @@ pci:v00008086d00008C10sv00001043sd00008534*
 pci:v00008086d00008C10sv000017AAsd0000220E*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1 (ThinkPad T440p)
 
+pci:v00008086d00008C10sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1 (ThinkCentre E73)
+
 pci:v00008086d00008C11*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #1
 
@@ -92294,6 +93188,9 @@ pci:v00008086d00008C19*
 pci:v00008086d00008C1A*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #6
 
+pci:v00008086d00008C1Asv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #6 (ThinkCentre E73)
+
 pci:v00008086d00008C1B*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family PCI Express Root Port #6
 
@@ -92339,6 +93236,9 @@ pci:v00008086d00008C22sv0000103Csd00001998*
 pci:v00008086d00008C22sv000017AAsd0000220E*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller (ThinkPad T440p)
 
+pci:v00008086d00008C22sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller (ThinkCentre E73)
+
 pci:v00008086d00008C22sv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family SMBus Controller (ThinkCentre M83)
 
@@ -92363,6 +93263,9 @@ pci:v00008086d00008C26sv000017AAsd0000220E*
 pci:v00008086d00008C26sv000017AAsd00002210*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1 (ThinkPad T540p)
 
+pci:v00008086d00008C26sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1 (ThinkCentre E73)
+
 pci:v00008086d00008C26sv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #1 (ThinkCentre M83)
 
@@ -92381,6 +93284,9 @@ pci:v00008086d00008C2Dsv0000103Csd00001998*
 pci:v00008086d00008C2Dsv000017AAsd0000220E*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2 (ThinkPad T440p)
 
+pci:v00008086d00008C2Dsv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2 (ThinkCentre E73)
+
 pci:v00008086d00008C2Dsv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB EHCI #2 (ThinkCentre M83)
 
@@ -92396,6 +93302,9 @@ pci:v00008086d00008C31sv0000103Csd00001998*
 pci:v00008086d00008C31sv000017AAsd0000220E*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI (ThinkPad T440p)
 
+pci:v00008086d00008C31sv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI (ThinkCentre E73)
+
 pci:v00008086d00008C31sv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family USB xHCI (ThinkCentre M83)
 
@@ -92417,6 +93326,9 @@ pci:v00008086d00008C3Asv0000103Csd00001998*
 pci:v00008086d00008C3Asv000017AAsd0000220E*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1 (ThinkPad T440p)
 
+pci:v00008086d00008C3Asv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1 (ThinkCentre E73)
+
 pci:v00008086d00008C3Asv000017AAsd0000309F*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family MEI Controller #1 (ThinkCentre M83)
 
@@ -92531,6 +93443,9 @@ pci:v00008086d00008C5B*
 pci:v00008086d00008C5C*
  ID_MODEL_FROM_DATABASE=H81 Express LPC Controller
 
+pci:v00008086d00008C5Csv000017AAsd00003098*
+ ID_MODEL_FROM_DATABASE=H81 Express LPC Controller (ThinkCentre E73)
+
 pci:v00008086d00008C5D*
  ID_MODEL_FROM_DATABASE=8 Series/C220 Series Chipset Family LPC Controller
 
@@ -92885,83 +93800,98 @@ pci:v00008086d00009641*
 pci:v00008086d000096A1*
  ID_MODEL_FROM_DATABASE=Integrated RAID
 
+pci:v00008086d00009A03*
+ ID_MODEL_FROM_DATABASE=TigerLake-LP Dynamic Tuning Processor Participant
+
 pci:v00008086d00009A09*
  ID_MODEL_FROM_DATABASE=11th Gen Core Processor PCIe Controller
 
 pci:v00008086d00009A0B*
  ID_MODEL_FROM_DATABASE=Volume Management Device NVMe RAID Controller
 
+pci:v00008086d00009A0D*
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Telemetry Aggregator
+
 pci:v00008086d00009A13*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt USB Controller
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt USB Controller
 
 pci:v00008086d00009A14*
  ID_MODEL_FROM_DATABASE=11th Gen Core Processor Host Bridge/DRAM Registers
 
 pci:v00008086d00009A17*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt USB Controller
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt USB Controller
 
 pci:v00008086d00009A1B*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #0
 
 pci:v00008086d00009A1D*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #1
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt NHI #1
 
 pci:v00008086d00009A1F*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #0
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #0
 
 pci:v00008086d00009A21*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #1
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt NHI #1
 
 pci:v00008086d00009A23*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #0
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #0
 
 pci:v00008086d00009A25*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #1
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #1
 
 pci:v00008086d00009A27*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #2
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #2
 
 pci:v00008086d00009A29*
- ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #3
+ ID_MODEL_FROM_DATABASE=Tiger Lake-LP Thunderbolt PCI Express Root Port #3
 
 pci:v00008086d00009A2B*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #0
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #0
 
 pci:v00008086d00009A2D*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #1
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #1
 
 pci:v00008086d00009A2F*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #2
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #2
 
 pci:v00008086d00009A31*
- ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #3
+ ID_MODEL_FROM_DATABASE=Tiger Lake-H Thunderbolt PCI Express Root Port #3
 
 pci:v00008086d00009A33*
  ID_MODEL_FROM_DATABASE=Tiger Lake Trace Hub
 
 pci:v00008086d00009A49*
- ID_MODEL_FROM_DATABASE=Iris Xe Graphics
+ ID_MODEL_FROM_DATABASE=TigerLake GT2 [Iris Xe Graphics]
 
 pci:v00008086d00009B41*
- ID_MODEL_FROM_DATABASE=UHD Graphics
+ ID_MODEL_FROM_DATABASE=CometLake-U GT2 [UHD Graphics]
 
 pci:v00008086d00009B44*
  ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
 
+pci:v00008086d00009B53*
+ ID_MODEL_FROM_DATABASE=Comet Lake-S 6c Host Bridge/DRAM Controller
+
 pci:v00008086d00009B54*
  ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
 
 pci:v00008086d00009B61*
  ID_MODEL_FROM_DATABASE=Comet Lake-U v1 4c Host Bridge/DRAM Controller
 
+pci:v00008086d00009B63*
+ ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
+
 pci:v00008086d00009B64*
  ID_MODEL_FROM_DATABASE=10th Gen Core Processor Host Bridge/DRAM Registers
 
 pci:v00008086d00009BC4*
- ID_MODEL_FROM_DATABASE=UHD Graphics
+ ID_MODEL_FROM_DATABASE=CometLake-H GT2 [UHD Graphics]
+
+pci:v00008086d00009BC5*
+ ID_MODEL_FROM_DATABASE=CometLake-S GT2 [UHD Graphics 630]
 
 pci:v00008086d00009BC8*
- ID_MODEL_FROM_DATABASE=UHD Graphics 630
+ ID_MODEL_FROM_DATABASE=CometLake-S GT2 [UHD Graphics 630]
 
 pci:v00008086d00009C00*
  ID_MODEL_FROM_DATABASE=8 Series SATA Controller 1 [IDE mode]
@@ -93287,6 +94217,9 @@ pci:v00008086d00009D03sv00001025sd0000115F*
 pci:v00008086d00009D03sv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP SATA Controller [AHCI mode] (Latitude E7470)
 
+pci:v00008086d00009D03sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP SATA Controller [AHCI mode] (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D03sv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP SATA Controller [AHCI mode] (Latitude 3570)
 
@@ -93332,6 +94265,9 @@ pci:v00008086d00009D17*
 pci:v00008086d00009D18*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP PCI Express Root Port #9
 
+pci:v00008086d00009D18sv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP PCI Express Root Port #9 (ThinkPad T570)
+
 pci:v00008086d00009D18sv000017AAsd0000382A*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP PCI Express Root Port #9 (B51-80 Laptop)
 
@@ -93353,12 +94289,18 @@ pci:v00008086d00009D21sv00001028sd000006D6*
 pci:v00008086d00009D21sv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Latitude E7470)
 
+pci:v00008086d00009D21sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D21sv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (Latitude 3570)
 
 pci:v00008086d00009D21sv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (EliteBook 840 G3)
 
+pci:v00008086d00009D21sv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (ThinkPad T570)
+
 pci:v00008086d00009D21sv000017AAsd0000224F*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP PMC (ThinkPad X1 Carbon 5th Gen)
 
@@ -93380,6 +94322,9 @@ pci:v00008086d00009D23sv00001028sd000006D6*
 pci:v00008086d00009D23sv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Latitude E7470)
 
+pci:v00008086d00009D23sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D23sv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP SMBus (Latitude 3570)
 
@@ -93425,6 +94370,9 @@ pci:v00008086d00009D2Fsv00001028sd000006D6*
 pci:v00008086d00009D2Fsv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Latitude E7470)
 
+pci:v00008086d00009D2Fsv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D2Fsv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP USB 3.0 xHCI Controller (Latitude 3570)
 
@@ -93452,6 +94400,9 @@ pci:v00008086d00009D31sv00001028sd000006D6*
 pci:v00008086d00009D31sv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Latitude E7470)
 
+pci:v00008086d00009D31sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D31sv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Thermal subsystem (Latitude 3570)
 
@@ -93476,12 +94427,18 @@ pci:v00008086d00009D32*
 pci:v00008086d00009D32sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=CSI-2 Host Controller (Latitude 7275 tablet)
 
+pci:v00008086d00009D32sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=CSI-2 Host Controller (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D35*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Integrated Sensor Hub
 
 pci:v00008086d00009D35sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Integrated Sensor Hub (Latitude 7275 tablet)
 
+pci:v00008086d00009D35sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Integrated Sensor Hub (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D3A*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1
 
@@ -93494,6 +94451,9 @@ pci:v00008086d00009D3Asv00001028sd000006D6*
 pci:v00008086d00009D3Asv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Latitude E7470)
 
+pci:v00008086d00009D3Asv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D3Asv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP CSME HECI #1 (Latitude 3570)
 
@@ -93518,6 +94478,9 @@ pci:v00008086d00009D3D*
 pci:v00008086d00009D3Dsv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Active Management Technology - SOL (EliteBook 840 G3)
 
+pci:v00008086d00009D3Dsv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Active Management Technology - SOL (ThinkPad T570)
+
 pci:v00008086d00009D43*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
 
@@ -93530,6 +94493,9 @@ pci:v00008086d00009D46*
 pci:v00008086d00009D46sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=LPC/eSPI Controller (Latitude 7275 tablet)
 
+pci:v00008086d00009D46sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=LPC/eSPI Controller (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D48*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller
 
@@ -93542,6 +94508,9 @@ pci:v00008086d00009D48sv00001028sd000006F3*
 pci:v00008086d00009D48sv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller (EliteBook 840 G3)
 
+pci:v00008086d00009D48sv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP LPC Controller (ThinkPad T570)
+
 pci:v00008086d00009D4E*
  ID_MODEL_FROM_DATABASE=Sunrise Point LPC Controller/eSPI Controller
 
@@ -93575,6 +94544,9 @@ pci:v00008086d00009D60sv00001025sd0000115F*
 pci:v00008086d00009D60sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Latitude 7275 tablet)
 
+pci:v00008086d00009D60sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D60sv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #0 (Latitude 3570)
 
@@ -93593,12 +94565,18 @@ pci:v00008086d00009D61*
 pci:v00008086d00009D61sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #1 (Latitude 7275 tablet)
 
+pci:v00008086d00009D61sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #1 (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D62*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #2
 
 pci:v00008086d00009D62sv00001028sd000006D6*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #2 (Latitude 7275 tablet)
 
+pci:v00008086d00009D62sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #2 (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D63*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP Serial IO I2C Controller #3
 
@@ -93620,12 +94598,18 @@ pci:v00008086d00009D70sv00001028sd000006D6*
 pci:v00008086d00009D70sv00001028sd000006DC*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (Latitude E7470)
 
+pci:v00008086d00009D70sv00001028sd000006E6*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (Latitude 11 5175 2-in-1)
+
 pci:v00008086d00009D70sv00001028sd000006F3*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (Latitude 3570)
 
 pci:v00008086d00009D70sv0000103Csd00008079*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (EliteBook 840 G3)
 
+pci:v00008086d00009D70sv000017AAsd00002247*
+ ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (ThinkPad T570)
+
 pci:v00008086d00009D70sv000017AAsd0000382A*
  ID_MODEL_FROM_DATABASE=Sunrise Point-LP HD Audio (B51-80 Laptop)
 
@@ -93821,6 +94805,9 @@ pci:v00008086d0000A0AB*
 pci:v00008086d0000A0B0*
  ID_MODEL_FROM_DATABASE=Tiger Lake-LP PCI Express Root Port #9
 
+pci:v00008086d0000A0BD*
+ ID_MODEL_FROM_DATABASE=Tigerlake PCH-LP PCI Express Root Port #6
+
 pci:v00008086d0000A0BF*
  ID_MODEL_FROM_DATABASE=Tiger Lake-LP PCI Express Root Port #8
 
@@ -94715,9 +95702,15 @@ pci:v00008086d0000A379sv00001028sd00000869*
 pci:v00008086d0000A382*
  ID_MODEL_FROM_DATABASE=400 Series Chipset Family SATA AHCI Controller
 
+pci:v00008086d0000A3A1*
+ ID_MODEL_FROM_DATABASE=Memory controller
+
 pci:v00008086d0000A3A3*
  ID_MODEL_FROM_DATABASE=Comet Lake PCH-V SMBus Host Controller
 
+pci:v00008086d0000A3AF*
+ ID_MODEL_FROM_DATABASE=Comet Lake PCH-V USB Controller
+
 pci:v00008086d0000A3B1*
  ID_MODEL_FROM_DATABASE=Comet Lake PCH-V Thermal Subsystem
 
@@ -94853,6 +95846,15 @@ pci:v00008088d00000101*
 pci:v00008088d00000101sv00008088sd00000201*
  ID_MODEL_FROM_DATABASE=WX1860A2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200T)
 
+pci:v00008088d00000101sv00008088sd00004201*
+ ID_MODEL_FROM_DATABASE=WX1860A2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200T (WOL))
+
+pci:v00008088d00000101sv00008088sd00008201*
+ ID_MODEL_FROM_DATABASE=WX1860A2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200T (NCSI))
+
+pci:v00008088d00000101sv00008088sd0000C201*
+ ID_MODEL_FROM_DATABASE=WX1860A2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200T (WOL, NCSI))
+
 pci:v00008088d00000102*
  ID_MODEL_FROM_DATABASE=WX1860A2S Gigabit Ethernet Controller
 
@@ -94868,6 +95870,15 @@ pci:v00008088d00000103sv00008088sd00000401*
 pci:v00008088d00000103sv00008088sd00000440*
  ID_MODEL_FROM_DATABASE=WX1860A4 Gigabit Ethernet Controller (Qual-Port Ethernet Network Adaptor SF400-OCP)
 
+pci:v00008088d00000103sv00008088sd00004103*
+ ID_MODEL_FROM_DATABASE=WX1860A4 Gigabit Ethernet Controller (Quad-Port Ethernet Network Adaptor SF400T (WOL))
+
+pci:v00008088d00000103sv00008088sd00008103*
+ ID_MODEL_FROM_DATABASE=WX1860A4 Gigabit Ethernet Controller (Quad-Port Ethernet Network Adaptor SF400T (NCSI))
+
+pci:v00008088d00000103sv00008088sd0000C103*
+ ID_MODEL_FROM_DATABASE=WX1860A4 Gigabit Ethernet Controller (Quad-Port Ethernet Network Adaptor SF400T (WOL, NCSI))
+
 pci:v00008088d00000104*
  ID_MODEL_FROM_DATABASE=WX1860A4S Gigabit Ethernet Controller
 
@@ -94880,6 +95891,15 @@ pci:v00008088d00000105*
 pci:v00008088d00000105sv00008088sd00000202*
  ID_MODEL_FROM_DATABASE=WX1860AL2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200HT)
 
+pci:v00008088d00000105sv00008088sd00004202*
+ ID_MODEL_FROM_DATABASE=WX1860AL2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200HT (WOL))
+
+pci:v00008088d00000105sv00008088sd00008202*
+ ID_MODEL_FROM_DATABASE=WX1860AL2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200HT (NCSI))
+
+pci:v00008088d00000105sv00008088sd0000C202*
+ ID_MODEL_FROM_DATABASE=WX1860AL2 Gigabit Ethernet Controller (Dual-Port Ethernet Network Adaptor SF200HT (WOL, NCSI))
+
 pci:v00008088d00000106*
  ID_MODEL_FROM_DATABASE=WX1860AL2S Gigabit Ethernet Controller
 
@@ -94892,18 +95912,75 @@ pci:v00008088d00000107*
 pci:v00008088d00000107sv00008088sd00000402*
  ID_MODEL_FROM_DATABASE=WX1860AL4 Gigabit Ethernet Controller (Qual-Port Ethernet Network Adaptor SF400HT)
 
+pci:v00008088d00000107sv00008088sd00004402*
+ ID_MODEL_FROM_DATABASE=WX1860AL4 Gigabit Ethernet Controller (Quad-Port Ethernet Network Adaptor SF400HT (WOL))
+
+pci:v00008088d00000107sv00008088sd00008402*
+ ID_MODEL_FROM_DATABASE=WX1860AL4 Gigabit Ethernet Controller (Quad-Port Ethernet Network Adaptor SF400HT (NCSI))
+
+pci:v00008088d00000107sv00008088sd0000C402*
+ ID_MODEL_FROM_DATABASE=WX1860AL4 Gigabit Ethernet Controller (Quad-Port Ethernet Network Adaptor SF400HT (WOL, NCSI))
+
 pci:v00008088d00000108*
  ID_MODEL_FROM_DATABASE=WX1860AL4S Gigabit Ethernet Controller
 
 pci:v00008088d00000108sv00008088sd00000420*
  ID_MODEL_FROM_DATABASE=WX1860AL4S Gigabit Ethernet Controller (Qual-Port Ethernet Network Adaptor SF400HT-S)
 
+pci:v00008088d00000109*
+ ID_MODEL_FROM_DATABASE=WX1860-LC Gigabit Ethernet Controller
+
+pci:v00008088d0000010A*
+ ID_MODEL_FROM_DATABASE=WX1860A1 Gigabit Ethernet Controller
+
+pci:v00008088d0000010B*
+ ID_MODEL_FROM_DATABASE=WX1860AL1 Gigabit Ethernet Controller
+
+pci:v00008088d0000010Bsv00008088sd00000102*
+ ID_MODEL_FROM_DATABASE=WX1860AL1 Gigabit Ethernet Controller (Single-Port Ethernet Network Adaptor SF100HT)
+
+pci:v00008088d0000010Bsv00008088sd00004102*
+ ID_MODEL_FROM_DATABASE=WX1860AL1 Gigabit Ethernet Controller (Single-Port Ethernet Network Adaptor SF100HT (WOL))
+
+pci:v00008088d0000010Bsv00008088sd00008102*
+ ID_MODEL_FROM_DATABASE=WX1860AL1 Gigabit Ethernet Controller (Single-Port Ethernet Network Adaptor SF100HT (NCSI))
+
+pci:v00008088d0000010Bsv00008088sd0000C102*
+ ID_MODEL_FROM_DATABASE=WX1860AL1 Gigabit Ethernet Controller (Single-Port Ethernet Network Adaptor SF100HT (WOL, NCSI))
+
+pci:v00008088d00000111*
+ ID_MODEL_FROM_DATABASE=WX1860A2 Ethernet Controller Virtual Function
+
+pci:v00008088d00000113*
+ ID_MODEL_FROM_DATABASE=WX1860A4 Ethernet Controller Virtual Function
+
+pci:v00008088d00000115*
+ ID_MODEL_FROM_DATABASE=WX1860AL2 Ethernet Controller Virtual Function
+
+pci:v00008088d00000117*
+ ID_MODEL_FROM_DATABASE=WX1860AL4 Ethernet Controller Virtual Function
+
+pci:v00008088d00000119*
+ ID_MODEL_FROM_DATABASE=WX1860-LC Gigabit Ethernet Controller Virtual Function
+
+pci:v00008088d0000011A*
+ ID_MODEL_FROM_DATABASE=WX1860A1 Gigabit Ethernet Controller Virtual Function
+
+pci:v00008088d0000011B*
+ ID_MODEL_FROM_DATABASE=WX1860AL1 Gigabit Ethernet Controller Virtual Function
+
+pci:v00008088d00001000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 Virtual Function for 10GbE SFP+
+
 pci:v00008088d00001001*
  ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 for 10GbE SFP+
 
 pci:v00008088d00001001sv00008088sd00000000*
  ID_MODEL_FROM_DATABASE=Ethernet Controller RP1000 for 10GbE SFP+ (Ethernet Network Adaptor RP1000 for 10GbE SFP+)
 
+pci:v00008088d00002000*
+ ID_MODEL_FROM_DATABASE=Ethernet Controller RP2000 Virtual Function for 10GbE SFP+
+
 pci:v00008088d00002001*
  ID_MODEL_FROM_DATABASE=Ethernet Controller RP2000 for 10GbE SFP+
 
@@ -97077,7 +98154,7 @@ pci:v0000E000d0000E000*
  ID_MODEL_FROM_DATABASE=W89C940
 
 pci:v0000E159*
- ID_VENDOR_FROM_DATABASE=Tiger Jet Network Inc.
+ ID_VENDOR_FROM_DATABASE=Tiger Jet Network Inc. / ICP DAS
 
 pci:v0000E159d00000001*
  ID_MODEL_FROM_DATABASE=Tiger3XX Modem/ISDN interface
@@ -97169,6 +98246,9 @@ pci:v0000EA01d00000052*
 pci:v0000EA01d00000800*
  ID_MODEL_FROM_DATABASE=PCI-800 Digital I/O Card
 
+pci:v0000EA50*
+ ID_VENDOR_FROM_DATABASE=Emerson Automation Solutions
+
 pci:v0000EA60*
  ID_VENDOR_FROM_DATABASE=RME
 
index 4d3fcb63e1e1b44ccc56291ed2867662e8715d02..fe191edbf465d00684e97267886371b50d11a92a 100644 (file)
@@ -4511,6 +4511,9 @@ usb:v0421p0156*
 usb:v0421p0157*
  ID_MODEL_FROM_DATABASE=5800 XpressMusic (Imaging mode)
 
+usb:v0421p0189*
+ ID_MODEL_FROM_DATABASE=N810 Internet Tablet WiMAX
+
 usb:v0421p0199*
  ID_MODEL_FROM_DATABASE=6700 Classic (msc)
 
@@ -4533,7 +4536,7 @@ usb:v0421p01C7*
  ID_MODEL_FROM_DATABASE=N900 (Storage Mode)
 
 usb:v0421p01C8*
- ID_MODEL_FROM_DATABASE=N900 (PC-Suite Mode)
+ ID_MODEL_FROM_DATABASE=N900/N950 (PC-Suite Mode)
 
 usb:v0421p0228*
  ID_MODEL_FROM_DATABASE=5530 XpressMusic
@@ -4593,7 +4596,10 @@ usb:v0421p03CD*
  ID_MODEL_FROM_DATABASE=C7-00 (Nokia Suite mode)
 
 usb:v0421p03D1*
- ID_MODEL_FROM_DATABASE=N950
+ ID_MODEL_FROM_DATABASE=N950 (Storage Mode)
+
+usb:v0421p03D2*
+ ID_MODEL_FROM_DATABASE=N950 (PC Suite mode)
 
 usb:v0421p0400*
  ID_MODEL_FROM_DATABASE=7600 Phone Parent
@@ -4686,7 +4692,7 @@ usb:v0421p0429*
  ID_MODEL_FROM_DATABASE=6230i MultiMedia Card
 
 usb:v0421p0431*
- ID_MODEL_FROM_DATABASE=770 Internet Tablet
+ ID_MODEL_FROM_DATABASE=770/N800 Internet Tablet
 
 usb:v0421p0432*
  ID_MODEL_FROM_DATABASE=N90 Phone Parent
@@ -4788,7 +4794,13 @@ usb:v0421p0509*
  ID_MODEL_FROM_DATABASE=E65 (Storage mode)
 
 usb:v0421p0518*
- ID_MODEL_FROM_DATABASE=N9 Phone
+ ID_MODEL_FROM_DATABASE=N9 (Storage mode)
+
+usb:v0421p0519*
+ ID_MODEL_FROM_DATABASE=N9 (RNDIS/Ethernet mode)
+
+usb:v0421p051A*
+ ID_MODEL_FROM_DATABASE=N9 (PC Suite mode)
 
 usb:v0421p054D*
  ID_MODEL_FROM_DATABASE=C2-01
@@ -26198,6 +26210,9 @@ usb:v05FCp0001*
 usb:v05FCp0010*
  ID_MODEL_FROM_DATABASE=Soundcraft Si MADI combo card
 
+usb:v05FCp0021*
+ ID_MODEL_FROM_DATABASE=Soundcraft Signature 12 MTK
+
 usb:v05FCp7849*
  ID_MODEL_FROM_DATABASE=Harman/Kardon SoundSticks
 
@@ -67280,6 +67295,15 @@ usb:v32B3pD1A6*
 usb:v32B3pD1A7*
  ID_MODEL_FROM_DATABASE=TXT Multihub
 
+usb:v3310*
+ ID_VENDOR_FROM_DATABASE=MUDITA Sp. z o.o.
+
+usb:v3310p0100*
+ ID_MODEL_FROM_DATABASE=Pure
+
+usb:v3310p0101*
+ ID_MODEL_FROM_DATABASE=Pure tethering
+
 usb:v3333*
  ID_VENDOR_FROM_DATABASE=InLine
 
index bd058003ff955e1ea50f7d6053a416e5842dea72..081d0b297f0ede1ad766b59d9ffc30bb3239b283 100644 (file)
@@ -683,7 +683,12 @@ evdev:input:b0003v172Fp0031*
  EVDEV_ABS_00=0:10000:400
  EVDEV_ABS_01=0:6250:400
 
-#WALTOP International Corp. Graphics Tablet
+# WALTOP International Corp. Graphics Tablet
 evdev:input:b0003v172Fp0047*
  EVDEV_ABS_00=0:20000:80
  EVDEV_ABS_01=0:12500:80
+
+# WALTOP International Corp. Batteryless Tablet
+evdev:input:b0003v172Fp0505*
+ EVDEV_ABS_00=::160
+ EVDEV_ABS_01=::160
index cf79d4377cc30b36dd0db689096a51195e4ee9d1..afed9e82a8fa417eb6b29237ba6b5340fd07f4b4 100644 (file)
@@ -662,7 +662,7 @@ evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHPEliteBookFolio1040G2:*
 # HP EliteBook Folio G1
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHP:pnHPEliteBookFolioG1:*
  KEYBOARD_KEY_64=calendar
- KEYBOARD_KEY_81=micmute
+ KEYBOARD_KEY_81=f20
 
 # HP ProBook 650
 evdev:atkbd:dmi:bvn*:bvr*:bd*:svnHewlett-Packard*:pnHP*ProBook*650*:*
index 442a2d0f51289a5a96eed7e3c2b743c776a8c25a..86213f1882e396a3d1c2e9e03c94f29be4377838 100644 (file)
@@ -702,6 +702,14 @@ sensor:modalias:acpi:BOSC0200*:dmi:bvnINSYDECorp.:bvrMx.WT107.KUBNGEA*svnInsyde:
 sensor:modalias:acpi:SMO8500*:dmi:*:svnProwise:pnPT301:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, 1, 0; 0, 0, 1
 
+#########################################
+# Reeder
+#########################################
+
+# A8iW-Rev.A 
+sensor:modalias:acpi:SMO8500*:dmi:*:rvnReeder:rnA8iW-Rev.A:*
+ ACCEL_MOUNT_MATRIX=1, 0, 0; 0, -1, 0; 0, 0, 1
+
 #########################################
 # Schneider
 #########################################
@@ -783,11 +791,15 @@ sensor:modalias:acpi:BOSC0200*:dmi:*:bvrTP15-VT5.2.1.3:*:svnTrekStor*:pnSurfTabt
 
 sensor:modalias:acpi:KIOX010A*:dmi:*:svnTREKSTOR:pnPrimebookC11B:*
 sensor:modalias:acpi:KIOX010A*:dmi:*:svnTREKSTOR:pnPRIMEBOOKC11B:*
+sensor:modalias:acpi:KIOX010A*:dmi:*:svnTREKSTOR:pnYourbookC11B:*
+sensor:modalias:acpi:KIOX010A*:dmi:*:svnTREKSTOR:pnYOURBOOKC11B:*
  ACCEL_MOUNT_MATRIX=-1, 0, 0; 0, -1, 0; 0, 0, -1
  ACCEL_LOCATION=display
 
 sensor:modalias:acpi:KIOX020A*:dmi:*:svnTREKSTOR:pnPrimebookC11B:*
 sensor:modalias:acpi:KIOX020A*:dmi:*:svnTREKSTOR:pnPRIMEBOOKC11B:*
+sensor:modalias:acpi:KIOX020A*:dmi:*:svnTREKSTOR:pnYourbookC11B:*
+sensor:modalias:acpi:KIOX020A*:dmi:*:svnTREKSTOR:pnYOURBOOKC11B:*
  ACCEL_MOUNT_MATRIX=0, 1, 0; 1, 0, 0; 0, 0, 1
  ACCEL_LOCATION=base
 
index 7c6f323384ca0ae88dfd1196822746289792c83c..225d00a1bd90fc97214d444ef331a619aa619db2 100644 (file)
@@ -917,12 +917,6 @@ C4B36A     (base 16)               Cisco Systems, Inc
                                Hsinchu    30077\r
                                TW\r
 \r
-C8-C6-4A   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
-C8C64A     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
-                               SURVEYNO.381, PADUR ROAD, KUTHAMBAKKAM VILLAGE, 602107 POONAMALLEE TALUK, THIRUVALLUR DISTRIC\r
-                               Chennai    602107\r
-                               IN\r
-\r
 30-EA-26   (hex)               Sycada BV\r
 30EA26     (base 16)           Sycada BV\r
                                Burgemeester Stramanweg 105B\r
@@ -1007,9 +1001,6 @@ EC5623     (base 16)              HUAWEI TECHNOLOGIES CO.,LTD
                                Hangzhou  Zhejiang  310052\r
                                CN\r
 \r
-8C-E7-48   (hex)               Private\r
-8CE748     (base 16)           Private\r
-\r
 10-82-86   (hex)               Luxshare Precision Industry Co.,Ltd\r
 108286     (base 16)           Luxshare Precision Industry Co.,Ltd\r
                                2nd floor, A building, Sanyo New Industrial Area, West of Maoyi, Shajing  Baoan District\r
@@ -1208,9 +1199,6 @@ ACF6F7     (base 16)              LG Electronics (Mobile Communications)
                                Seoul    153-801\r
                                KR\r
 \r
-E8-9E-0C   (hex)               Private\r
-E89E0C     (base 16)           Private\r
-\r
 48-E6-C0   (hex)               SIMCom Wireless Solutions Co.,Ltd.\r
 48E6C0     (base 16)           SIMCom Wireless Solutions Co.,Ltd.\r
                                Building B,SIM Technology Building,No.633,Jinzhong Road\r
@@ -3521,12 +3509,6 @@ A4933F     (base 16)             HUAWEI TECHNOLOGIES CO.,LTD
                                San Jose  CA  94568\r
                                US\r
 \r
-2C-B8-ED   (hex)               SonicWall\r
-2CB8ED     (base 16)           SonicWall\r
-                               5455 Great America Parkway\r
-                               Santa Clara  CA  95054\r
-                               US\r
-\r
 68-D4-82   (hex)               SHENZHEN GONGJIN ELECTRONICS CO.,LT\r
 68D482     (base 16)           SHENZHEN GONGJIN ELECTRONICS CO.,LT\r
                                SONGGANG\r
@@ -25814,12 +25796,6 @@ D4C766     (base 16)           Acentic GmbH
                                Tokyo    196-8666\r
                                JP\r
 \r
-00-04-7D   (hex)               Pelco\r
-00047D     (base 16)           Pelco\r
-                               3500 Pelco Way\r
-                               Clovis  CA  93612\r
-                               US\r
-\r
 00-07-BF   (hex)               Armillaire Technologies, Inc.\r
 0007BF     (base 16)           Armillaire Technologies, Inc.\r
                                10411 Motor City Drive\r
@@ -34961,12 +34937,6 @@ AC8247     (base 16)           Intel Corporate
                                Huntingdon  TN  38344\r
                                US\r
 \r
-0C-51-D0   (hex)               Altice Labs S.A.\r
-0C51D0     (base 16)           Altice Labs S.A.\r
-                               NIF 504705610, Rua Eng. José Ferreira Pinto Basto\r
-                               Aveiro    3810-106\r
-                               PT\r
-\r
 A4-5E-5A   (hex)               ACTIVIO Inc.\r
 A45E5A     (base 16)           ACTIVIO Inc.\r
                                Takeuchi Lorie Bldg. Room 503, 1-34-12, Takadanobaba\r
@@ -35045,6 +35015,588 @@ CC03D9     (base 16)          Cisco Meraki
                                Vancouver  WA  98682\r
                                US\r
 \r
+4C-F2-02   (hex)               Xiaomi Communications Co Ltd\r
+4CF202     (base 16)           Xiaomi Communications Co Ltd\r
+                               The Rainbow City of China Resources\r
+                               NO.68, Qinghe Middle Street  Haidian District, Beijing  100085\r
+                               CN\r
+\r
+A8-77-E5   (hex)               SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\r
+A877E5     (base 16)           SHENZHEN CHUANGWEI-RGB ELECTRONICS CO.,LTD\r
+                               Unit East Block22-24/F,Skyworth semiconductor design  Bldg., Gaoxin Ave.4.S.,Nanshan District,Shenzhen,China\r
+                               SHENZHEN  GUANGDONG  518057\r
+                               CN\r
+\r
+10-A4-DA   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+10A4DA     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+38-20-28   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+382028     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+E4-77-27   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E47727     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+10-51-07   (hex)               Intel Corporate\r
+105107     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+AC-74-C4   (hex)               Maytronics Ltd.\r
+AC74C4     (base 16)           Maytronics Ltd.\r
+                               Kibbutz Yizrael\r
+                               Kibbutz Yizrael    1935000\r
+                               IL\r
+\r
+84-D6-08   (hex)               Wingtech Mobile Communications Co., Ltd.\r
+84D608     (base 16)           Wingtech Mobile Communications Co., Ltd.\r
+                               No.777,Yazhong Road,Nanhu District,\r
+                               Jiaxing  Zhejiang  314006\r
+                               CN\r
+\r
+34-68-93   (hex)               Tecnovideo Srl\r
+346893     (base 16)           Tecnovideo Srl\r
+                               Via A. De Gasperi, 3\r
+                               Villaverla  Vicenza  36030\r
+                               IT\r
+\r
+3C-7A-AA   (hex)               China Dragon Technology Limited\r
+3C7AAA     (base 16)           China Dragon Technology Limited\r
+                               B4 Bldg.Haoshan 1st Industry Park,\r
+                               Shenzhen  Guangdong  518104\r
+                               CN\r
+\r
+6C-47-60   (hex)               Sunitec Enterprise Co.,Ltd\r
+6C4760     (base 16)           Sunitec Enterprise Co.,Ltd\r
+                               3F.,No.98-1,Mincyuan Rd.Sindian City\r
+                               Taipei County 231    231141\r
+                               CN\r
+\r
+18-32-19   (hex)               EM Microelectronic\r
+183219     (base 16)           EM Microelectronic\r
+                               Rue des Sors 3\r
+                               Marin-Epagnier  Neuchatel  2074\r
+                               CH\r
+\r
+28-D3-EA   (hex)               Huawei Device Co., Ltd.\r
+28D3EA     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+A8-F2-66   (hex)               Huawei Device Co., Ltd.\r
+A8F266     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+84-26-7A   (hex)               GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD\r
+84267A     (base 16)           GUANGDONG TAIDE ZHILIAN TECHNOLOGY CO.,LTD\r
+                               Taide Technology Park,Jinfenghuang Industrial District, Fenggang Town,\r
+                               Dongguan  GUANGDONG  523000 \r
+                               CN\r
+\r
+D8-EC-5E   (hex)               Belkin International Inc.\r
+D8EC5E     (base 16)           Belkin International Inc.\r
+                               12045 East Waterfront Drive\r
+                               Playa Vista    90094\r
+                               US\r
+\r
+84-FD-27   (hex)               Silicon Laboratories\r
+84FD27     (base 16)           Silicon Laboratories\r
+                               400 West Cesar Chavez Street\r
+                               Austin    78701\r
+                               US\r
+\r
+CC-9C-3E   (hex)               Cisco Meraki\r
+CC9C3E     (base 16)           Cisco Meraki\r
+                               500 Terry A. Francois Blvd\r
+                               San Francisco    94158\r
+                               US\r
+\r
+48-29-E4   (hex)                  ZAO NPK Rotek\r
+4829E4     (base 16)              ZAO NPK Rotek\r
+                               Prospekt Mira\r
+                               Moscow    129223\r
+                               RU\r
+\r
+FC-A9-DC   (hex)               Renesas Electronics (Penang) Sdn. Bhd.\r
+FCA9DC     (base 16)           Renesas Electronics (Penang) Sdn. Bhd.\r
+                               Phase 3, Bayan Lepas FIZ\r
+                               Bayan Lepas  Penang  11900\r
+                               MY\r
+\r
+FC-58-4A   (hex)               xiamenshi c-chip technology co., ltd\r
+FC584A     (base 16)           xiamenshi c-chip technology co., ltd\r
+                               Baoyuan Road\r
+                               Shenzhen City  Guangdong Province  518101\r
+                               CN\r
+\r
+78-65-3B   (hex)               Shaoxing Ourten Electronics Co., Ltd.\r
+78653B     (base 16)           Shaoxing Ourten Electronics Co., Ltd.\r
+                               3rd Floor # 7, No. 1732 Yanhua industrial park West Renmin Road,Shangyu\r
+                               Shaoxing  Zhejiang  312000\r
+                               CN\r
+\r
+E0-E6-56   (hex)               Nethesis  srl\r
+E0E656     (base 16)           Nethesis  srl\r
+                               strada degli olmi 12\r
+                               Pesaro  Pesaro e Urbino  61122\r
+                               IT\r
+\r
+90-23-B4   (hex)               New H3C Technologies Co., Ltd\r
+9023B4     (base 16)           New H3C Technologies Co., Ltd\r
+                               466 Changhe Road, Binjiang District\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+88-2A-5E   (hex)               New H3C Technologies Co., Ltd\r
+882A5E     (base 16)           New H3C Technologies Co., Ltd\r
+                               466 Changhe Road, Binjiang District\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+84-1E-A3   (hex)               Sagemcom Broadband SAS\r
+841EA3     (base 16)           Sagemcom Broadband SAS\r
+                               250, route de l'Empereur\r
+                               Rueil Malmaison Cedex  hauts de seine  92848\r
+                               FR\r
+\r
+F4-02-23   (hex)               PAX Computer Technology(Shenzhen) Ltd.\r
+F40223     (base 16)           PAX Computer Technology(Shenzhen) Ltd.\r
+                               4/F, No.3 Building, Software Park, Second Central Science-Tech Road, High-Tech\r
+                               Shenzhen  GuangDong  518057\r
+                               CN\r
+\r
+88-46-04   (hex)               Xiaomi Communications Co Ltd\r
+884604     (base 16)           Xiaomi Communications Co Ltd\r
+                               The Rainbow City of China Resources\r
+                               NO.68, Qinghe Middle Street  Haidian District, Beijing  100085\r
+                               CN\r
+\r
+64-6E-E0   (hex)               Intel Corporate\r
+646EE0     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+04-56-E5   (hex)               Intel Corporate\r
+0456E5     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+08-10-86   (hex)               NEC Platforms, Ltd.\r
+081086     (base 16)           NEC Platforms, Ltd.\r
+                               2-3 Kandatsukasamachi\r
+                               Chiyodaku  Tokyo  101-8532\r
+                               JP\r
+\r
+64-79-F0   (hex)               Intel Corporate\r
+6479F0     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+1C-D1-E0   (hex)               Cisco Systems, Inc\r
+1CD1E0     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+24-45-6B   (hex)               Huawei Device Co., Ltd.\r
+24456B     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+48-38-71   (hex)               Huawei Device Co., Ltd.\r
+483871     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+44-BD-DE   (hex)               BHTC GmbH\r
+44BDDE     (base 16)           BHTC GmbH\r
+                               Hansastrasse 40\r
+                               Lippstadt    59557\r
+                               DE\r
+\r
+8C-2A-8E   (hex)               DongGuan Ramaxel Memory Technology\r
+8C2A8E     (base 16)           DongGuan Ramaxel Memory Technology\r
+                               No.32, Industrial East Road,Innovation Park, High-tech Industrial Development Zone, Songshan Lake, Dongguan City, Guangdong Province,China\r
+                               DongGuan  Guangdong  523808\r
+                               CN\r
+\r
+40-44-FD   (hex)               Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+4044FD     (base 16)           Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+                               No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.\r
+                               Chongqing   China  401120\r
+                               CN\r
+\r
+E8-FD-35   (hex)               Huawei Device Co., Ltd.\r
+E8FD35     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+EC-C5-D2   (hex)               Huawei Device Co., Ltd.\r
+ECC5D2     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+B4-60-8C   (hex)               Fiberhome Telecommunication Technologies Co.,LTD\r
+B4608C     (base 16)           Fiberhome Telecommunication Technologies Co.,LTD\r
+                               No.5 DongXin Road\r
+                               Wuhan  Hubei  430074\r
+                               CN\r
+\r
+B8-14-DB   (hex)               OHSUNG\r
+B814DB     (base 16)           OHSUNG\r
+                               335-4,SANHODAERO,GUMI,GYEONG BUK,KOREA\r
+                               GUMI  GYEONG BUK  730-030\r
+                               KR\r
+\r
+80-07-1B   (hex)               VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.\r
+80071B     (base 16)           VSOLUTION TELECOMMUNICATION TECHNOLOGY CO.,LTD.\r
+                               Room 601,Originality Building B2, NO.162 Science Avenue,Science Town\r
+                               Guangzhou  Guangdong  510663\r
+                               CN\r
+\r
+FC-13-F0   (hex)               Bouffalo Lab (Nanjing) Co., Ltd.\r
+FC13F0     (base 16)           Bouffalo Lab (Nanjing) Co., Ltd.\r
+                               5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China\r
+                               Nanjing  Jiangsu  211800\r
+                               CN\r
+\r
+1C-6E-E6   (hex)               NHNETWORKS\r
+1C6EE6     (base 16)           NHNETWORKS\r
+                               54,Chemdanyeonsin-ro 30beon-gil,Buk-gu\r
+                               Gwangju    61080\r
+                               KR\r
+\r
+08-F6-06   (hex)               zte corporation\r
+08F606     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+E8-9E-0C   (hex)               MAX8USA DISTRIBUTORS INC.\r
+E89E0C     (base 16)           MAX8USA DISTRIBUTORS INC.\r
+                               4757 NW 72ND AVENUE\r
+                               MIAMI  FL  33166\r
+                               US\r
+\r
+FC-9C-98   (hex)               Arlo Technology\r
+FC9C98     (base 16)           Arlo Technology\r
+                               3030 Orchard Parkway\r
+                               San Jose  CA  95134\r
+                               US\r
+\r
+A0-70-B7   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+A070B7     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+78-B5-54   (hex)               Huawei Device Co., Ltd.\r
+78B554     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+68-9E-6A   (hex)               Huawei Device Co., Ltd.\r
+689E6A     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+28-2B-96   (hex)               Huawei Device Co., Ltd.\r
+282B96     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+CC-68-B6   (hex)               TP-Link Corporation Limited\r
+CC68B6     (base 16)           TP-Link Corporation Limited\r
+                               Room 901,9/F.New East Ocean Centre, 9 Science Museum Road\r
+                                Tsim Sha Tsui  Kowloon  999077\r
+                               HK\r
+\r
+14-DD-9C   (hex)               vivo Mobile Communication Co., Ltd.\r
+14DD9C     (base 16)           vivo Mobile Communication Co., Ltd.\r
+                               #283,BBK Road\r
+                               Wusha,Chang'An  DongGuan City,Guangdong,  523860\r
+                               CN\r
+\r
+64-64-4A   (hex)               Beijing Xiaomi Mobile Software Co., Ltd\r
+64644A     (base 16)           Beijing Xiaomi Mobile Software Co., Ltd\r
+                               The Rainbow City Office Building, 68 Qinghe Middle Street Haidian District\r
+                               Beijing  Beijing  100085\r
+                               CN\r
+\r
+A4-39-B6   (hex)               SHENZHEN PEIZHE MICROELECTRONICS CO .LTD\r
+A439B6     (base 16)           SHENZHEN PEIZHE MICROELECTRONICS CO .LTD\r
+                               1110 Nanshan Street, Nanshan District, Shenzhen, China Petroleum Building 2012\r
+                               Shenzhen    518000\r
+                               CN\r
+\r
+F4-FB-B8   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+F4FBB8     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+CC-33-31   (hex)               Texas Instruments\r
+CC3331     (base 16)           Texas Instruments\r
+                               12500 TI Blvd\r
+                               Dallas  TX  75243\r
+                               US\r
+\r
+2C-B8-ED   (hex)               SonicWall\r
+2CB8ED     (base 16)           SonicWall\r
+                               1033 McCarthy Blvd\r
+                               Milpitas  CA  95035\r
+                               US\r
+\r
+C8-9B-AD   (hex)               Honor Device Co., Ltd.\r
+C89BAD     (base 16)           Honor Device Co., Ltd.\r
+                               Suite 3401, Unit A, Building 6, Shum Yip Sky Park, No. 8089, Hongli West Road, Xiangmihu Street, Futian District,Shenzhen, Guangdong 518040, People's Republic of China\r
+                               Shenzhen    518040\r
+                               CN\r
+\r
+C4-5B-BE   (hex)               Espressif Inc.\r
+C45BBE     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+88-90-09   (hex)               Juniper Networks\r
+889009     (base 16)           Juniper Networks\r
+                               1133 Innovation Way\r
+                               Sunnyvale  CA  94089\r
+                               US\r
+\r
+90-B6-7A   (hex)               Shenzhen Skyworth  Digital  Technology  CO., Ltd\r
+90B67A     (base 16)           Shenzhen Skyworth  Digital  Technology  CO., Ltd\r
+                               4F,Block A, Skyworth?Building,\r
+                               Shenzhen  Guangdong  518057\r
+                               CN\r
+\r
+7C-D9-F4   (hex)               UAB Teltonika Telematics\r
+7CD9F4     (base 16)           UAB Teltonika Telematics\r
+                               Saltoniskiu  str. 9B-1\r
+                               Vilnius    LT-08105\r
+                               LT\r
+\r
+C8-C6-4A   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
+C8C64A     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
+                               365, Benjamin Road\r
+                               Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646\r
+                               IN\r
+\r
+FC-4E-A4   (hex)               Apple, Inc.\r
+FC4EA4     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+F4-BE-EC   (hex)               Apple, Inc.\r
+F4BEEC     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+BC-FF-4D   (hex)               Espressif Inc.\r
+BCFF4D     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+54-E6-1B   (hex)               Apple, Inc.\r
+54E61B     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+D8-9A-C1   (hex)               Nokia\r
+D89AC1     (base 16)           Nokia\r
+                               600 March Road\r
+                               Kanata  Ontario  K2K 2E6\r
+                               CA\r
+\r
+F0-B1-1D   (hex)               Nokia\r
+F0B11D     (base 16)           Nokia\r
+                               600 March Road\r
+                               Kanata  Ontario  K2K 2E6\r
+                               CA\r
+\r
+00-04-7D   (hex)               Motorola Solutions Inc.\r
+00047D     (base 16)           Motorola Solutions Inc.\r
+                               500 W Monroe Street, Ste 4400 \r
+                               Chicago  IL  60661-3781\r
+                               US\r
+\r
+A4-D7-95   (hex)               Wingtech Mobile Communications Co.,Ltd\r
+A4D795     (base 16)           Wingtech Mobile Communications Co.,Ltd\r
+                               No.777,Yazhong Road,Nanhu District\r
+                               Jiaxing  Zhejiang  314001\r
+                               CN\r
+\r
+84-AB-26   (hex)               Tiinlab Corporation\r
+84AB26     (base 16)           Tiinlab Corporation\r
+                               35F,Tower A,Tanglang City,3333 Liuxian Avenue,Nanshan District\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+F8-97-53   (hex)               Huawei Device Co., Ltd.\r
+F89753     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+58-94-AE   (hex)               Huawei Device Co., Ltd.\r
+5894AE     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+B0-3A-CE   (hex)               Huawei Device Co., Ltd.\r
+B03ACE     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+34-AB-95   (hex)               Espressif Inc.\r
+34AB95     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+C4-91-CF   (hex)               Luxul \r
+C491CF     (base 16)           Luxul \r
+                               12884 Frontrunner Blvd, Suite 201\r
+                               Draper  UT  84020\r
+                               US\r
+\r
+58-35-6B   (hex)               TECNO MOBILE LIMITED\r
+58356B     (base 16)           TECNO MOBILE LIMITED\r
+                               ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG\r
+                               Hong Kong  Hong Kong  999077\r
+                               HK\r
+\r
+F8-4C-DA   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+F84CDA     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+A8-93-4A   (hex)               CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+A8934A     (base 16)           CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+                               Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District\r
+                               Chongqing  Chongqing  401332\r
+                               CN\r
+\r
+A4-05-6E   (hex)               Tiinlab Corporation\r
+A4056E     (base 16)           Tiinlab Corporation\r
+                               35F,Tower A,Tanglang City,3333 Liuxian Avenue,Nanshan District\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+8C-19-B5   (hex)               Arcadyan Corporation\r
+8C19B5     (base 16)           Arcadyan Corporation\r
+                               No.8, Sec.2, Guangfu Rd.\r
+                               Hsinchu City  Hsinchu  30071\r
+                               TW\r
+\r
+C8-7B-23   (hex)               Bose Corporation\r
+C87B23     (base 16)           Bose Corporation\r
+                               The Mountain\r
+                               Framingham  MA  01701-9168\r
+                               US\r
+\r
+78-D9-E9   (hex)               MOMENTUM IOT\r
+78D9E9     (base 16)           MOMENTUM IOT\r
+                               100 W. BROADWAY, STE. 500\r
+                               LONG BEACH  CA  90802\r
+                               US\r
+\r
+2C-08-23   (hex)               Sercomm France Sarl\r
+2C0823     (base 16)           Sercomm France Sarl\r
+                               2/4 Rue Maurice Hartmann 92370  Issy Les Moulineaux France\r
+                               Moulineaux    92370\r
+                               FR\r
+\r
+30-8E-7A   (hex)               Shenzhen iComm Semiconductor CO.,LTD\r
+308E7A     (base 16)           Shenzhen iComm Semiconductor CO.,LTD\r
+                               Room 504A,Block B,Digital Building,Gargen City,No.1079,Nanhai Road,Nanshan District,Shenzhen.\r
+                               Shenzhen    518067\r
+                               CN\r
+\r
+9C-1C-37   (hex)               AltoBeam (China) Inc.\r
+9C1C37     (base 16)           AltoBeam (China) Inc.\r
+                               B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian\r
+                               Beijing  Beijing  100083\r
+                               CN\r
+\r
+8C-E7-48   (hex)               Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+8CE748     (base 16)           Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+                               No.469,Jianghui Road\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+98-42-65   (hex)               Sagemcom Broadband SAS\r
+984265     (base 16)           Sagemcom Broadband SAS\r
+                               250, route de l'Empereur\r
+                               Rueil Malmaison Cedex  hauts de seine  92848\r
+                               FR\r
+\r
+B8-A3-77   (hex)               Cisco Systems, Inc\r
+B8A377     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+E4-4E-2D   (hex)               Cisco Systems, Inc\r
+E44E2D     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+00-CC-34   (hex)               Juniper Networks\r
+00CC34     (base 16)           Juniper Networks\r
+                               1133 Innovation Way\r
+                               Sunnyvale  CA  94089\r
+                               US\r
+\r
+1C-D1-07   (hex)               Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+1CD107     (base 16)           Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+                               No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.\r
+                               Chongqing   China  401120\r
+                               CN\r
+\r
+10-3D-1C   (hex)               Intel Corporate\r
+103D1C     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+38-87-D5   (hex)               Intel Corporate\r
+3887D5     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
 9C-FF-C2   (hex)               AVI Systems GmbH\r
 9CFFC2     (base 16)           AVI Systems GmbH\r
                                Dr. Franz Wilhelmstraße 2A\r
@@ -35843,12 +36395,6 @@ D0196A     (base 16)           Ciena Corporation
                                Beijing  Beijing  100012\r
                                CN\r
 \r
-84-C7-8F   (hex)               STORDIS GmbH\r
-84C78F     (base 16)           STORDIS GmbH\r
-                               Rosenwiesstr. 17\r
-                               Stuttgart    70567\r
-                               DE\r
-\r
 50-41-B9   (hex)               I-O DATA DEVICE,INC.\r
 5041B9     (base 16)           I-O DATA DEVICE,INC.\r
                                3-10,Sakurada-machi\r
@@ -39383,12 +39929,6 @@ FC8B97     (base 16)           SHENZHEN GONGJIN ELECTRONICS CO.,LT
                                Shenzhen  Guangdong  518109\r
                                CN\r
 \r
-00-1F-92   (hex)               Avigilon Corporation\r
-001F92     (base 16)           Avigilon Corporation\r
-                               Box 378, 101 - 1001 West Broadway\r
-                               Vancouver  BC  V6H 4E4\r
-                               CA\r
-\r
 00-0C-03   (hex)               HDMI Licensing, LLC\r
 000C03     (base 16)           HDMI Licensing, LLC\r
                                1060 East Arques Ave.\r
@@ -41225,18 +41765,6 @@ E0E7BB     (base 16)           Nureva, Inc.
                                Calgary  AB  T2R 0L4\r
                                CA\r
 \r
-00-80-8C   (hex)               NetAlly\r
-00808C     (base 16)           NetAlly\r
-                               310 Littleton Road\r
-                               Westford  MA  01886 \r
-                               US\r
-\r
-04-9F-81   (hex)               NetAlly\r
-049F81     (base 16)           NetAlly\r
-                               310 Littleton Road\r
-                               Westford  MA  01886 \r
-                               US\r
-\r
 00-10-87   (hex)               XSTREAMIS PLC\r
 001087     (base 16)           XSTREAMIS PLC\r
                                OXFORD SCIENCE PARK\r
@@ -53510,12 +54038,6 @@ D4AAFF     (base 16)           MICRO WORLD
                                San Luis Obispo  CA  93401\r
                                US\r
 \r
-00-23-BB   (hex)               Schmitt Industries\r
-0023BB     (base 16)           Schmitt Industries\r
-                               2765 NW Nicolai St\r
-                               Portland  Oregon  97210\r
-                               US\r
-\r
 00-23-8D   (hex)               Techno Design Co., Ltd.\r
 00238D     (base 16)           Techno Design Co., Ltd.\r
                                312-2\r
@@ -55439,12 +55961,6 @@ D4AAFF     (base 16)           MICRO WORLD
                                St. Ingbert  Saarland  66386\r
                                DE\r
 \r
-00-1A-86   (hex)               AdvancedIO Systems Inc\r
-001A86     (base 16)           AdvancedIO Systems Inc\r
-                               595 Howe Street, Suite 502\r
-                               Vancouver  BC  V6C 2T5\r
-                               CA\r
-\r
 00-1A-C7   (hex)               UNIPOINT\r
 001AC7     (base 16)           UNIPOINT\r
                                7F Gwangsung Bld 831-47 YeokSam-Dong\r
@@ -66416,12 +66932,6 @@ A4B239     (base 16)           Cisco Systems, Inc
                                San Jose  CA  94568\r
                                US\r
 \r
-D8-D5-B9   (hex)               Rainforest Automation, Inc.\r
-D8D5B9     (base 16)           Rainforest Automation, Inc.\r
-                               827 Cambie St.\r
-                               Vancouver  British Columbia  V6B 2P4\r
-                               CA\r
-\r
 00-1B-B0   (hex)               Bharat Electronics Limited\r
 001BB0     (base 16)           Bharat Electronics Limited\r
                                JALAHALLI POST\r
@@ -69383,6 +69893,66 @@ D4A651     (base 16)           Tuya Smart Inc.
                                Grand Rapids  MI  49505\r
                                US\r
 \r
+88-C3-E5   (hex)               Betop Techonologies \r
+88C3E5     (base 16)           Betop Techonologies \r
+                               6F., No. 669, Bannan Road, Zhonghe District\r
+                               New Taipei City    235\r
+                               TW\r
+\r
+E4-28-A4   (hex)               Prama India Private Limited\r
+E428A4     (base 16)           Prama India Private Limited\r
+                               Off 103, 765 Fly Edge, TPS III Jn of S V Rd, Nr Kora Kendra\r
+                               Borivali West, Mumbai  Maharashtra  400092\r
+                               IN\r
+\r
+94-3A-91   (hex)               Amazon Technologies Inc.\r
+943A91     (base 16)           Amazon Technologies Inc.\r
+                               P.O Box 8102 \r
+                               Reno  NV  89507\r
+                               US\r
+\r
+00-0F-A0   (hex)               CANON KOREA BUSINESS SOLUTIONS INC.\r
+000FA0     (base 16)           CANON KOREA BUSINESS SOLUTIONS INC.\r
+                               Canon BS Tower, 607 Teheran-ro\r
+                               Seoul  Gangnam-gu  06173\r
+                               KR\r
+\r
+40-8C-1F   (hex)               GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+408C1F     (base 16)           GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+                               NO.18 HAIBIN ROAD,\r
+                               DONG GUAN  GUANG DONG  523860\r
+                               CN\r
+\r
+2C-3F-0B   (hex)               Cisco Meraki\r
+2C3F0B     (base 16)           Cisco Meraki\r
+                               500 Terry A. Francois Blvd\r
+                               San Francisco    94158\r
+                               US\r
+\r
+80-C5-01   (hex)               OctoGate IT Security Systems GmbH\r
+80C501     (base 16)           OctoGate IT Security Systems GmbH\r
+                               Friedrich List Strasse 42\r
+                               Paderborn  NRW  33100\r
+                               DE\r
+\r
+04-F0-3E   (hex)               Huawei Device Co., Ltd.\r
+04F03E     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+78-E2-2C   (hex)               Huawei Device Co., Ltd.\r
+78E22C     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+C0-D0-26   (hex)               Huawei Device Co., Ltd.\r
+C0D026     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
 14-D1-9E   (hex)               Apple, Inc.\r
 14D19E     (base 16)           Apple, Inc.\r
                                1 Infinite Loop\r
@@ -69407,47 +69977,653 @@ D4A651     (base 16)         Tuya Smart Inc.
                                Cupertino  CA  95014\r
                                US\r
 \r
-00-0F-A0   (hex)               CANON KOREA BUSINESS SOLUTIONS INC.\r
-000FA0     (base 16)           CANON KOREA BUSINESS SOLUTIONS INC.\r
-                               Canon BS Tower, 607 Teheran-ro\r
-                               Seoul  Gangnam-gu  06173\r
+00-2D-B3   (hex)               AMPAK Technology,Inc.\r
+002DB3     (base 16)           AMPAK Technology,Inc.\r
+                               3F, No.15-1 Zhonghua Road, Hsinchu Industrail Park, Hukou,\r
+                               Hsinchu  Hsinchu,Taiwan R.O.C.  30352\r
+                               TW\r
+\r
+3C-C7-86   (hex)               DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.\r
+3CC786     (base 16)           DONGGUAN HUARONG COMMUNICATION TECHNOLOGIES CO.,LTD.\r
+                               No.130 Dongxing East Road, Dongkeng Town\r
+                               DONGGUAN    523450\r
+                               CN\r
+\r
+28-C8-7C   (hex)               zte corporation\r
+28C87C     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+14-50-51   (hex)               SHARP Corporation\r
+145051     (base 16)           SHARP Corporation\r
+                               1 Takumi-cho, Sakai-ku\r
+                               Sakai City  Osaka  590-8522\r
+                               JP\r
+\r
+C4-D0-E3   (hex)               Intel Corporate\r
+C4D0E3     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+E4-FD-45   (hex)               Intel Corporate\r
+E4FD45     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+18-4C-AE   (hex)               CONTINENTAL\r
+184CAE     (base 16)           CONTINENTAL\r
+                               1 AVENUE PAUL OURLIAC\r
+                               TOULOUSE    31100\r
+                               FR\r
+\r
+98-38-7D   (hex)               ITRONIC  TECHNOLOGY CO . , LTD .\r
+98387D     (base 16)           ITRONIC  TECHNOLOGY CO . , LTD .\r
+                               2F C Building Fu Xin Lin lndustrial Park Hangcheng\r
+                               lndustrial Zone Xixiang Street Baoan District  Shenzhen  518100\r
+                               CN\r
+\r
+C8-D8-84   (hex)               Universal Electronics, Inc.\r
+C8D884     (base 16)           Universal Electronics, Inc.\r
+                               201 E. Sandpointe Ave\r
+                               Santa Ana  CA  92707\r
+                               US\r
+\r
+B4-A2-5C   (hex)               Cambium Networks Limited\r
+B4A25C     (base 16)           Cambium Networks Limited\r
+                               Unit B2, Linhay Business Park,\r
+                               Ashburton  Devon  TQ13 7UP\r
+                               GB\r
+\r
+2C-71-FF   (hex)               Amazon Technologies Inc.\r
+2C71FF     (base 16)           Amazon Technologies Inc.\r
+                               P.O Box 8102 \r
+                               Reno  NV  89507\r
+                               US\r
+\r
+AC-D6-18   (hex)               OnePlus Technology (Shenzhen) Co., Ltd\r
+ACD618     (base 16)           OnePlus Technology (Shenzhen) Co., Ltd\r
+                               18C02, 18C03, 18C04 ,18C05,TAIRAN BUILDING,\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+6C-56-40   (hex)               BLU Products Inc\r
+6C5640     (base 16)           BLU Products Inc\r
+                               10814 NW 33rd Street\r
+                               Miami  FL  33172\r
+                               US\r
+\r
+48-78-5E   (hex)               Amazon Technologies Inc.\r
+48785E     (base 16)           Amazon Technologies Inc.\r
+                               P.O Box 8102 \r
+                               Reno  NV  89507\r
+                               US\r
+\r
+20-C7-4F   (hex)               SensorPush\r
+20C74F     (base 16)           SensorPush\r
+                               PO Box 211\r
+                               Garrison  NY  10524\r
+                               US\r
+\r
+48-29-52   (hex)               Sagemcom Broadband SAS\r
+482952     (base 16)           Sagemcom Broadband SAS\r
+                               250, route de l'Empereur\r
+                               Rueil Malmaison Cedex  hauts de seine  92848\r
+                               FR\r
+\r
+A4-7E-36   (hex)               EM Microelectronic\r
+A47E36     (base 16)           EM Microelectronic\r
+                               Rue des Sors 3\r
+                               Marin-Epagnier  Neuchatel  2074\r
+                               CH\r
+\r
+B0-5D-D4   (hex)               ARRIS Group, Inc.\r
+B05DD4     (base 16)           ARRIS Group, Inc.\r
+                               6450 Sequence Drive\r
+                               San Diego  CA  92121\r
+                               US\r
+\r
+24-E8-53   (hex)               LG Innotek\r
+24E853     (base 16)           LG Innotek\r
+                               26, Hanamsandan 5beon-ro\r
+                               Gwangju  Gwangsan-gu  506-731\r
                                KR\r
 \r
-40-8C-1F   (hex)               GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
-408C1F     (base 16)           GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+30-7C-4A   (hex)               Huawei Device Co., Ltd.\r
+307C4A     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+2C-CE-1E   (hex)               Cloudtronics Pty Ltd\r
+2CCE1E     (base 16)           Cloudtronics Pty Ltd\r
+                               Unit 1 6 Powells Road Brookvale\r
+                               Sydney  NSW  2100\r
+                               AU\r
+\r
+F0-21-E0   (hex)               eero inc.\r
+F021E0     (base 16)           eero inc.\r
+                               660 3rd Street\r
+                               San Francisco    94107\r
+                               US\r
+\r
+9C-DB-CB   (hex)               Wuhan Funshion Online Technologies Co.,Ltd\r
+9CDBCB     (base 16)           Wuhan Funshion Online Technologies Co.,Ltd\r
+                               5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan\r
+                               Wuhan  CN/Hubei  430000\r
+                               CN\r
+\r
+64-17-59   (hex)               Intellivision Holdings, LLC\r
+641759     (base 16)           Intellivision Holdings, LLC\r
+                               1844 E Carnegie\r
+                               Santa Ana  CA  92705\r
+                               US\r
+\r
+50-43-48   (hex)               ThingsMatrix Inc.\r
+504348     (base 16)           ThingsMatrix Inc.\r
+                               9442 North Capital of Texas Hwy Plaza One Suite 500 Austin\r
+                               Austin  TX  78759\r
+                               US\r
+\r
+D8-59-82   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+D85982     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+48-B2-5D   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+48B25D     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+2C-FD-B3   (hex)               TCL Technoly Electronics(Huizhou).,Ltd\r
+2CFDB3     (base 16)           TCL Technoly Electronics(Huizhou).,Ltd\r
+                               Section 37, Zhongkai Hi-Tech Development Zone\r
+                               Huizhou  Guangdong  516006\r
+                               CN\r
+\r
+A4-1B-34   (hex)               China Mobile Group Device Co.,Ltd.\r
+A41B34     (base 16)           China Mobile Group Device Co.,Ltd.\r
+                               32 Xuanwumen West Street,Xicheng District\r
+                               Beijing    100053\r
+                               CN\r
+\r
+80-45-DD   (hex)               Intel Corporate\r
+8045DD     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+C0-D4-6B   (hex)               Huawei Device Co., Ltd.\r
+C0D46B     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+9C-95-67   (hex)               Huawei Device Co., Ltd.\r
+9C9567     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+58-AE-F1   (hex)               Fiberhome Telecommunication Technologies Co.,LTD\r
+58AEF1     (base 16)           Fiberhome Telecommunication Technologies Co.,LTD\r
+                               No.5 DongXin Road\r
+                               Wuhan  Hubei  430074\r
+                               CN\r
+\r
+A4-7B-1A   (hex)               Huawei Device Co., Ltd.\r
+A47B1A     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+14-7D-05   (hex)               SERCOMM PHILIPPINES INC\r
+147D05     (base 16)           SERCOMM PHILIPPINES INC\r
+                               Lot 1 & 5, Phase 1, Filinvest Technology Park 1, Brgy. Punta, Calamba City\r
+                               Calamba    Lot 1\r
+                               PH\r
+\r
+78-7A-6F   (hex)               Juice Technology AG\r
+787A6F     (base 16)           Juice Technology AG\r
+                               Gewerbestrasse 7\r
+                               Cham  Select State  CH-6330\r
+                               CH\r
+\r
+E8-6C-C7   (hex)               IEEE Registration Authority\r
+E86CC7     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+40-24-B2   (hex)               Sichuan AI-Link Technology Co., Ltd.\r
+4024B2     (base 16)           Sichuan AI-Link Technology Co., Ltd.\r
+                               Anzhou, Industrial Park\r
+                               Mianyang  Sichuan  622650\r
+                               CN\r
+\r
+64-0D-22   (hex)               LG Electronics (Mobile Communications)\r
+640D22     (base 16)           LG Electronics (Mobile Communications)\r
+                               60-39, Gasan-dong, Geumcheon-gu\r
+                               Seoul    153-801\r
+                               KR\r
+\r
+20-A7-F9   (hex)               SHENZHEN OLANBOA TECHNOLOGY CO., LTD\r
+20A7F9     (base 16)           SHENZHEN OLANBOA TECHNOLOGY CO., LTD\r
+                               4/F, Building B, Block A, Longquan Science Park, Tongfuyu Phase II, Tongsheng Community, Dalang Street, Longhua District, Shenzhen\r
+                               shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+C0-06-C3   (hex)               TP-Link Corporation Limited\r
+C006C3     (base 16)           TP-Link Corporation Limited\r
+                               Room 901,9/F.New East Ocean Centre, 9 Science Museum Road\r
+                                Tsim Sha Tsui  Kowloon  999077\r
+                               HK\r
+\r
+3C-15-12   (hex)               Shenzhen Huanhu Technology Co.,Ltd\r
+3C1512     (base 16)           Shenzhen Huanhu Technology Co.,Ltd\r
+                                7 / F, building C4, Hengfeng Industrial City, 739 Zhoushi Road, Hezhou community, Hangcheng street, Bao'an District, Shenzhen\r
+                               Shenzhen    518000\r
+                               CN\r
+\r
+8C-31-E2   (hex)               DAYOUPLUS\r
+8C31E2     (base 16)           DAYOUPLUS\r
+                               3F 509, Dunchon-daero, Jungwon-gu, Seongnam-si, Gyeonggi-do, Republic of Korea\r
+                               Seongnam-si  Gyeonggi-do  13217\r
+                               KR\r
+\r
+10-39-4E   (hex)               Hisense broadband multimedia technology Co.,Ltd\r
+10394E     (base 16)           Hisense broadband multimedia technology Co.,Ltd\r
+                               Song ling Road 399\r
+                               Qingdao    266000\r
+                               CN\r
+\r
+D8-D5-B9   (hex)               Rainforest Automation, Inc.\r
+D8D5B9     (base 16)           Rainforest Automation, Inc.\r
+                               200 â€“ 311 Pender St. W\r
+                               Vancouver  British Columbia  V6B 1T3\r
+                               CA\r
+\r
+04-BA-1C   (hex)               Huawei Device Co., Ltd.\r
+04BA1C     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+7C-3D-2B   (hex)               Huawei Device Co., Ltd.\r
+7C3D2B     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+18-C2-41   (hex)               SonicWall\r
+18C241     (base 16)           SonicWall\r
+                               1033 McCarthy Blvd\r
+                               Milpitas  CA  95035\r
+                               US\r
+\r
+58-45-4C   (hex)               Ericsson AB\r
+58454C     (base 16)           Ericsson AB\r
+                               Torshamnsgatan 36\r
+                               Stockholm    SE-164 80\r
+                               SE\r
+\r
+FC-4D-A6   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+FC4DA6     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+B4-14-E6   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+B414E6     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+AC-99-29   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+AC9929     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+18-48-59   (hex)               Castlenet Technology Inc.\r
+184859     (base 16)           Castlenet Technology Inc.\r
+                               5th Fl., No.159-1, Sec.3, Beishen Rd., Shenkeng Dist., \r
+                               New Taipei City    222004\r
+                               TW\r
+\r
+14-51-7E   (hex)               New H3C Technologies Co., Ltd\r
+14517E     (base 16)           New H3C Technologies Co., Ltd\r
+                               466 Changhe Road, Binjiang District\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+08-3A-38   (hex)               New H3C Technologies Co., Ltd\r
+083A38     (base 16)           New H3C Technologies Co., Ltd\r
+                               466 Changhe Road, Binjiang District\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+70-F0-88   (hex)               Nintendo Co.,Ltd\r
+70F088     (base 16)           Nintendo Co.,Ltd\r
+                               11-1 HOKOTATE-CHO KAMITOBA,MINAMI-KU\r
+                               KYOTO  KYOTO  601-8501\r
+                               JP\r
+\r
+84-23-88   (hex)               Ruckus Wireless\r
+842388     (base 16)           Ruckus Wireless\r
+                               350 West Java Drive\r
+                               Sunnyvale  CA  94089\r
+                               US\r
+\r
+F4-C7-AA   (hex)               Marvell Semiconductors\r
+F4C7AA     (base 16)           Marvell Semiconductors\r
+                               15485 Sand Canyon Ave\r
+                               IRVINE  CA  92618\r
+                               US\r
+\r
+F8-AB-E5   (hex)               shenzhen worldelite electronics co., LTD\r
+F8ABE5     (base 16)           shenzhen worldelite electronics co., LTD\r
+                               Office 5 F, Xiang Yu Industrial Park, Longsheng Road, Longgang Dist\r
+                               Shenzhen  Guangdong  51800\r
+                               CN\r
+\r
+E0-DB-D1   (hex)               Technicolor CH USA Inc.\r
+E0DBD1     (base 16)           Technicolor CH USA Inc.\r
+                               5030 Sugarloaf Parkway Bldg 6 \r
+                               Lawrenceville  GA  30044\r
+                               US\r
+\r
+CC-ED-21   (hex)               Nokia Shanghai Bell Co., Ltd.\r
+CCED21     (base 16)           Nokia Shanghai Bell Co., Ltd.\r
+                               No.388 Ning Qiao Road,Jin Qiao Pudong Shanghai\r
+                               Shanghai     201206\r
+                               CN\r
+\r
+10-D5-61   (hex)               Tuya Smart Inc.\r
+10D561     (base 16)           Tuya Smart Inc.\r
+                               160 Greentree Drive, Suite 101\r
+                               Dover  DE  19904\r
+                               US\r
+\r
+00-1A-86   (hex)               New Wave Design & Verification\r
+001A86     (base 16)           New Wave Design & Verification\r
+                               4950 W 78th St.\r
+                               Minneapolis  MN  55435\r
+                               US\r
+\r
+50-9A-46   (hex)               Safetrust Inc\r
+509A46     (base 16)           Safetrust Inc\r
+                               8112 Mill Creek Rd\r
+                               Fremont  CA  94539\r
+                               US\r
+\r
+D0-CF-D8   (hex)               Huizhou Boshijie Technology Co.,Ltd\r
+D0CFD8     (base 16)           Huizhou Boshijie Technology Co.,Ltd\r
+                               No.1 Xisan road, Huifeng west road, Zhongkai high-tech zone\r
+                               Huizhou  Guangdong  516006\r
+                               CN\r
+\r
+84-C7-8F   (hex)               APS Networks GmbH\r
+84C78F     (base 16)           APS Networks GmbH\r
+                               Rosenwiesstr. 17\r
+                               Stuttgart    70567\r
+                               DE\r
+\r
+F0-A3-B2   (hex)               Hui Zhou Gaoshengda Technology Co.,LTD\r
+F0A3B2     (base 16)           Hui Zhou Gaoshengda Technology Co.,LTD\r
+                               No.75,Zhongkai High-Tech Development District,Huizhou\r
+                               Hui Zhou  Guangdong  516006\r
+                               CN\r
+\r
+08-BB-3C   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
+08BB3C     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
+                               365, Benjamin Road\r
+                               Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646\r
+                               IN\r
+\r
+2C-BE-EB   (hex)               Nothing Technology Limited\r
+2CBEEB     (base 16)           Nothing Technology Limited\r
+                               11 Staple Inn\r
+                               London  London  WC1V 7QH\r
+                               GB\r
+\r
+F0-4A-02   (hex)               Cisco Systems, Inc\r
+F04A02     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+74-09-AC   (hex)               Quext, LLC\r
+7409AC     (base 16)           Quext, LLC\r
+                               5214 68th St., Suite 201\r
+                               Lubbock  TX  79424\r
+                               US\r
+\r
+F0-01-6E   (hex)               Tianyi Telecom Terminals Company Limited\r
+F0016E     (base 16)           Tianyi Telecom Terminals Company Limited\r
+                               6/F Changshang Building, No.29 North Xinhua Street, Xicheng District\r
+                               Beijing    100031\r
+                               CN\r
+\r
+EC-0B-AE   (hex)               Hangzhou BroadLink Technology Co.,Ltd\r
+EC0BAE     (base 16)           Hangzhou BroadLink Technology Co.,Ltd\r
+                               Room 101,1/F,Unit C,Building 1,No.57 Jiang'er Road,Changhe Street,Binjiang District,Hangzhou,Zhejiang,P.R.China\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+80-25-11   (hex)               ITEL MOBILE LIMITED\r
+802511     (base 16)           ITEL MOBILE LIMITED\r
+                               RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K\r
+                               Hong Kong  KOWLOON  999077\r
+                               HK\r
+\r
+E8-A6-60   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E8A660     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+CC-24-2E   (hex)               Shenzhen SuperElectron Technology Co.,Ltd.\r
+CC242E     (base 16)           Shenzhen SuperElectron Technology Co.,Ltd.\r
+                               1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+08-2F-E9   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+082FE9     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+98-48-74   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+984874     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+1C-A6-81   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+1CA681     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+B8-81-FA   (hex)               Apple, Inc.\r
+B881FA     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+9C-76-0E   (hex)               Apple, Inc.\r
+9C760E     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+94-EA-32   (hex)               Apple, Inc.\r
+94EA32     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+C8-BF-FE   (hex)               Huawei Device Co., Ltd.\r
+C8BFFE     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+08-2E-36   (hex)               Huawei Device Co., Ltd.\r
+082E36     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+50-F4-EB   (hex)               Apple, Inc.\r
+50F4EB     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+28-C7-09   (hex)               Apple, Inc.\r
+28C709     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+38-02-DE   (hex)               Sercomm Corporation.\r
+3802DE     (base 16)           Sercomm Corporation.\r
+                               3F,No.81,Yu-Yih Rd.,Chu-Nan Chen\r
+                               Miao-Lih Hsuan    115\r
+                               TW\r
+\r
+5C-62-5A   (hex)               CANON INC.\r
+5C625A     (base 16)           CANON INC.\r
+                               30-2 Shimomaruko 3-chome,\r
+                               Ohta-ku  Tokyo  146-8501\r
+                               JP\r
+\r
+7C-0A-3F   (hex)               Samsung Electronics Co.,Ltd\r
+7C0A3F     (base 16)           Samsung Electronics Co.,Ltd\r
+                               129, Samsung-ro, Youngtongl-Gu\r
+                               Suwon  Gyeonggi-Do  16677\r
+                               KR\r
+\r
+08-AA-89   (hex)               zte corporation\r
+08AA89     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+A4-35-2D   (hex)               TRIZ Networks corp.\r
+A4352D     (base 16)           TRIZ Networks corp.\r
+                               815 Daewangpangyo-ro\r
+                               Sujeong-gu, Seongnam-si  Gyeonggi-do  13449\r
+                               KR\r
+\r
+04-D6-0E   (hex)               FUNAI ELECTRIC CO., LTD.\r
+04D60E     (base 16)           FUNAI ELECTRIC CO., LTD.\r
+                               7-7-1, Nakagaito\r
+                               Daito  Osaka  574-0013\r
+                               JP\r
+\r
+04-9F-81   (hex)               NETSCOUT SYSTEMS INC\r
+049F81     (base 16)           NETSCOUT SYSTEMS INC\r
+                               310 Littleton Road\r
+                               Westford  MA  01886 \r
+                               US\r
+\r
+00-80-8C   (hex)               NETSCOUT SYSTEMS INC\r
+00808C     (base 16)           NETSCOUT SYSTEMS INC\r
+                               310 Littleton Road\r
+                               Westford  MA  01886 \r
+                               US\r
+\r
+00-1F-92   (hex)               Motorola Solutions Inc.\r
+001F92     (base 16)           Motorola Solutions Inc.\r
+                               500 W Monroe Street, Ste 4400\r
+                               Chicago  IL  60661-3781\r
+                               US\r
+\r
+00-23-BB   (hex)               Accretech SBS, Inc.\r
+0023BB     (base 16)           Accretech SBS, Inc.\r
+                               2451 NW 28th Ave.\r
+                               Portland  OR  97210\r
+                               US\r
+\r
+B0-C9-52   (hex)               GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+B0C952     (base 16)           GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
                                NO.18 HAIBIN ROAD,\r
                                DONG GUAN  GUANG DONG  523860\r
                                CN\r
 \r
-04-F0-3E   (hex)               Huawei Device Co., Ltd.\r
-04F03E     (base 16)           Huawei Device Co., Ltd.\r
+F4-41-9E   (hex)               Huawei Device Co., Ltd.\r
+F4419E     (base 16)           Huawei Device Co., Ltd.\r
                                No.2 of Xincheng Road, Songshan Lake Zone\r
                                Dongguan  Guangdong  523808\r
                                CN\r
 \r
-78-E2-2C   (hex)               Huawei Device Co., Ltd.\r
-78E22C     (base 16)           Huawei Device Co., Ltd.\r
+90-F9-B7   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+90F9B7     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+F4-45-88   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+F44588     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+C8-BB-81   (hex)               Huawei Device Co., Ltd.\r
+C8BB81     (base 16)           Huawei Device Co., Ltd.\r
                                No.2 of Xincheng Road, Songshan Lake Zone\r
                                Dongguan  Guangdong  523808\r
                                CN\r
 \r
-C0-D0-26   (hex)               Huawei Device Co., Ltd.\r
-C0D026     (base 16)           Huawei Device Co., Ltd.\r
+1C-47-2F   (hex)               Huawei Device Co., Ltd.\r
+1C472F     (base 16)           Huawei Device Co., Ltd.\r
                                No.2 of Xincheng Road, Songshan Lake Zone\r
                                Dongguan  Guangdong  523808\r
                                CN\r
 \r
-2C-3F-0B   (hex)               Cisco Meraki\r
-2C3F0B     (base 16)           Cisco Meraki\r
-                               500 Terry A. Francois Blvd\r
-                               San Francisco    94158\r
+20-5E-64   (hex)               Huawei Device Co., Ltd.\r
+205E64     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+60-57-7D   (hex)               eero inc.\r
+60577D     (base 16)           eero inc.\r
+                               660 3rd Street\r
+                               San Francisco  CA  94107\r
                                US\r
 \r
-80-C5-01   (hex)               OctoGate IT Security Systems GmbH\r
-80C501     (base 16)           OctoGate IT Security Systems GmbH\r
-                               Friedrich List Strasse 42\r
-                               Paderborn  NRW  33100\r
-                               DE\r
+C8-13-8B   (hex)               Shenzhen Skyworth  Digital  Technology  CO., Ltd\r
+C8138B     (base 16)           Shenzhen Skyworth  Digital  Technology  CO., Ltd\r
+                               4F,Block A, Skyworth?Building,\r
+                               Shenzhen  Guangdong  518057\r
+                               CN\r
+\r
+78-F2-35   (hex)               Sichuan AI-Link Technology Co., Ltd.\r
+78F235     (base 16)           Sichuan AI-Link Technology Co., Ltd.\r
+                               Anzhou, Industrial Park\r
+                               Mianyang  Sichuan  622650\r
+                               CN\r
+\r
+F4-4E-E3   (hex)               Intel Corporate\r
+F44EE3     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+D0-E0-42   (hex)               Cisco Systems, Inc\r
+D0E042     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
 \r
 84-80-94   (hex)               Meter, Inc.\r
 848094     (base 16)           Meter, Inc.\r
@@ -70562,9 +71738,6 @@ DCED84     (base 16)            Haverford Systems Inc
                                San Jose  CA  94568\r
                                US\r
 \r
-28-EF-01   (hex)               Private\r
-28EF01     (base 16)           Private\r
-\r
 C0-53-36   (hex)               Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.\r
 C05336     (base 16)           Beijing National Railway Research & Design Institute of Signal & Communication Group Co..Ltd.\r
                                7 floor, No.1 Automobile Museum South Road, Fengtai Science and Technology Park,\r
@@ -87005,12 +88178,6 @@ F0BDF1     (base 16)           Sipod Inc.
                                Beijing    100190\r
                                CN\r
 \r
-58-FD-20   (hex)               Bravida Sakerhet AB\r
-58FD20     (base 16)           Bravida Sakerhet AB\r
-                               Mikrofonvagen 28\r
-                               STOCKHOLM    126 81\r
-                               SE\r
-\r
 AC-A0-16   (hex)               Cisco Systems, Inc\r
 ACA016     (base 16)           Cisco Systems, Inc\r
                                80 West Tasman Drive\r
@@ -87221,12 +88388,6 @@ DC1D9F     (base 16)           U & B tech
                                Anyang-Si  Gyeonggi-Do  431-061\r
                                KR\r
 \r
-D8-E7-2B   (hex)               NetAlly\r
-D8E72B     (base 16)           NetAlly\r
-                               310 Littleton Road\r
-                               Westford  MA  01886 \r
-                               US\r
-\r
 78-5C-72   (hex)               Hioso Technology Co., Ltd.\r
 785C72     (base 16)           Hioso Technology Co., Ltd.\r
                                6th Floor, 12th Building, Wangtang Industrial Zone,\r
@@ -90848,12 +92009,6 @@ D8D67E     (base 16)           GSK CNC EQUIPMENT CO.,LTD
                                Paris    75001\r
                                FR\r
 \r
-00-18-85   (hex)               Avigilon Corporation\r
-001885     (base 16)           Avigilon Corporation\r
-                               Box 378, 101 - 1001 West Broadway\r
-                               Vancouver  BC  V6H 4E4\r
-                               CA\r
-\r
 00-18-88   (hex)               GOTIVE a.s.\r
 001888     (base 16)           GOTIVE a.s.\r
                                Zámocká 34\r
@@ -95123,12 +96278,6 @@ D8D67E     (base 16)           GSK CNC EQUIPMENT CO.,LTD
                                Kyunggi-Do    435-040\r
                                KR\r
 \r
-00-08-0C   (hex)               VDA Elettronica spa\r
-00080C     (base 16)           VDA Elettronica spa\r
-                               Viale Lino Zanussi, 3\r
-                               33170  Pordenone  \r
-                               IT\r
-\r
 00-08-04   (hex)               ICA Inc.\r
 000804     (base 16)           ICA Inc.\r
                                542-1 Noguki\r
@@ -100766,12 +101915,6 @@ AA0002     (base 16)         DIGITAL EQUIPMENT CORPORATION
                                Chatsworth  CA  91311\r
                                US\r
 \r
-E4-05-F8   (hex)               Delta Innovation Technology Co., Ltd.\r
-E405F8     (base 16)           Delta Innovation Technology Co., Ltd.\r
-                               China Digital Kingdom Building, Chaoyang District\r
-                               Beijing  Beijing  100102\r
-                               CN\r
-\r
 00-00-09   (hex)               XEROX CORPORATION\r
 000009     (base 16)           XEROX CORPORATION\r
                                M/S 105-50C\r
@@ -104327,18 +105470,648 @@ CCC95D     (base 16)               Apple, Inc.
                                Piscataway  NJ  08554\r
                                US\r
 \r
-34-56-FE   (hex)               Cisco Meraki\r
-3456FE     (base 16)           Cisco Meraki\r
+C8-94-02   (hex)               CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+C89402     (base 16)           CHONGQING FUGUI ELECTRONICS CO.,LTD.\r
+                               Building D21,No.1, East Zone 1st Road,Xiyong Town,Shapingba District\r
+                               Chongqing  Chongqing  401332\r
+                               CN\r
+\r
+7C-B9-4C   (hex)               Bouffalo Lab (Nanjing) Co., Ltd.\r
+7CB94C     (base 16)           Bouffalo Lab (Nanjing) Co., Ltd.\r
+                               5F, Gongxiang Space, No.100 Tuanjie Road, Nanjing, China\r
+                               Nanjing  Jiangsu  211800\r
+                               CN\r
+\r
+DC-15-C8   (hex)               AVM Audiovisuelles Marketing und Computersysteme GmbH\r
+DC15C8     (base 16)           AVM Audiovisuelles Marketing und Computersysteme GmbH\r
+                               Alt-Moabit 95\r
+                               Berlin  Berlin  10559\r
+                               DE\r
+\r
+6C-D6-30   (hex)               Rootous System Co.,Ltd\r
+6CD630     (base 16)           Rootous System Co.,Ltd\r
+                               KT B/D 4Floor, 100, Ahopgeori-gil\r
+                               Yeonseo-myeon  Sejong-si  30049\r
+                               KR\r
+\r
+B8-07-56   (hex)               Cisco Meraki\r
+B80756     (base 16)           Cisco Meraki\r
                                500 Terry A. Francois Blvd\r
                                San Francisco    94158\r
                                US\r
 \r
-B8-07-56   (hex)               Cisco Meraki\r
-B80756     (base 16)           Cisco Meraki\r
+C8-33-E5   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+C833E5     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+34-56-FE   (hex)               Cisco Meraki\r
+3456FE     (base 16)           Cisco Meraki\r
                                500 Terry A. Francois Blvd\r
                                San Francisco    94158\r
                                US\r
 \r
+B8-44-AE   (hex)               TCT mobile ltd\r
+B844AE     (base 16)           TCT mobile ltd\r
+                               No.86 hechang 7th road, zhongkai, Hi-Tech District\r
+                               Hui Zhou  Guang Dong  516006\r
+                               CN\r
+\r
+E4-F7-5B   (hex)               ARRIS Group, Inc.\r
+E4F75B     (base 16)           ARRIS Group, Inc.\r
+                               6450 Sequence Drive\r
+                               San Diego  CA  92121\r
+                               US\r
+\r
+F8-79-0A   (hex)               ARRIS Group, Inc.\r
+F8790A     (base 16)           ARRIS Group, Inc.\r
+                               6450 Sequence Drive\r
+                               San Diego  CA  92121\r
+                               US\r
+\r
+0C-CF-89   (hex)               SHENZHEN BILIAN ELECTRONIC CO.,LTD\r
+0CCF89     (base 16)           SHENZHEN BILIAN ELECTRONIC CO.,LTD\r
+                               NO.268? Fuqian Rd, Jutang community, Guanlan Town, Longhua New district\r
+                               shenzhen  guangdong  518000\r
+                               CN\r
+\r
+0C-8C-69   (hex)               Shenzhen elink smart Co., ltd\r
+0C8C69     (base 16)           Shenzhen elink smart Co., ltd\r
+                               Floor 2,Building A , Hongtian Xinfengze Industrial   Park Huang Pu Community , Xin Qiao District ,Baoan Area\r
+                               shenzhen  Guangdong Province  518101\r
+                               CN\r
+\r
+D8-BB-C1   (hex)               Micro-Star INTL CO., LTD.\r
+D8BBC1     (base 16)           Micro-Star INTL CO., LTD.\r
+                               No.69, Lide St.,\r
+                               New Taipei City  Taiwan  235\r
+                               TW\r
+\r
+AC-5A-FC   (hex)               Intel Corporate\r
+AC5AFC     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+1C-93-7C   (hex)               ARRIS Group, Inc.\r
+1C937C     (base 16)           ARRIS Group, Inc.\r
+                               6450 Sequence Drive\r
+                               San Diego  CA  92121\r
+                               US\r
+\r
+58-FC-20   (hex)               Altice Labs S.A.\r
+58FC20     (base 16)           Altice Labs S.A.\r
+                               NIF 504705610, Rua Eng. José Ferreira Pinto Basto\r
+                               Aveiro    3810-106\r
+                               PT\r
+\r
+58-FD-20   (hex)               Systemhouse Solutions AB\r
+58FD20     (base 16)           Systemhouse Solutions AB\r
+                               Mikrofonvagen 28\r
+                               STOCKHOLM    126 81\r
+                               SE\r
+\r
+04-D6-F4   (hex)               GD Midea Air-Conditioning Equipment Co.,Ltd.\r
+04D6F4     (base 16)           GD Midea Air-Conditioning Equipment Co.,Ltd.\r
+                               Midea Global Innovation Center,Beijiao Town,Shunde\r
+                               Foshan  Guangdong  528311\r
+                               CN\r
+\r
+04-90-81   (hex)               Pensando Systems, Inc.\r
+049081     (base 16)           Pensando Systems, Inc.\r
+                               570 Alder Drive\r
+                               Milpitas  CA  95035\r
+                               US\r
+\r
+4C-79-6E   (hex)               Intel Corporate\r
+4C796E     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+98-AD-1D   (hex)               Huawei Device Co., Ltd.\r
+98AD1D     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+F8-AA-3F   (hex)               DWnet Technologies(Suzhou) Corporation\r
+F8AA3F     (base 16)           DWnet Technologies(Suzhou) Corporation\r
+                               No.8,Tangzhuang Road, Suzhou Industrial Park, Jiangsu, China\r
+                               Suzhou    21500\r
+                               CN\r
+\r
+00-68-2B   (hex)               Huawei Device Co., Ltd.\r
+00682B     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+F0-9E-4A   (hex)               Intel Corporate\r
+F09E4A     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+F0-77-C3   (hex)               Intel Corporate\r
+F077C3     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+24-9A-D8   (hex)               YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.\r
+249AD8     (base 16)           YEALINK(XIAMEN) NETWORK TECHNOLOGY CO.,LTD.\r
+                               309, 3th Floor, No.16, Yun Ding North Road, Huli District\r
+                               xiamen  Fujian  361015\r
+                               CN\r
+\r
+D8-5E-D3   (hex)               GIGA-BYTE TECHNOLOGY CO.,LTD.\r
+D85ED3     (base 16)           GIGA-BYTE TECHNOLOGY CO.,LTD.\r
+                               Pin-Jen City, Taoyuan, Taiwan, R.O.C.\r
+                               Pin-Jen  Taoyuan  324\r
+                               TW\r
+\r
+00-E4-21   (hex)               Sony Interactive Entertainment Inc.\r
+00E421     (base 16)           Sony Interactive Entertainment Inc.\r
+                               1-7-1 Konan\r
+                               Minato-ku  Tokyo  108-0075\r
+                               JP\r
+\r
+CC-DB-04   (hex)               DataRemote Inc.\r
+CCDB04     (base 16)           DataRemote Inc.\r
+                               18001 Old Cutler Rd. Suite 600\r
+                               Palmetto Bay  FL  33157\r
+                               US\r
+\r
+E8-9F-39   (hex)               Nokia\r
+E89F39     (base 16)           Nokia\r
+                               600 March Road\r
+                               Kanata  Ontario  K2K 2E6\r
+                               CA\r
+\r
+34-73-5A   (hex)               Dell Inc.\r
+34735A     (base 16)           Dell Inc.\r
+                               One Dell Way\r
+                               Round Rock  TX  78682\r
+                               US\r
+\r
+8C-AA-CE   (hex)               Xiaomi Communications Co Ltd\r
+8CAACE     (base 16)           Xiaomi Communications Co Ltd\r
+                               The Rainbow City of China Resources\r
+                               NO.68, Qinghe Middle Street  Haidian District, Beijing  100085\r
+                               CN\r
+\r
+98-1A-35   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+981A35     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+80-34-28   (hex)               Microchip Technology Inc.\r
+803428     (base 16)           Microchip Technology Inc.\r
+                               2355 W. Chandler Blvd.\r
+                               Chandler  AZ  85224\r
+                               US\r
+\r
+28-EF-01   (hex)               Amazon Technologies Inc.\r
+28EF01     (base 16)           Amazon Technologies Inc.\r
+                               P.O Box 8102\r
+                               Reno  NV  89507\r
+                               US\r
+\r
+B0-22-7A   (hex)               HP Inc.\r
+B0227A     (base 16)           HP Inc.\r
+                               10300 Energy Dr\r
+                               Spring  TX  77389\r
+                               US\r
+\r
+60-A7-51   (hex)               Huawei Device Co., Ltd.\r
+60A751     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+10-2B-41   (hex)               Samsung Electronics Co.,Ltd\r
+102B41     (base 16)           Samsung Electronics Co.,Ltd\r
+                               129, Samsung-ro, Youngtongl-Gu\r
+                               Suwon  Gyeonggi-Do  16677\r
+                               KR\r
+\r
+34-4A-C3   (hex)               HuNan ZiKun Information Technology CO., Ltd\r
+344AC3     (base 16)           HuNan ZiKun Information Technology CO., Ltd\r
+                               101-8, 1st Floor, Juxing Venture Base, No. 8 Lujing Road, GaoXin Development District\r
+                               Changsha City  Hunan Province  410000\r
+                               CN\r
+\r
+68-2D-83   (hex)               SHENZHEN DINGHE COMMUNICATION COMPANY\r
+682D83     (base 16)           SHENZHEN DINGHE COMMUNICATION COMPANY\r
+                               ROOM 1802, BAOYUNDA WULIU INFORMATION BUILDING\r
+                               SHENZHEN  GUANGDONG  518101\r
+                               CN\r
+\r
+A8-43-97   (hex)               Innogrit Corporation\r
+A84397     (base 16)           Innogrit Corporation\r
+                               1735 Technology Dr, Suite 620\r
+                               San Jose  CA  95110\r
+                               US\r
+\r
+D8-CD-2C   (hex)               WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD\r
+D8CD2C     (base 16)           WUXI NEIHUA NETWORK TECHNOLOGY CO., LTD\r
+                               16 Lexing Road, Xinwu  District\r
+                               Wuxi  Jiangsu  214000\r
+                               CN\r
+\r
+58-D3-91   (hex)               Quectel Wireless Solutions Co., Ltd.\r
+58D391     (base 16)           Quectel Wireless Solutions Co., Ltd.\r
+                               7th Floor, Hongye Building, No.1801 Hongmei Road, Xuhui District\r
+                               Shanghai    200233\r
+                               CN\r
+\r
+08-47-4C   (hex)               Nokia\r
+08474C     (base 16)           Nokia\r
+                               600 March Road\r
+                               Kanata  Ontario  K2K 2E6\r
+                               CA\r
+\r
+90-C1-19   (hex)               Nokia\r
+90C119     (base 16)           Nokia\r
+                               600 March Road\r
+                               Kanata  Ontario  K2K 2E6\r
+                               CA\r
+\r
+7C-F8-80   (hex)               Cisco Systems, Inc\r
+7CF880     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+E4-05-F8   (hex)               Bytedance\r
+E405F8     (base 16)           Bytedance\r
+                               E World Center,11 Zhongguancun Street Haidian Dist\r
+                               Beijing City  Beijing  100102\r
+                               CN\r
+\r
+F8-45-C4   (hex)               Shenzhen Netforward Micro-Electronic Co., Ltd.\r
+F845C4     (base 16)           Shenzhen Netforward Micro-Electronic Co., Ltd.\r
+                               Room 611-2?6st Floor,Building 1, The Sunmax Technology Park, No 8 Keyuan Road, Nanshan District\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+78-10-53   (hex)               China Mobile Group Device Co.,Ltd.\r
+781053     (base 16)           China Mobile Group Device Co.,Ltd.\r
+                               32 Xuanwumen West Street,Xicheng District\r
+                               Beijing    100053\r
+                               CN\r
+\r
+9C-4F-5F   (hex)               TAP Sound System\r
+9C4F5F     (base 16)           TAP Sound System\r
+                               15 rue Castel\r
+                               Fontenay-sous-Bois    94120\r
+                               FR\r
+\r
+00-08-0C   (hex)               VDA Group S.p.a.\r
+00080C     (base 16)           VDA Group S.p.a.\r
+                               Viale Lino Zanussi 3\r
+                               Pordenone  Pordenone  33170\r
+                               IT\r
+\r
+D0-97-FE   (hex)               Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+D097FE     (base 16)           Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+                               No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.\r
+                               Chongqing   China  401120\r
+                               CN\r
+\r
+84-3A-5B   (hex)               Inventec(Chongqing) Corporation\r
+843A5B     (base 16)           Inventec(Chongqing) Corporation\r
+                               No.66 West District 2nd Rd, Shapingba District\r
+                               Chongqing  Chongqing  401331\r
+                               CN\r
+\r
+54-49-DF   (hex)               Peloton Interactive, Inc\r
+5449DF     (base 16)           Peloton Interactive, Inc\r
+                               158 W 27th St, 4th Fl\r
+                               New York  NY  10001\r
+                               US\r
+\r
+18-2A-57   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+182A57     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+F8-3E-95   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+F83E95     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+48-12-58   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+481258     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+D8-EB-46   (hex)               Google, Inc.\r
+D8EB46     (base 16)           Google, Inc.\r
+                               1600 Amphitheatre Parkway\r
+                               Mountain View  CA  94043\r
+                               US\r
+\r
+2C-17-E0   (hex)               SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)\r
+2C17E0     (base 16)           SYSTEMES ET TECHNOLOGIES IDENTIFICATION (STid)\r
+                               20 Parc d’activités des Pradeaux\r
+                               GREASQUE  Select State  F-13850\r
+                               FR\r
+\r
+CC-32-96   (hex)               Huawei Device Co., Ltd.\r
+CC3296     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+98-CD-AC   (hex)               Espressif Inc.\r
+98CDAC     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+80-8A-F7   (hex)               Nanoleaf\r
+808AF7     (base 16)           Nanoleaf\r
+                               100 Front Street East, 4th Floor\r
+                               Toronto  Ontario  M5A 1E1\r
+                               CA\r
+\r
+B0-3D-C2   (hex)               Wasp artificial intelligence(Shenzhen) Co.,ltd\r
+B03DC2     (base 16)           Wasp artificial intelligence(Shenzhen) Co.,ltd\r
+                               A402,Block ABCD,Building 3,Phase 1,Tianan Yungu Industrial Park,Gangtou Comunity,Bantian Street,Longhua District,Shenzhen\r
+                               Shenzhen  Select State  518000\r
+                               CN\r
+\r
+C8-4D-34   (hex)               LIONS Taiwan Technology Inc.\r
+C84D34     (base 16)           LIONS Taiwan Technology Inc.\r
+                               3F-2, 120, Sec. 2, Gongdao 5th Rd.\r
+                               Hsinchu  Taiwan  30072\r
+                               TW\r
+\r
+44-6F-F8   (hex)               Dyson Limited\r
+446FF8     (base 16)           Dyson Limited\r
+                               Tetbury Hill\r
+                               Malmesbury  Wiltshire  SN16 0RP\r
+                               GB\r
+\r
+6C-1B-3F   (hex)               MiraeSignal Co., Ltd\r
+6C1B3F     (base 16)           MiraeSignal Co., Ltd\r
+                               #701,C-dong Bundang Techno Park Pangyoro 744\r
+                               Bundang-gu Sungnam-si  Kyungkido  13510\r
+                               KR\r
+\r
+28-AF-FD   (hex)               Cisco Systems, Inc\r
+28AFFD     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+9C-76-13   (hex)               Ring LLC\r
+9C7613     (base 16)           Ring LLC\r
+                               1523 26th St\r
+                               Santa Monica  CA  90404\r
+                               US\r
+\r
+44-9B-C1   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+449BC1     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+20-25-D2   (hex)               Fiberhome Telecommunication Technologies Co.,LTD\r
+2025D2     (base 16)           Fiberhome Telecommunication Technologies Co.,LTD\r
+                               No.5 DongXin Road\r
+                               Wuhan  Hubei  430074\r
+                               CN\r
+\r
+28-F4-9B   (hex)               LEETEK\r
+28F49B     (base 16)           LEETEK\r
+                               Ojeong-ro, 47\r
+                               Bucheon-si  Gyeonggi-do  14445\r
+                               KR\r
+\r
+18-42-D4   (hex)               Wuhan Hosan Telecommunication Technology Co.,Ltd\r
+1842D4     (base 16)           Wuhan Hosan Telecommunication Technology Co.,Ltd\r
+                               Fourth Floor,Building N,Quannengtong Shuangchuang Yuan,Gold-silver Lake Street,East West Lake District,\r
+                               Wuhan  Hubei  430043\r
+                               CN\r
+\r
+A8-63-7D   (hex)               D-Link International\r
+A8637D     (base 16)           D-Link International\r
+                               1 Internal Business Park, #03-12,The Synergy\r
+                               Singapore   Singapore  609917\r
+                               SG\r
+\r
+2C-43-BE   (hex)               Sunnovo International Limited\r
+2C43BE     (base 16)           Sunnovo International Limited\r
+                               1717 Haitai Building\r
+                               Beijing  Beijing  100083\r
+                               CN\r
+\r
+58-10-B7   (hex)               Infinix mobility limited\r
+5810B7     (base 16)           Infinix mobility limited\r
+                               RMS 05-15, 13A/F SOUTH TOWER WORLD FINANCE CTR HARBOUR CITY 17 CANTON RD TST KLN HONG KONG\r
+                               HongKong  HongKong  999077\r
+                               HK\r
+\r
+B0-24-91   (hex)               Huawei Device Co., Ltd.\r
+B02491     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+98-75-1A   (hex)               Huawei Device Co., Ltd.\r
+98751A     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+1C-91-80   (hex)               Apple, Inc.\r
+1C9180     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+4C-B9-10   (hex)               Apple, Inc.\r
+4CB910     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+B4-89-01   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+B48901     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+E0-92-5C   (hex)               Apple, Inc.\r
+E0925C     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+EC-15-3D   (hex)               Beijing Yaxunhongda Technology Co., Ltd.\r
+EC153D     (base 16)           Beijing Yaxunhongda Technology Co., Ltd.\r
+                               East area,4th floor,No.5,Shangdi 5th Street Haidian District,Beijing \r
+                               Beijing  Beijing  100000\r
+                               CN\r
+\r
+D8-A3-5C   (hex)               Samsung Electronics Co.,Ltd\r
+D8A35C     (base 16)           Samsung Electronics Co.,Ltd\r
+                               129, Samsung-ro, Youngtongl-Gu\r
+                               Suwon  Gyeonggi-Do  16677\r
+                               KR\r
+\r
+C0-92-96   (hex)               zte corporation\r
+C09296     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+50-E2-4E   (hex)               zte corporation\r
+50E24E     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+4C-77-66   (hex)               SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\r
+4C7766     (base 16)           SHENZHEN MERCURY COMMUNICATION TECHNOLOGIES CO.,LTD.\r
+                               3/F, Building R1-B, High-Tech Industrial Park, Nanshan District\r
+                               Shenzhen  Guangdong  518057\r
+                               CN\r
+\r
+78-E3-6D   (hex)               Espressif Inc.\r
+78E36D     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+14-5A-FC   (hex)               Liteon Technology Corporation\r
+145AFC     (base 16)           Liteon Technology Corporation\r
+                               4F, 90, Chien 1 Road\r
+                               New Taipei City  Taiwan  23585\r
+                               TW\r
+\r
+1C-A0-EF   (hex)               IEEE Registration Authority\r
+1CA0EF     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+00-18-85   (hex)               Motorola Solutions Inc.\r
+001885     (base 16)           Motorola Solutions Inc.\r
+                               500 W Monroe Street, Ste 4400\r
+                               Chicago  IL  60661-3781\r
+                               US\r
+\r
+D8-E7-2B   (hex)               NETSCOUT SYSTEMS INC\r
+D8E72B     (base 16)           NETSCOUT SYSTEMS INC\r
+                               310 Littleton Road\r
+                               Westford  MA  01886 \r
+                               US\r
+\r
+18-BF-B3   (hex)               Samsung Electronics Co., Ltd., Memory Division\r
+18BFB3     (base 16)           Samsung Electronics Co., Ltd., Memory Division\r
+                               1, Samsungjeonja-ro\r
+                               Hwaseong-si  Gyeonggi-do  18448\r
+                               KR\r
+\r
+2C-8D-B1   (hex)               Intel Corporate\r
+2C8DB1     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+58-6C-25   (hex)               Intel Corporate\r
+586C25     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+08-2C-ED   (hex)               Technity Solutions Inc.\r
+082CED     (base 16)           Technity Solutions Inc.\r
+                               100 West Beaver Creek Rd, Unit 13\r
+                               Richmond Hill  Ontario  L4B 1H4\r
+                               CA\r
+\r
+34-86-5D   (hex)               Espressif Inc.\r
+34865D     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+B4-E3-F9   (hex)               Silicon Laboratories\r
+B4E3F9     (base 16)           Silicon Laboratories\r
+                               400 West Cesar Chavez Street\r
+                               Austin  TX  78701\r
+                               US\r
+\r
+A4-9B-CD   (hex)               Cisco Systems, Inc\r
+A49BCD     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+04-27-28   (hex)               Microsoft Corporation\r
+042728     (base 16)           Microsoft Corporation\r
+                               One Microsoft Way\r
+                               REDMOND  WA  98052\r
+                               US\r
+\r
+20-66-CF   (hex)               FREEBOX SAS\r
+2066CF     (base 16)           FREEBOX SAS\r
+                               16 rue de la Ville l'Eveque\r
+                               PARIS  IdF  75008\r
+                               FR\r
+\r
+2C-C8-1B   (hex)               Routerboard.com\r
+2CC81B     (base 16)           Routerboard.com\r
+                               Mikrotikls SIA\r
+                               Riga  Riga  LV1009\r
+                               LV\r
+\r
+54-0E-58   (hex)               GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+540E58     (base 16)           GUANGDONG OPPO MOBILE TELECOMMUNICATIONS CORP.,LTD\r
+                               NO.18 HAIBIN ROAD,\r
+                               DONG GUAN  GUANG DONG  523860\r
+                               CN\r
+\r
+5C-64-8E   (hex)               Zyxel Communications Corporation\r
+5C648E     (base 16)           Zyxel Communications Corporation\r
+                               No. 6 Innovation Road II, Science Park\r
+                               Hsichu  Taiwan  300\r
+                               TW\r
+\r
+30-E3-96   (hex)               Huawei Device Co., Ltd.\r
+30E396     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+D0-7D-33   (hex)               Huawei Device Co., Ltd.\r
+D07D33     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+C0-E1-BE   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+C0E1BE     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+88-E0-56   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+88E056     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
 F8-D0-27   (hex)               Seiko Epson Corporation\r
 F8D027     (base 16)           Seiko Epson Corporation\r
                                2070 Kotobuki Koaka\r
@@ -105545,12 +107318,6 @@ D058C0     (base 16)         Qingdao Haier Multimedia Limited.
                                Qingdao  Shandong  266103\r
                                CN\r
 \r
-F8-D4-78   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
-F8D478     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
-                               SURVEYNO.381, PADUR ROAD, KUTHAMBAKKAM VILLAGE, 602107 POONAMALLEE TALUK, THIRUVALLUR DISTRIC\r
-                               Chennai    602107\r
-                               IN\r
-\r
 48-C3-B0   (hex)               Pharos Co.Ltd\r
 48C3B0     (base 16)           Pharos Co.Ltd\r
                                503 Ogong-ro 144  Deokjin-gu\r
@@ -105611,12 +107378,6 @@ DC6723     (base 16)         barox Kommunikation GmbH
                                Lörrach    DE-79539\r
                                DE\r
 \r
-44-B4-62   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
-44B462     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
-                               SURVEYNO.381, PADUR ROAD, KUTHAMBAKKAM VILLAGE, 602107 POONAMALLEE TALUK, THIRUVALLUR DISTRIC\r
-                               Chennai    602107\r
-                               IN\r
-\r
 94-B4-0F   (hex)               Aruba, a Hewlett Packard Enterprise Company\r
 94B40F     (base 16)           Aruba, a Hewlett Packard Enterprise Company\r
                                3333 Scott Blvd\r
@@ -121286,12 +123047,6 @@ E01CEE     (base 16)         Bravo Tech, Inc.
                                San Jose  CA  94568\r
                                US\r
 \r
-F4-C7-95   (hex)               WEY Elektronik AG\r
-F4C795     (base 16)           WEY Elektronik AG\r
-                               Dorfstrasse 57\r
-                               Unterengstringen  Zurich  8103\r
-                               CH\r
-\r
 78-11-85   (hex)               NBS Payment Solutions Inc.\r
 781185     (base 16)           NBS Payment Solutions Inc.\r
                                703 Evans Ave\r
@@ -121736,12 +123491,6 @@ F8472D     (base 16)         X2gen Digital Corp. Ltd
                                Pin-Jhen City,     324\r
                                TW\r
 \r
-84-90-00   (hex)               Arnold & Richter Cine Technik\r
-849000     (base 16)           Arnold & Richter Cine Technik\r
-                               Tuerkenstrasse 89\r
-                               Munich  Bavaria  80799\r
-                               DE\r
-\r
 08-18-4C   (hex)               A. S. Thomas, Inc.\r
 08184C     (base 16)           A. S. Thomas, Inc.\r
                                355 Providence Hwy\r
@@ -133187,12 +134936,6 @@ A06A00     (base 16)         Verilink Corporation
                                213 76 MALMOE    \r
                                SE\r
 \r
-00-E0-DF   (hex)               KEYMILE GmbH\r
-00E0DF     (base 16)           KEYMILE GmbH\r
-                               Wohlenbergstraße 3\r
-                               30179  Hannover  \r
-                               DE\r
-\r
 00-E0-F2   (hex)               ARLOTTO COMNET, INC.\r
 00E0F2     (base 16)           ARLOTTO COMNET, INC.\r
                                7F-4,55,TUNG-KUANG ROAD\r
@@ -134435,12 +136178,6 @@ A06A00     (base 16)         Verilink Corporation
                                BEDFORD  TX  76021\r
                                US\r
 \r
-00-C0-6A   (hex)               ZAHNER-ELEKTRIK GMBH & CO. KG\r
-00C06A     (base 16)           ZAHNER-ELEKTRIK GMBH & CO. KG\r
-                               P.O. BOX 1846\r
-                                   \r
-                               DE\r
-\r
 00-C0-E3   (hex)               OSITECH COMMUNICATIONS, INC.\r
 00C0E3     (base 16)           OSITECH COMMUNICATIONS, INC.\r
                                679 SOUTHGATE DRIVE\r
@@ -138983,6 +140720,42 @@ F06F46     (base 16)         Ubiik
                                Cupertino  CA  95014\r
                                US\r
 \r
+FC-40-09   (hex)               zte corporation\r
+FC4009     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+24-A6-5E   (hex)               zte corporation\r
+24A65E     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+50-98-39   (hex)               Xiaomi Communications Co Ltd\r
+509839     (base 16)           Xiaomi Communications Co Ltd\r
+                               The Rainbow City of China Resources\r
+                               NO.68, Qinghe Middle Street  Haidian District, Beijing  100085\r
+                               CN\r
+\r
+48-00-7D   (hex)               DTS ELEKTRONIK SAN. TIC. LTD. STI.\r
+48007D     (base 16)           DTS ELEKTRONIK SAN. TIC. LTD. STI.\r
+                               MAHMUTBEY MAH. 2650.SOK. NO:21\r
+                               ISTANBUL    34218\r
+                               TR\r
+\r
+30-B1-B5   (hex)               Arcadyan Corporation\r
+30B1B5     (base 16)           Arcadyan Corporation\r
+                               No.8, Sec.2, Guangfu Rd.\r
+                               Hsinchu City  Hsinchu  30071\r
+                               TW\r
+\r
+64-07-F6   (hex)               Samsung Electronics Co.,Ltd\r
+6407F6     (base 16)           Samsung Electronics Co.,Ltd\r
+                               129, Samsung-ro, Youngtongl-Gu\r
+                               Suwon  Gyeonggi-Do  16677\r
+                               KR\r
+\r
 E0-CB-BC   (hex)               Cisco Meraki\r
 E0CBBC     (base 16)           Cisco Meraki\r
                                500 Terry A. Francois Blvd\r
@@ -138995,6 +140768,642 @@ E0CBBC     (base 16)                Cisco Meraki
                                San Francisco    94158\r
                                US\r
 \r
+D8-EC-E5   (hex)               Zyxel Communications Corporation\r
+D8ECE5     (base 16)           Zyxel Communications Corporation\r
+                               No. 6 Innovation Road II, Science Park\r
+                               Hsichu  Taiwan  300\r
+                               TW\r
+\r
+C4-70-AB   (hex)               Ruijie Networks Co.,LTD\r
+C470AB     (base 16)           Ruijie Networks Co.,LTD\r
+                               No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city\r
+                               Fuzhou  Fujian  350002\r
+                               CN\r
+\r
+CC-6B-1E   (hex)               CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+CC6B1E     (base 16)           CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+                               B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China\r
+                               Nanning  Guangxi  530007\r
+                               CN\r
+\r
+F0-D0-8C   (hex)               TCT mobile ltd\r
+F0D08C     (base 16)           TCT mobile ltd\r
+                               No.86 hechang 7th road, zhongkai, Hi-Tech District\r
+                               Hui Zhou  Guang Dong  516006\r
+                               CN\r
+\r
+84-90-00   (hex)               Arnold&Richter Cine Technik GmbH & Co. Betriebs KG\r
+849000     (base 16)           Arnold&Richter Cine Technik GmbH & Co. Betriebs KG\r
+                               Herbert-Bayer-Str. 10\r
+                               Munchen  Bavaria  80807\r
+                               DE\r
+\r
+30-F9-4B   (hex)               Universal Electronics, Inc.\r
+30F94B     (base 16)           Universal Electronics, Inc.\r
+                               201 E. Sandpointe Ave\r
+                               Santa Ana  CA  92707\r
+                               US\r
+\r
+B4-8A-5F   (hex)               Juniper Networks\r
+B48A5F     (base 16)           Juniper Networks\r
+                               1133 Innovation Way\r
+                               Sunnyvale  CA  94089\r
+                               US\r
+\r
+70-DF-F7   (hex)               ARRIS Group, Inc.\r
+70DFF7     (base 16)           ARRIS Group, Inc.\r
+                               6450 Sequence Drive\r
+                               San Diego  CA  92121\r
+                               US\r
+\r
+00-E0-DF   (hex)               DZS GmbH\r
+00E0DF     (base 16)           DZS GmbH\r
+                               Wohlenbergstrasse. 3\r
+                               Hannover    30179\r
+                               DE\r
+\r
+E0-E8-BB   (hex)               Unicom Vsens Telecommunications Co., Ltd.\r
+E0E8BB     (base 16)           Unicom Vsens Telecommunications Co., Ltd.\r
+                               Room612,613,615,6Floors,Block3,Hengji center,N0.18 Jianguomen inner Street,Dondcheng Distict, Beijing,P.R.China\r
+                               Beijing    100005\r
+                               CN\r
+\r
+E4-C9-0B   (hex)               Radwin\r
+E4C90B     (base 16)           Radwin\r
+                               Habarzel 27\r
+                               Tel Aviv  -- select --  6971039\r
+                               IL\r
+\r
+98-27-82   (hex)               IEEE Registration Authority\r
+982782     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+38-A0-67   (hex)               Nokia Solutions and Networks GmbH & Co. KG\r
+38A067     (base 16)           Nokia Solutions and Networks GmbH & Co. KG\r
+                               Werinherstrasse 91\r
+                               München  Bavaria  D-81541\r
+                               DE\r
+\r
+CC-81-2A   (hex)               vivo Mobile Communication Co., Ltd.\r
+CC812A     (base 16)           vivo Mobile Communication Co., Ltd.\r
+                               #283,BBK Road\r
+                               Wusha,Chang'An  DongGuan City,Guangdong,  523860\r
+                               CN\r
+\r
+7C-1B-93   (hex)               Huawei Device Co., Ltd.\r
+7C1B93     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+DC-2D-3C   (hex)               Huawei Device Co., Ltd.\r
+DC2D3C     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+04-11-19   (hex)               IEEE Registration Authority\r
+041119     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+E4-55-A8   (hex)               Cisco Meraki\r
+E455A8     (base 16)           Cisco Meraki\r
+                               500 Terry A. Francois Blvd\r
+                               San Francisco    94158\r
+                               US\r
+\r
+08-81-B2   (hex)               Logitech (China) Technology Co., Ltd\r
+0881B2     (base 16)           Logitech (China) Technology Co., Ltd\r
+                               1111 Changshou Road\r
+                               Shanghai    200001\r
+                               CN\r
+\r
+C4-F1-74   (hex)               eero inc.\r
+C4F174     (base 16)           eero inc.\r
+                               660 3rd Street\r
+                               San Francisco  CA  94107\r
+                               US\r
+\r
+28-D0-EA   (hex)               Intel Corporate\r
+28D0EA     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+E0-0C-E5   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E00CE5     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+28-41-EC   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+2841EC     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+7C-00-4D   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+7C004D     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+04-D3-20   (hex)               ITEL MOBILE LIMITED\r
+04D320     (base 16)           ITEL MOBILE LIMITED\r
+                               RM B3 & B4 BLOCK B, KO FAI INDUSTRIAL BUILDING  NO.7 KO FAI ROAD, YAU TONG, KLN, H.K\r
+                               Hong Kong  KOWLOON  999077\r
+                               HK\r
+\r
+1C-99-57   (hex)               Intel Corporate\r
+1C9957     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+F4-6B-8C   (hex)               Hon Hai Precision Ind. Co., Ltd.\r
+F46B8C     (base 16)           Hon Hai Precision Ind. Co., Ltd.\r
+                               GuangDongShenZhen\r
+                               ShenZhen  GuangDong  518109\r
+                               CN\r
+\r
+FC-34-97   (hex)               ASUSTek COMPUTER INC.\r
+FC3497     (base 16)           ASUSTek COMPUTER INC.\r
+                               15,Li-Te Rd., Peitou, Taipei 112, Taiwan\r
+                               Taipei  Taiwan  112\r
+                               TW\r
+\r
+84-7A-B6   (hex)               AltoBeam (China) Inc.\r
+847AB6     (base 16)           AltoBeam (China) Inc.\r
+                               B808, Tsinghua Tongfang Hi-Tech Plaza, Haidian\r
+                               Beijing  Beijing  100083\r
+                               CN\r
+\r
+78-A6-A0   (hex)               Hangzhou Ezviz Software Co.,Ltd.\r
+78A6A0     (base 16)           Hangzhou Ezviz Software Co.,Ltd.\r
+                               Room 302, Unit B, Building 2, 399 Danfeng Road,Binjiang District\r
+                               Hangzhou  Zhejiang  310051\r
+                               CN\r
+\r
+48-51-CF   (hex)               Intelbras\r
+4851CF     (base 16)           Intelbras\r
+                               BR 101, km 210, S/N°\r
+                               São José  Santa Catarina  88104800\r
+                               BR\r
+\r
+4C-5D-3C   (hex)               Cisco Systems, Inc\r
+4C5D3C     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+34-73-2D   (hex)               Cisco Systems, Inc\r
+34732D     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+04-7B-CB   (hex)               Universal Global Scientific Industrial Co., Ltd.\r
+047BCB     (base 16)           Universal Global Scientific Industrial Co., Ltd.\r
+                               141, Lane 351, Taiping Road, Sec.1,Tsao Tuen\r
+                               Nan-Tou  Taiwan  54261\r
+                               TW\r
+\r
+8C-34-46   (hex)               Huawei Device Co., Ltd.\r
+8C3446     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+80-47-86   (hex)               Samsung Electronics Co.,Ltd\r
+804786     (base 16)           Samsung Electronics Co.,Ltd\r
+                               129, Samsung-ro, Youngtongl-Gu\r
+                               Suwon  Gyeonggi-Do  16677\r
+                               KR\r
+\r
+D4-47-5A   (hex)               ScreenBeam, Inc.\r
+D4475A     (base 16)           ScreenBeam, Inc.\r
+                               3301 Olcott St\r
+                               Santa Clara  CA  95054\r
+                               US\r
+\r
+E4-41-64   (hex)               Nokia\r
+E44164     (base 16)           Nokia\r
+                               600 March Road\r
+                               Kanata  Ontario  K2K 2E6\r
+                               CA\r
+\r
+34-E9-FE   (hex)               Metis Co., Ltd.\r
+34E9FE     (base 16)           Metis Co., Ltd.\r
+                               25, Saenari-ro, Bundang-gu\r
+                               Seongnam-si  Gyeonggi-do  13509\r
+                               KR\r
+\r
+AC-13-9C   (hex)               Adtran Inc\r
+AC139C     (base 16)           Adtran Inc\r
+                               901 Explorer Blvd.\r
+                               Huntsville  AL  35806-2807\r
+                               US\r
+\r
+A4-CE-DA   (hex)               Arcadyan Corporation\r
+A4CEDA     (base 16)           Arcadyan Corporation\r
+                               No.8, Sec.2, Guangfu Rd.\r
+                               Hsinchu City  Hsinchu  30071\r
+                               TW\r
+\r
+00-C0-6A   (hex)               Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.\r
+00C06A     (base 16)           Zahner-Elektrik Ingeborg Zahner-Schiller GmbH & Co. KG.\r
+                               P.O. BOX 1846\r
+                                   \r
+                               DE\r
+\r
+8C-43-61   (hex)               Hailo Digital Hub GmbH & Co. KG\r
+8C4361     (base 16)           Hailo Digital Hub GmbH & Co. KG\r
+                               Lahnstrasse 3a\r
+                               Giessen  Hessen  35398\r
+                               DE\r
+\r
+54-72-5E   (hex)               UNIONMAN TECHNOLOGY CO.,LTD\r
+54725E     (base 16)           UNIONMAN TECHNOLOGY CO.,LTD\r
+                               No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway\r
+                               Huizhou  Guangdong  516025\r
+                               CN\r
+\r
+98-C3-D2   (hex)               Ningbo Sanxing Medical Electric Co.,Ltd\r
+98C3D2     (base 16)           Ningbo Sanxing Medical Electric Co.,Ltd\r
+                               No.26 FengWan Road,Cicheng Town,Jiangbei District,Ningbo,China \r
+                               Ningbo    315029\r
+                               CN\r
+\r
+24-5D-FC   (hex)               IEEE Registration Authority\r
+245DFC     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+9C-82-81   (hex)               vivo Mobile Communication Co., Ltd.\r
+9C8281     (base 16)           vivo Mobile Communication Co., Ltd.\r
+                               #283,BBK Road\r
+                               Wusha,Chang'An  DongGuan City,Guangdong,  523860\r
+                               CN\r
+\r
+48-7E-48   (hex)               Earda Technologies co Ltd\r
+487E48     (base 16)           Earda Technologies co Ltd\r
+                               Block A,Lianfeng Creative Park, #2 Jisheng Rd., Nansha District\r
+                               Guangzhou  Guangdong  511455\r
+                               CN\r
+\r
+E0-E3-7C   (hex)               Huawei Device Co., Ltd.\r
+E0E37C     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+24-18-C6   (hex)               HUNAN FN-LINK TECHNOLOGY LIMITED\r
+2418C6     (base 16)           HUNAN FN-LINK TECHNOLOGY LIMITED\r
+                               No.8, Litong Road, Liuyan Economic & Tec\r
+                               Changsha  HUNAN  410329\r
+                               CN\r
+\r
+30-78-D3   (hex)               Virgilant Technologies Ltd.\r
+3078D3     (base 16)           Virgilant Technologies Ltd.\r
+                               2F., No.3, Aly. 19, Lane 8, Tianmu E. Rd.,Shilin Dist., \r
+                               Taipei City  Taiwan  11153\r
+                               TW\r
+\r
+60-18-95   (hex)               Dell Inc.\r
+601895     (base 16)           Dell Inc.\r
+                               One Dell Way\r
+                               Round Rock  TX  78682\r
+                               US\r
+\r
+E8-EA-4D   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E8EA4D     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+3C-FF-D8   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+3CFFD8     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+4C-61-7E   (hex)               Huawei Device Co., Ltd.\r
+4C617E     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+B4-10-7B   (hex)               Texas Instruments\r
+B4107B     (base 16)           Texas Instruments\r
+                               12500 TI Blvd\r
+                               Dallas  TX  75243\r
+                               US\r
+\r
+64-97-14   (hex)               eero inc.\r
+649714     (base 16)           eero inc.\r
+                               660 3rd Street\r
+                               San Francisco  CA  94107\r
+                               US\r
+\r
+CC-86-EC   (hex)               Silicon Laboratories\r
+CC86EC     (base 16)           Silicon Laboratories\r
+                               400 West Cesar Chavez Street\r
+                               Austin    78701\r
+                               US\r
+\r
+40-41-01   (hex)               Rockwell Automation\r
+404101     (base 16)           Rockwell Automation\r
+                               1 Allen-Bradley Dr.\r
+                               Mayfield Heights  OH  44124-6118\r
+                               US\r
+\r
+7C-55-A7   (hex)               Kastle Systems\r
+7C55A7     (base 16)           Kastle Systems\r
+                               6402 Arlington Blvd\r
+                               Falls Church  VA  22042\r
+                               US\r
+\r
+40-BE-EE   (hex)               Shenzhen Yunding Information Technology Co.,Ltd\r
+40BEEE     (base 16)           Shenzhen Yunding Information Technology Co.,Ltd\r
+                               32G, Tower E, CR Land Building, Tong Gu Road 5#, Nanshan District,,Guangdong,CN\r
+                                Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+A4-4C-62   (hex)               Hangzhou Microimage Software Co., Ltd\r
+A44C62     (base 16)           Hangzhou Microimage Software Co., Ltd\r
+                               Room 313, Unit B, Building 2, 399 Danfeng Road, Binjiang District\r
+                               Hangzhou  Zhejiang  310051\r
+                               CN\r
+\r
+FC-E8-06   (hex)               Edifier International\r
+FCE806     (base 16)           Edifier International\r
+                               Suit 2207, 22nd floor, Tower II, Lippo centre, 89 Queensway\r
+                               Hong Kong    070\r
+                               CN\r
+\r
+F4-C7-95   (hex)               WEY Technology AG\r
+F4C795     (base 16)           WEY Technology AG\r
+                               Dorfstrasse 57\r
+                               Unterengstringen  Zurich  8103\r
+                               CH\r
+\r
+44-B4-62   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
+44B462     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
+                               365, Benjamin Road\r
+                               Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646\r
+                               IN\r
+\r
+F8-D4-78   (hex)               Flextronics Tech.(Ind) Pvt Ltd\r
+F8D478     (base 16)           Flextronics Tech.(Ind) Pvt Ltd\r
+                               365, Benjamin Road\r
+                               Sricity  Vardahiah Palem(M),Chilamathur Village, Chittoor Distict  517646\r
+                               IN\r
+\r
+50-C2-ED   (hex)               GN Audio A/S\r
+50C2ED     (base 16)           GN Audio A/S\r
+                               Lautrupbjerg 7\r
+                               Ballerup    DK-2750\r
+                               DK\r
+\r
+90-A8-22   (hex)               Amazon Technologies Inc.\r
+90A822     (base 16)           Amazon Technologies Inc.\r
+                               P.O Box 8102 \r
+                               Reno  NV  89507\r
+                               US\r
+\r
+74-AD-98   (hex)               Cisco Systems, Inc\r
+74AD98     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+84-8C-8D   (hex)               Apple, Inc.\r
+848C8D     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+0C-5C-B5   (hex)               IEEE Registration Authority\r
+0C5CB5     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+E8-4F-25   (hex)               Murata Manufacturing Co., Ltd.\r
+E84F25     (base 16)           Murata Manufacturing Co., Ltd.\r
+                               1-10-1, Higashikotari\r
+                               Nagaokakyo-shi  Kyoto  617-8555\r
+                               JP\r
+\r
+04-25-E0   (hex)               Taicang T&W Electronics\r
+0425E0     (base 16)           Taicang T&W Electronics\r
+                               89# Jiang Nan RD\r
+                               Suzhou  Jiangsu  215412\r
+                               CN\r
+\r
+30-85-EB   (hex)               Fiberhome Telecommunication Technologies Co.,LTD\r
+3085EB     (base 16)           Fiberhome Telecommunication Technologies Co.,LTD\r
+                               No.5 DongXin Road\r
+                               Wuhan  Hubei  430074\r
+                               CN\r
+\r
+84-06-FA   (hex)               Fiberhome Telecommunication Technologies Co.,LTD\r
+8406FA     (base 16)           Fiberhome Telecommunication Technologies Co.,LTD\r
+                               No.5 DongXin Road\r
+                               Wuhan  Hubei  430074\r
+                               CN\r
+\r
+B8-D4-3E   (hex)               vivo Mobile Communication Co., Ltd.\r
+B8D43E     (base 16)           vivo Mobile Communication Co., Ltd.\r
+                               #283,BBK Road\r
+                               Wusha,Chang'An  DongGuan City,Guangdong,  523860\r
+                               CN\r
+\r
+C0-DC-D7   (hex)               Huawei Device Co., Ltd.\r
+C0DCD7     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+30-37-B3   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+3037B3     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+14-CB-19   (hex)               HP Inc.\r
+14CB19     (base 16)           HP Inc.\r
+                               10300 Energy Dr\r
+                               Spring  TX  77389\r
+                               US\r
+\r
+0C-E4-41   (hex)               Apple, Inc.\r
+0CE441     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+B8-2A-A9   (hex)               Apple, Inc.\r
+B82AA9     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+78-64-C0   (hex)               Apple, Inc.\r
+7864C0     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+74-15-75   (hex)               Xiaomi Communications Co Ltd\r
+741575     (base 16)           Xiaomi Communications Co Ltd\r
+                               The Rainbow City of China Resources\r
+                               NO.68, Qinghe Middle Street  Haidian District, Beijing  100085\r
+                               CN\r
+\r
+38-52-47   (hex)               Huawei Device Co., Ltd.\r
+385247     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+E8-1C-D8   (hex)               Apple, Inc.\r
+E81CD8     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+3C-06-30   (hex)               Apple, Inc.\r
+3C0630     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+F4-02-28   (hex)               SAMSUNG ELECTRO-MECHANICS(THAILAND)\r
+F40228     (base 16)           SAMSUNG ELECTRO-MECHANICS(THAILAND)\r
+                               93Moo5T. Bangsamak SEMTHAI, WELLGROW INDUSTRIAL ESTATE\r
+                               Bangpakong  Chachoengsao  24180\r
+                               TH\r
+\r
+0C-83-CC   (hex)               Alpha Networks Inc.\r
+0C83CC     (base 16)           Alpha Networks Inc.\r
+                               No.8 Li-shing 7th Rd., Science-based Industrial Park, Hsinchu, Taiwan, R.O.C\r
+                               Hsinchu  Taiwan  300\r
+                               TW\r
+\r
+EC-B9-70   (hex)               Ruijie Networks Co.,LTD\r
+ECB970     (base 16)           Ruijie Networks Co.,LTD\r
+                               No. 2, 7th floor, xingwangruijie, haixi hi-tech industrial park, high-tech zone, fuzhou city\r
+                               Fuzhou  Fujian  350002\r
+                               CN\r
+\r
+30-83-98   (hex)               Espressif Inc.\r
+308398     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+F8-89-D2   (hex)               CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+F889D2     (base 16)           CLOUD NETWORK TECHNOLOGY SINGAPORE PTE. LTD.\r
+                               B22 Building,NO.51 Tongle Road, Shajing Town, Jiangnan District, Nanning, Guangxi Province, China\r
+                               Nanning  Guangxi  530007\r
+                               CN\r
+\r
+10-27-F5   (hex)               TP-Link Corporation Limited\r
+1027F5     (base 16)           TP-Link Corporation Limited\r
+                               Room 901,9/F.New East Ocean Centre, 9 Science Museum Road\r
+                                Tsim Sha Tsui  Kowloon  999077\r
+                               HK\r
+\r
+B0-4F-13   (hex)               Dell Inc.\r
+B04F13     (base 16)           Dell Inc.\r
+                               One Dell Way\r
+                               Round Rock  TX  78682\r
+                               US\r
+\r
+C0-4B-13   (hex)               WonderSound Technology Co., Ltd\r
+C04B13     (base 16)           WonderSound Technology Co., Ltd\r
+                               10A, Center of Shenmao, News Road 59, Meiling community, Lianhua Street, Futian district\r
+                               Shenzhen    518034\r
+                               CN\r
+\r
+9C-7F-81   (hex)               SHENZHEN FAST TECHNOLOGIES CO.,LTD\r
+9C7F81     (base 16)           SHENZHEN FAST TECHNOLOGIES CO.,LTD\r
+                               Room 202,Building No.5,Section 30,No.2 of Kefa Road,Nanshan District,Shenzhen,P.R.China\r
+                               Shenzhen  Guangdong  518057\r
+                               CN\r
+\r
+C4-BC-D7   (hex)               New Ryatek\r
+C4BCD7     (base 16)           New Ryatek\r
+                               Room 103, 1st floor, building 19, yard 1, Baosheng South Road, Haidian District, Beijing\r
+                               Beijing  Beijing  100192\r
+                               CN\r
+\r
+C0-AE-FD   (hex)               Shenzhen HC-WLAN Technology Co.,Ltd\r
+C0AEFD     (base 16)           Shenzhen HC-WLAN Technology Co.,Ltd\r
+                               Room 201E, Block D, Donghai Wang Industrial Zone, No. 369, Bulong Road, Bantian Street, Longgang District\r
+                               Shenzhen  Guangdong  518129\r
+                               CN\r
+\r
+20-6A-94   (hex)               Hitron Technologies. Inc\r
+206A94     (base 16)           Hitron Technologies. Inc\r
+                               No. 1-8, Lising 1st Rd. Hsinchu Science Park, Hsinchu, 300, Taiwan, R.O.C\r
+                               Hsin-chu  Taiwan  300\r
+                               TW\r
+\r
+30-95-87   (hex)               HUNAN FN-LINK TECHNOLOGY LIMITED\r
+309587     (base 16)           HUNAN FN-LINK TECHNOLOGY LIMITED\r
+                               No.8, Litong Road, Liuyan Economic & Tec\r
+                               Changsha  HUNAN  410329\r
+                               CN\r
+\r
+DC-87-CB   (hex)               Beijing Perfectek Technologies Co., Ltd.\r
+DC87CB     (base 16)           Beijing Perfectek Technologies Co., Ltd.\r
+                               A-17, No. 101, 6F, Building 24, No. 68, Beiqing Road, Haidian District\r
+                               Beijing  Beijing  100094\r
+                               CN\r
+\r
+10-2D-41   (hex)               Sichuan AI-Link Technology Co., Ltd.\r
+102D41     (base 16)           Sichuan AI-Link Technology Co., Ltd.\r
+                               Anzhou, Industrial Park\r
+                               Mianyang  Sichuan  622650\r
+                               CN\r
+\r
+64-27-53   (hex)               Huawei Device Co., Ltd.\r
+642753     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+7C-F6-66   (hex)               Tuya Smart Inc.\r
+7CF666     (base 16)           Tuya Smart Inc.\r
+                               160 Greentree Drive, Suite 101\r
+                               Dover  DE  19904\r
+                               US\r
+\r
+28-53-4E   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+28534E     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+5C-B0-0A   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+5CB00A     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+20-CE-2A   (hex)               IEEE Registration Authority\r
+20CE2A     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
 7C-8A-E1   (hex)               COMPAL INFORMATION (KUNSHAN) CO., LTD. \r
 7C8AE1     (base 16)           COMPAL INFORMATION (KUNSHAN) CO., LTD. \r
                                NO. 25, THE 3RD Street KUNSHAN EXPORT PROCESSING ZONE \r
@@ -140333,9 +142742,6 @@ A41908     (base 16)          Fiberhome Telecommunication Technologies Co.,LTD
                                Wuhan  Hubei  430074\r
                                CN\r
 \r
-38-AF-D0   (hex)               Private\r
-38AFD0     (base 16)           Private\r
-\r
 80-D3-36   (hex)               CERN\r
 80D336     (base 16)           CERN\r
                                CH-1211 \r
@@ -145727,12 +148133,6 @@ E4BEED     (base 16)         Netcore Technology Inc.
                                Kulim  Kedah  09000\r
                                MY\r
 \r
-00-A0-0E   (hex)               NetAlly\r
-00A00E     (base 16)           NetAlly\r
-                               310 Littleton Road\r
-                               Westford  MA  01886 \r
-                               US\r
-\r
 00-C0-17   (hex)               NetAlly\r
 00C017     (base 16)           NetAlly\r
                                2075 Research Parkway\r
@@ -161813,12 +164213,6 @@ EC6C9F     (base 16)         Chengdu Volans Technology CO.,LTD
                                Bucheon-shi  Kyunggi-do  421-809\r
                                KR\r
 \r
-00-14-1D   (hex)               LTI-Motion GmbH\r
-00141D     (base 16)           LTI-Motion GmbH\r
-                               Gewerbestrasse 5-9\r
-                               Lahnau  Hessen  35633\r
-                               DE\r
-\r
 00-14-12   (hex)               S-TEC electronics AG\r
 001412     (base 16)           S-TEC electronics AG\r
                                Industriestrasse 49\r
@@ -173666,23 +176060,41 @@ F01628     (base 16)                Technicolor (China) Technology Co., Ltd.
                                Dover  DE  19904\r
                                US\r
 \r
-14-98-77   (hex)               Apple, Inc.\r
-149877     (base 16)           Apple, Inc.\r
-                               1 Infinite Loop\r
-                               Cupertino  CA  95014\r
+08-A7-C0   (hex)               Technicolor CH USA Inc.\r
+08A7C0     (base 16)           Technicolor CH USA Inc.\r
+                               5030 Sugarloaf Parkway Bldg 6 \r
+                               Lawrenceville  GA  30044\r
                                US\r
 \r
-88-66-5A   (hex)               Apple, Inc.\r
-88665A     (base 16)           Apple, Inc.\r
-                               1 Infinite Loop\r
-                               Cupertino  CA  95014\r
-                               US\r
+28-5B-0C   (hex)               Sichuan Jiuzhou Electronic Technology Co., Ltd.\r
+285B0C     (base 16)           Sichuan Jiuzhou Electronic Technology Co., Ltd.\r
+                               No. 259, Jiuzhou Road\r
+                               Mianyang City  Sichuan Province  621000\r
+                               CN\r
 \r
-B0-E5-F9   (hex)               Apple, Inc.\r
-B0E5F9     (base 16)           Apple, Inc.\r
-                               1 Infinite Loop\r
-                               Cupertino  CA  95014\r
-                               US\r
+14-89-CB   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+1489CB     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+6C-26-36   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+6C2636     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+48-68-4A   (hex)               Intel Corporate\r
+48684A     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+BC-F1-71   (hex)               Intel Corporate\r
+BCF171     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
 \r
 84-71-6A   (hex)               Huawei Device Co., Ltd.\r
 84716A     (base 16)           Huawei Device Co., Ltd.\r
@@ -173708,6 +176120,48 @@ B0E5F9     (base 16)         Apple, Inc.
                                Dongguan  Guangdong  523808\r
                                CN\r
 \r
+58-56-C2   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+5856C2     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+A0-36-79   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+A03679     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+B8-D6-F6   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+B8D6F6     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+2C-52-AF   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+2C52AF     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+14-98-77   (hex)               Apple, Inc.\r
+149877     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+88-66-5A   (hex)               Apple, Inc.\r
+88665A     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+B0-E5-F9   (hex)               Apple, Inc.\r
+B0E5F9     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
 AC-17-C8   (hex)               Cisco Meraki\r
 AC17C8     (base 16)           Cisco Meraki\r
                                500 Terry A. Francois Blvd\r
@@ -173725,3 +176179,537 @@ AC17C8     (base 16)                Cisco Meraki
                                500 Terry A. Francois Blvd\r
                                San Francisco    94158\r
                                US\r
+\r
+58-FB-96   (hex)               Ruckus Wireless\r
+58FB96     (base 16)           Ruckus Wireless\r
+                               350 West Java Drive\r
+                               Sunnyvale  CA  94089\r
+                               US\r
+\r
+F0-62-5A   (hex)               Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+F0625A     (base 16)           Realme Chongqing Mobile Telecommunications Corp.,Ltd.\r
+                               No.178 Yulong Avenue, Yufengshan, Yubei District, Chongqing.\r
+                               Chongqing   China  401120\r
+                               CN\r
+\r
+64-E0-AB   (hex)               UNIONMAN TECHNOLOGY CO.,LTD\r
+64E0AB     (base 16)           UNIONMAN TECHNOLOGY CO.,LTD\r
+                               No.5,Huitai Road,Huinan High-Tech Park,Huiao Highway\r
+                               Huizhou  Guangdong  516025\r
+                               CN\r
+\r
+AC-23-16   (hex)               Mist Systems, Inc.\r
+AC2316     (base 16)           Mist Systems, Inc.\r
+                               1601 South De Anza Blvd, Suite 248\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+2C-00-AB   (hex)               ARRIS Group, Inc.\r
+2C00AB     (base 16)           ARRIS Group, Inc.\r
+                               6450 Sequence Drive\r
+                               San Diego  CA  92121\r
+                               US\r
+\r
+3C-E3-6B   (hex)               Zhejiang Dahua Technology Co., Ltd.\r
+3CE36B     (base 16)           Zhejiang Dahua Technology Co., Ltd.\r
+                               No.1199,Waterfront Road \r
+                               Hangzhou  Zhejiang  310053\r
+                               CN\r
+\r
+20-3B-69   (hex)               vivo Mobile Communication Co., Ltd.\r
+203B69     (base 16)           vivo Mobile Communication Co., Ltd.\r
+                               #283,BBK Road\r
+                               Wusha,Chang'An  DongGuan City,Guangdong,  523860\r
+                               CN\r
+\r
+5C-17-20   (hex)               Huawei Device Co., Ltd.\r
+5C1720     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+98-3F-66   (hex)               Wuhan Funshion Online Technologies Co.,Ltd\r
+983F66     (base 16)           Wuhan Funshion Online Technologies Co.,Ltd\r
+                               5th Floor,Financial Port Building A9,No.77 Optical Valley Avenue, East Lake High-Tech Development Zone, Wuhan\r
+                               Wuhan  CN/Hubei  430000\r
+                               CN\r
+\r
+60-5E-4F   (hex)               Huawei Device Co., Ltd.\r
+605E4F     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+1C-E6-AD   (hex)               Huawei Device Co., Ltd.\r
+1CE6AD     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+50-97-07   (hex)               Xiamen Paperang Technology Co.,Ltd.\r
+509707     (base 16)           Xiamen Paperang Technology Co.,Ltd.\r
+                               Unit 1702-1703, 17/F, No.55, North Chengyi Road,Xiamen Software Park Phase 3\r
+                               Xiamen  Fujian  361021\r
+                               CN\r
+\r
+EC-63-D7   (hex)               Intel Corporate\r
+EC63D7     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+14-85-7F   (hex)               Intel Corporate\r
+14857F     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+7C-9F-07   (hex)               CIG SHANGHAI CO LTD\r
+7C9F07     (base 16)           CIG SHANGHAI CO LTD\r
+                               5th Floor, Building 8 No 2388 Chenhang Road\r
+                               SHANGHAI    201114\r
+                               CN\r
+\r
+1C-87-E3   (hex)               TECNO MOBILE LIMITED\r
+1C87E3     (base 16)           TECNO MOBILE LIMITED\r
+                               ROOMS 05-15, 13A/F., SOUTH TOWER, WORLD FINANCE CENTRE, HARBOUR CITY, 17 CANTON ROAD, TSIM SHA TSUI, KOWLOON, HONG KONG\r
+                               Hong Kong  Hong Kong  999077\r
+                               HK\r
+\r
+94-E2-3C   (hex)               Intel Corporate\r
+94E23C     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+20-B7-30   (hex)               TeconGroup, Inc\r
+20B730     (base 16)           TeconGroup, Inc\r
+                               3rd Khoroshevskaya str., 20, floor 1, room 112\r
+                               Moscow    123423\r
+                               RU\r
+\r
+48-88-99   (hex)               Shenzhen SuperElectron Technology Co.,Ltd.\r
+488899     (base 16)           Shenzhen SuperElectron Technology Co.,Ltd.\r
+                               1213-1214, haosheng business center, dongbin road, nanshan street, nanshan district, shenzhen city\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+DC-B1-31   (hex)               SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD\r
+DCB131     (base 16)           SHENZHEN HUARUIAN TECHNOLOGY CO.,LTD\r
+                               Floo2nd and 3rd floor, building A, Huixin Industrial Park, No.31 Yonghe Road, Heping community, Fuhai street, Bao'an District, Shenzhen, China\r
+                               Shenzhen  Guangdong  518101\r
+                               CN\r
+\r
+84-3B-10   (hex)               Lv switch Inc.\r
+843B10     (base 16)           Lv switch Inc.\r
+                               F1 building,New light source base Luocun town,Nanhai district\r
+                               Foshan  Guangdong  528000\r
+                               CN\r
+\r
+94-A4-F9   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+94A4F9     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+6C-34-91   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+6C3491     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+E8-4D-74   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E84D74     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+CC-89-5E   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+CC895E     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+80-44-FD   (hex)               China Mobile (Hangzhou) Information Technology Co., Ltd.\r
+8044FD     (base 16)           China Mobile (Hangzhou) Information Technology Co., Ltd.\r
+                               No. 1600 Yuhangtang Road, Wuchang Street, Yuhang District, Hangzhou, Zhejiang\r
+                               Hangzhou  Zhejiang  310000\r
+                               CN\r
+\r
+F4-6A-D7   (hex)               Microsoft Corporation\r
+F46AD7     (base 16)           Microsoft Corporation\r
+                               One Microsoft Way\r
+                               REDMOND  WA  98052\r
+                               US\r
+\r
+48-1F-2D   (hex)               Shenzhen Jie Shi Lian Industrial Co.,LTD\r
+481F2D     (base 16)           Shenzhen Jie Shi Lian Industrial Co.,LTD\r
+                               6F,C Building,Jinao Industrial Park,Juling Rd,Guanlan Town,Longhua\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+8C-73-A0   (hex)               Fiberhome Telecommunication Technologies Co.,LTD\r
+8C73A0     (base 16)           Fiberhome Telecommunication Technologies Co.,LTD\r
+                               No.5 DongXin Road\r
+                               Wuhan  Hubei  430074\r
+                               CN\r
+\r
+14-09-B4   (hex)               zte corporation\r
+1409B4     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+10-10-81   (hex)               zte corporation\r
+101081     (base 16)           zte corporation\r
+                               12/F.,zte R&D building ,kejinan Road,Shenzhen,P.R.China\r
+                               shenzhen  guangdong  518057\r
+                               CN\r
+\r
+78-CF-F9   (hex)               Huawei Device Co., Ltd.\r
+78CFF9     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+A8-E8-1E   (hex)               ATW TECHNOLOGY, INC.\r
+A8E81E     (base 16)           ATW TECHNOLOGY, INC.\r
+                               1F, No.236 Ba’ai Street, Shulin District\r
+                               New Taipei City    23845\r
+                               TW\r
+\r
+F8-85-F9   (hex)               Calix Inc.\r
+F885F9     (base 16)           Calix Inc.\r
+                               2777 Orchard Pkwy\r
+                               San Jose  CA  95131\r
+                               US\r
+\r
+CC-88-C7   (hex)               Aruba, a Hewlett Packard Enterprise Company\r
+CC88C7     (base 16)           Aruba, a Hewlett Packard Enterprise Company\r
+                               3333 Scott Blvd\r
+                               Santa Clara  CA  95054\r
+                               US\r
+\r
+F8-1A-2B   (hex)               Google, Inc.\r
+F81A2B     (base 16)           Google, Inc.\r
+                               1600 Amphitheatre Parkway\r
+                               Mountain View  CA  94043\r
+                               US\r
+\r
+F4-A8-0D   (hex)               Wistron InfoComm(Kunshan)Co.,Ltd.\r
+F4A80D     (base 16)           Wistron InfoComm(Kunshan)Co.,Ltd.\r
+                               168# First Avenue,Kunshan Integrated Free Trade Zone,Kunshan,Jiangsu,China\r
+                               Kunshan  Jiangsu  215300\r
+                               CN\r
+\r
+08-A1-89   (hex)               Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+08A189     (base 16)           Hangzhou Hikvision Digital Technology Co.,Ltd.\r
+                               No.555 Qianmo Road\r
+                               Hangzhou  Zhejiang  310052\r
+                               CN\r
+\r
+80-F3-EF   (hex)               Facebook Technologies, LLC\r
+80F3EF     (base 16)           Facebook Technologies, LLC\r
+                               1601 Willow Rd\r
+                               Menlo Park  CA  94025\r
+                               US\r
+\r
+3C-A8-ED   (hex)               smart light technology\r
+3CA8ED     (base 16)           smart light technology\r
+                               172 LSro\r
+                               Gunpo  Gyeonggido  15807\r
+                               KR\r
+\r
+04-C2-9B   (hex)               Aura Home, Inc.\r
+04C29B     (base 16)           Aura Home, Inc.\r
+                               50 Eldridge Street, Suite 5D\r
+                               New York  NY  10002\r
+                               US\r
+\r
+14-3B-42   (hex)               Realfit(Shenzhen) Intelligent Technology Co., Ltd\r
+143B42     (base 16)           Realfit(Shenzhen) Intelligent Technology Co., Ltd\r
+                               Room 201, building a, No.1 Qianwan 1st Road, Shenzhen Hong Kong cooperation zone, Qianhai\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+EC-2E-98   (hex)               AzureWave Technology Inc.\r
+EC2E98     (base 16)           AzureWave Technology Inc.\r
+                               8F., No. 94, Baozhong Rd.\r
+                               New Taipei City  Taiwan  231\r
+                               TW\r
+\r
+38-F3-AB   (hex)               LCFC(HeFei) Electronics Technology co., ltd\r
+38F3AB     (base 16)           LCFC(HeFei) Electronics Technology co., ltd\r
+                               YunGu Road 3188-1\r
+                               Hefei  Anhui  230000\r
+                               CN\r
+\r
+50-AE-86   (hex)               Linkintec Co., Ltd\r
+50AE86     (base 16)           Linkintec Co., Ltd\r
+                               3rd floor, building A3, phase I, Zhihui Industrial Park, intersection of Chongqing Road and Yan'an Road, Baohe Economic Development Zone\r
+                               Hefei City  Anhui  230041\r
+                               CN\r
+\r
+38-B3-F7   (hex)               Huawei Device Co., Ltd.\r
+38B3F7     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+84-E9-86   (hex)               Huawei Device Co., Ltd.\r
+84E986     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+AC-1F-0F   (hex)               Texas Instruments\r
+AC1F0F     (base 16)           Texas Instruments\r
+                               12500 TI Blvd\r
+                               Dallas  TX  75243\r
+                               US\r
+\r
+74-D2-85   (hex)               Texas Instruments\r
+74D285     (base 16)           Texas Instruments\r
+                               12500 TI Blvd\r
+                               Dallas  TX  75243\r
+                               US\r
+\r
+60-15-92   (hex)               IEEE Registration Authority\r
+601592     (base 16)           IEEE Registration Authority\r
+                               445 Hoes Lane\r
+                               Piscataway  NJ  08554\r
+                               US\r
+\r
+10-C9-CA   (hex)               Ace Technology Corp.\r
+10C9CA     (base 16)           Ace Technology Corp.\r
+                               237, Namdongseo-ro, Namdong-gu\r
+                               Incheon    21634\r
+                               KR\r
+\r
+BC-FA-B8   (hex)               Guangzhou Shiyuan Electronic Technology Company Limited\r
+BCFAB8     (base 16)           Guangzhou Shiyuan Electronic Technology Company Limited\r
+                               No.6, 4th Yunpu Road, Yunpu industry District\r
+                               Guangzhou  Guangdong  510530\r
+                               CN\r
+\r
+D4-77-98   (hex)               Cisco Systems, Inc\r
+D47798     (base 16)           Cisco Systems, Inc\r
+                               80 West Tasman Drive\r
+                               San Jose  CA  94568\r
+                               US\r
+\r
+A0-4A-5E   (hex)               Microsoft Corporation\r
+A04A5E     (base 16)           Microsoft Corporation\r
+                               One Microsoft Way\r
+                               REDMOND  WA  98052\r
+                               US\r
+\r
+EC-02-73   (hex)               Aruba, a Hewlett Packard Enterprise Company\r
+EC0273     (base 16)           Aruba, a Hewlett Packard Enterprise Company\r
+                               3333 Scott Blvd\r
+                               Santa Clara  CA  95054\r
+                               US\r
+\r
+F4-B1-C2   (hex)               Zhejiang Dahua Technology Co., Ltd.\r
+F4B1C2     (base 16)           Zhejiang Dahua Technology Co., Ltd.\r
+                               No.1199,Waterfront Road \r
+                               Hangzhou  Zhejiang  310053\r
+                               CN\r
+\r
+A4-DA-D4   (hex)               Yamato Denki Co.,Ltd.\r
+A4DAD4     (base 16)           Yamato Denki Co.,Ltd.\r
+                               3-2-14,Koyama\r
+                               Shinagawa-ku,Tokyo    142-0062\r
+                               JP\r
+\r
+10-94-97   (hex)               Logitech Hong Kong\r
+109497     (base 16)           Logitech Hong Kong\r
+                               Room 1002-1003, 10/F, Tower 1, Cheung Sha Wan Plaza, 833 Cheung Sha Wan Road, Kowloon, Hong Kong\r
+                               Hong Kong    NA\r
+                               HK\r
+\r
+00-14-1D   (hex)               KEBA Industrial Automation Germany GmbH\r
+00141D     (base 16)           KEBA Industrial Automation Germany GmbH\r
+                               Gewerbestrasse 5-9\r
+                               Lahnau  Hessen  35633\r
+                               DE\r
+\r
+E0-DA-90   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E0DA90     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+A4-A4-6B   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+A4A46B     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+C0-47-54   (hex)               vivo Mobile Communication Co., Ltd.\r
+C04754     (base 16)           vivo Mobile Communication Co., Ltd.\r
+                               #283,BBK Road\r
+                               Wusha,Chang'An  DongGuan City,Guangdong,  523860\r
+                               CN\r
+\r
+A0-D7-A0   (hex)               Huawei Device Co., Ltd.\r
+A0D7A0     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+40-E6-4B   (hex)               Apple, Inc.\r
+40E64B     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+B4-FA-48   (hex)               Apple, Inc.\r
+B4FA48     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+94-3C-C6   (hex)               Espressif Inc.\r
+943CC6     (base 16)           Espressif Inc.\r
+                               Room 204, Building 2, 690 Bibo Rd, Pudong New Area\r
+                               Shanghai  Shanghai  201203\r
+                               CN\r
+\r
+8C-83-FC   (hex)               Axioma Metering UAB\r
+8C83FC     (base 16)           Axioma Metering UAB\r
+                               Veterinaru str. 52\r
+                               Biruliskes  Kaunas district  LT-54469\r
+                               LT\r
+\r
+F0-2F-4B   (hex)               Apple, Inc.\r
+F02F4B     (base 16)           Apple, Inc.\r
+                               1 Infinite Loop\r
+                               Cupertino  CA  95014\r
+                               US\r
+\r
+60-A4-B7   (hex)               TP-Link Corporation Limited\r
+60A4B7     (base 16)           TP-Link Corporation Limited\r
+                               Room 901,9/F.New East Ocean Centre, 9 Science Museum Road\r
+                                Tsim Sha Tsui  Kowloon  999077\r
+                               HK\r
+\r
+8C-D9-D6   (hex)               Xiaomi Communications Co Ltd\r
+8CD9D6     (base 16)           Xiaomi Communications Co Ltd\r
+                               The Rainbow City of China Resources\r
+                               NO.68, Qinghe Middle Street  Haidian District, Beijing  100085\r
+                               CN\r
+\r
+60-C5-E6   (hex)               Skullcandy\r
+60C5E6     (base 16)           Skullcandy\r
+                               6301 N. Landmark Dr.\r
+                               Park City    84098\r
+                               US\r
+\r
+38-F3-FB   (hex)               Asperiq\r
+38F3FB     (base 16)           Asperiq\r
+                               Finngatan 8\r
+                               Lund    SE-22362\r
+                               SE\r
+\r
+A4-58-02   (hex)               SHIN-IL TECH\r
+A45802     (base 16)           SHIN-IL TECH\r
+                               711 HO,DAEMYEONG BELLI ON,10, Gyeongin-ro 53ga-gil, Guro-gu\r
+                               Seoul    KS013\r
+                               KR\r
+\r
+38-AF-D0   (hex)               Nevro\r
+38AFD0     (base 16)           Nevro\r
+                               1800 Bridge Pkwy\r
+                               Redwood City  CA  94065\r
+                               US\r
+\r
+00-A0-0E   (hex)               NETSCOUT SYSTEMS INC\r
+00A00E     (base 16)           NETSCOUT SYSTEMS INC\r
+                               310 Littleton Road\r
+                               Westford  MA  01886 \r
+                               US\r
+\r
+30-A6-12   (hex)               ShenZhen Hugsun Technology Co.,Ltd.\r
+30A612     (base 16)           ShenZhen Hugsun Technology Co.,Ltd.\r
+                               413~415 Room, 4/F, No.6 Bldg., TongFuYu Industrial Park, Dalang Street, 518109, Longhua New District,\r
+                               ShengZhen  GuangDong  518109\r
+                               CN\r
+\r
+EC-B4-E8   (hex)               Wistron Mexico SA de CV\r
+ECB4E8     (base 16)           Wistron Mexico SA de CV\r
+                               Baudelio Perez Mucharras #420 Col Paseos de Zaragoza \r
+                               ciudad Juarez  Chihuahua  32550\r
+                               MX\r
+\r
+10-38-1F   (hex)               Sichuan AI-Link Technology Co., Ltd.\r
+10381F     (base 16)           Sichuan AI-Link Technology Co., Ltd.\r
+                               Anzhou, Industrial Park\r
+                               Mianyang  Sichuan  622650\r
+                               CN\r
+\r
+3C-7A-C4   (hex)               Chemtronics\r
+3C7AC4     (base 16)           Chemtronics\r
+                               junho.hong@chemtronics.co.kr\r
+                               Bundang-gu  Gyeonggi-do  13493\r
+                               KR\r
+\r
+54-14-F3   (hex)               Intel Corporate\r
+5414F3     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+18-BB-41   (hex)               Huawei Device Co., Ltd.\r
+18BB41     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+78-18-A8   (hex)               Huawei Device Co., Ltd.\r
+7818A8     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+80-72-64   (hex)               Huawei Device Co., Ltd.\r
+807264     (base 16)           Huawei Device Co., Ltd.\r
+                               No.2 of Xincheng Road, Songshan Lake Zone\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+E8-F6-54   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+E8F654     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+20-87-EC   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+2087EC     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+54-F6-E2   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+54F6E2     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+A8-50-81   (hex)               HUAWEI TECHNOLOGIES CO.,LTD\r
+A85081     (base 16)           HUAWEI TECHNOLOGIES CO.,LTD\r
+                               No.2 Xin Cheng Road, Room R6,Songshan Lake Technology Park\r
+                               Dongguan    523808\r
+                               CN\r
+\r
+6C-FE-54   (hex)               Intel Corporate\r
+6CFE54     (base 16)           Intel Corporate\r
+                               Lot 8, Jalan Hi-Tech 2/3  \r
+                               Kulim  Kedah  09000\r
+                               MY\r
+\r
+8C-36-7A   (hex)               Palo Alto Networks\r
+8C367A     (base 16)           Palo Alto Networks\r
+                               3000 Tannery Way\r
+                               Santa Clara  CA  95054\r
+                               US\r
index 43a498c09f137175a8c17ab122bcab3c0bc977b3..bb59963edb62231090dfbf6dd97b31014cbb59c5 100644 (file)
@@ -2153,12 +2153,6 @@ B00000-BFFFFF     (base 16)              ExaScaler Inc.
                                Shenzhen    518000\r
                                CN\r
 \r
-8C-19-2D   (hex)               DataRemote Inc.\r
-200000-2FFFFF     (base 16)            DataRemote Inc.\r
-                               19301 SW 106th Ave  Suite 6\r
-                               Miami  FL  33157\r
-                               US\r
-\r
 D0-D9-4F   (hex)               Perfant Technology Co., Ltd\r
 000000-0FFFFF     (base 16)            Perfant Technology Co., Ltd\r
                                Guo Ren Tong Xin B317,Ke Ji Zhong San Lu,Nanshan,Shenzhen,Guangdong,China\r
@@ -4289,6 +4283,120 @@ A0-02-4A   (hex)                Xiaojie Technology (Shenzhen) Co., Ltd
                                NINGBO  ZHEJIANG PROVINCE  315191\r
                                CN\r
 \r
+44-6F-D8   (hex)               Changzhou Haitu Electronic Technology Co.,Ltd\r
+C00000-CFFFFF     (base 16)            Changzhou Haitu Electronic Technology Co.,Ltd\r
+                               Building 47, Hang Seng Science park, Tianning District\r
+                               Changzhou  Jiangsu  213000\r
+                               CN\r
+\r
+98-27-82   (hex)               KORTEK CORPORATION\r
+700000-7FFFFF     (base 16)            KORTEK CORPORATION\r
+                               26, Venture-ro24beon-gil, Yeonsu-gu\r
+                               Incheon    22011\r
+                               KR\r
+\r
+98-27-82   (hex)               Dspread Technology (Beijing) Inc.\r
+400000-4FFFFF     (base 16)            Dspread Technology (Beijing) Inc.\r
+                               Jingxin Building, 2045 Suite , Chaoyang District\r
+                               Beijing    100027\r
+                               CN\r
+\r
+8C-19-2D   (hex)               DataRemote Inc.\r
+200000-2FFFFF     (base 16)            DataRemote Inc.\r
+                               18001 Old Cutler Rd. Suite 600\r
+                               Palmetto Bay  FL  33157\r
+                               US\r
+\r
+04-11-19   (hex)               Herrick Tech Labs\r
+700000-7FFFFF     (base 16)            Herrick Tech Labs\r
+                               20201 Century Blvd.\r
+                               Germantown  MD  20874\r
+                               US\r
+\r
+E8-6C-C7   (hex)               Limited Liability Company M.S.Korp\r
+C00000-CFFFFF     (base 16)            Limited Liability Company M.S.Korp\r
+                               Mironovskaya st., 33, bldg.26, floor 4, office 5\r
+                               Moscow  Russian Federation  105318\r
+                               RU\r
+\r
+E8-6C-C7   (hex)               Trapeze Switzerland GmbH\r
+000000-0FFFFF     (base 16)            Trapeze Switzerland GmbH\r
+                               Industrieplatz 3.\r
+                               Neuhausen am Rheinfall  Schaffhausen  8212\r
+                               CH\r
+\r
+E8-6C-C7   (hex)               Lighthouse EIP\r
+800000-8FFFFF     (base 16)            Lighthouse EIP\r
+                               21370 Heywood Avenue\r
+                               Lakeville  MN  55044\r
+                               US\r
+\r
+E8-6C-C7   (hex)               Koal Software Co., Ltd\r
+400000-4FFFFF     (base 16)            Koal Software Co., Ltd\r
+                               Floor 6, Building 4, Lane 299, Jiangchang West Road, Jing 'an District\r
+                               Shanghai  Shanghai  200436\r
+                               CN\r
+\r
+E8-6C-C7   (hex)               Xirgo Technologies LLC\r
+200000-2FFFFF     (base 16)            Xirgo Technologies LLC\r
+                               188 Camino Ruiz\r
+                               Camarillo  CA  93012\r
+                               US\r
+\r
+24-5D-FC   (hex)               Cosmicnode\r
+800000-8FFFFF     (base 16)            Cosmicnode\r
+                               Zandstrand\r
+                               Eindhoven  North Brabant  5658BJ\r
+                               NL\r
+\r
+24-5D-FC   (hex)               Suzhou Jiangzhi electronic technology co., Ltd\r
+400000-4FFFFF     (base 16)            Suzhou Jiangzhi electronic technology co., Ltd\r
+                               Room 303, Building 2, No.88 Baifu Road, Kunshan Development Zone\r
+                               Kunshan  Jiangsu  215300\r
+                               CN\r
+\r
+60-15-92   (hex)               S Labs sp. z o.o.\r
+000000-0FFFFF     (base 16)            S Labs sp. z o.o.\r
+                               Dworska 1a/1u\r
+                               Kraków  Lesser Poland  30-314\r
+                               PL\r
+\r
+60-15-92   (hex)               Annapurna labs\r
+B00000-BFFFFF     (base 16)            Annapurna labs\r
+                               Matam Scientific Industries Center,   Building 8.2\r
+                               Mail box 15123  Haifa  3508409\r
+                               IL\r
+\r
+0C-5C-B5   (hex)               The Raymond Corporation\r
+500000-5FFFFF     (base 16)            The Raymond Corporation\r
+                               22 South Canal St\r
+                               Greene  NY  13778\r
+                               US\r
+\r
+60-15-92   (hex)               Zaptec\r
+400000-4FFFFF     (base 16)            Zaptec\r
+                               Richard Johnsensgate 4\r
+                               Stavanger   Rogaland  N-4021\r
+                               NO\r
+\r
+1C-A0-EF   (hex)               Shenzhen Liandian Communication Technology Co.LTD\r
+D00000-DFFFFF     (base 16)            Shenzhen Liandian Communication Technology Co.LTD\r
+                               1307, building A4, workshop 2, LiLang International Jewelry Industrial Park, 31 Bulan Road, xialilang community, Nanwan street, Longgang District\r
+                               Shenzhen  Guangdong  518112\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               ADI\r
+B00000-BFFFFF     (base 16)            ADI\r
+                               2 Crest Hollow Lane\r
+                               Manorville  NY  11949\r
+                               US\r
+\r
+1C-A0-EF   (hex)               Wisnu and Supak Co.,Ltd.\r
+100000-1FFFFF     (base 16)            Wisnu and Supak Co.,Ltd.\r
+                               102/111-112  Mooban  Sinpattanatanee,, Tessabansongkroh  Road.,     Ladyao,  Jatujak,\r
+                               Jatujak  Bangkok Metropolis  10900\r
+                               TH\r
+\r
 4C-4B-F9   (hex)               Shenzhen dingsheng technology co., LTD\r
 400000-4FFFFF     (base 16)            Shenzhen dingsheng technology co., LTD\r
                                Floor 3, building 5, kaijeda industrial zone, no.97, huaxing road, langkou community, dalang street, longhua district\r
@@ -4592,9 +4700,6 @@ A00000-AFFFFF     (base 16)               ESTec Corporation
                                San Jose  CA  95113\r
                                US\r
 \r
-F0-23-B9   (hex)               Private\r
-D00000-DFFFFF     (base 16)            Private\r
-\r
 B0-FD-0B   (hex)               IDspire Corporation Ltd.\r
 100000-1FFFFF     (base 16)            IDspire Corporation Ltd.\r
                                9F, No. 266, Sec. 1, Wenhua Rd., Banqiao Dist.\r
@@ -4769,9 +4874,6 @@ E0-5A-9F   (hex)          Link of Things Co., Ltd.
                                SAN DIEGO  CA  92123\r
                                US\r
 \r
-38-B8-EB   (hex)               Private\r
-700000-7FFFFF     (base 16)            Private\r
-\r
 4C-BC-98   (hex)               Dongguan SmartAction Technology Co.,Ltd\r
 B00000-BFFFFF     (base 16)            Dongguan SmartAction Technology Co.,Ltd\r
                                Room1109,Building D,First Place,Nancheng District, Dongguan\r
@@ -8156,12 +8258,6 @@ A4-53-EE   (hex)         MAHLE ELECTRONICS, SLU
                                Motilla del Palancar  Cuenca  16200\r
                                ES\r
 \r
-A4-53-EE   (hex)               Aura Home, Inc.\r
-600000-6FFFFF     (base 16)            Aura Home, Inc.\r
-                               50 Eldridge Street, Suite 5D\r
-                               New York  NY  10002\r
-                               US\r
-\r
 A4-53-EE   (hex)               SSK CORPORATION\r
 D00000-DFFFFF     (base 16)            SSK CORPORATION\r
                                3F, M-10, Centre of Hi-Tech Industrial Park, Nanshan\r
@@ -8210,6 +8306,144 @@ D00000-DFFFFF     (base 16)             Quidel Corporation
                                Beaverton  OR  97008\r
                                US\r
 \r
+44-6F-D8   (hex)               ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd\r
+A00000-AFFFFF     (base 16)            ZHEJIANG HIKAILINK TECHNOLOGY Co., Ltd\r
+                               Room 116, 1 / F, building 2, No. 87, Hexi, Changfeng street, Wuzhen Town, Tongxiang City\r
+                               Jiaxing City  Zhejiang  China\r
+                               CN\r
+\r
+44-6F-D8   (hex)               Shenzhen Mestechs Technology CO., LTD\r
+300000-3FFFFF     (base 16)            Shenzhen Mestechs Technology CO., LTD\r
+                               The 3rd Floor, E4A Bldg?TCL International E city, NO.1001 zhongshanyuan Rd, Nanshan District\r
+                               shenzhen  GuangDong  518052\r
+                               CN\r
+\r
+98-27-82   (hex)               Guangzhou Wuzhou Technology Co, Ltd.\r
+500000-5FFFFF     (base 16)            Guangzhou Wuzhou Technology Co, Ltd.\r
+                               4th Floor, Building C2, Hi-Tech Enterprise Accelerator, Kaiyuan Avenue #11, Huangpu District\r
+                               Guangzhou  Guangdong  510530\r
+                               CN\r
+\r
+98-27-82   (hex)               Nanjing BianYu Future Home Technology Co.Ltd\r
+A00000-AFFFFF     (base 16)            Nanjing BianYu Future Home Technology Co.Ltd\r
+                                Longyu Middle Street\r
+                               Beijing  Beijing  100085\r
+                               CN\r
+\r
+98-27-82   (hex)               Wuxi GuoYiHaiJu Technology Co.,Ltd.\r
+900000-9FFFFF     (base 16)            Wuxi GuoYiHaiJu Technology Co.,Ltd.\r
+                               Innovation Industrial Park E2-2F\r
+                               hefei    230000\r
+                               CN\r
+\r
+98-27-82   (hex)               CATS Power design\r
+800000-8FFFFF     (base 16)            CATS Power design\r
+                               144 route des Vernes\r
+                               PRINGY    74370\r
+                               FR\r
+\r
+04-11-19   (hex)               Alethea Communications Technologies Pvt. Ltd.\r
+200000-2FFFFF     (base 16)            Alethea Communications Technologies Pvt. Ltd.\r
+                               2346, 17th Cross, HSR Layout\r
+                               Bangalore  Karnataka  560102\r
+                               IN\r
+\r
+04-11-19   (hex)               Acentury\r
+100000-1FFFFF     (base 16)            Acentury\r
+                               120 West Beaver Creek Road, Unit 13\r
+                               Richmond Hill  ON  L4B 1L2\r
+                               CA\r
+\r
+E8-6C-C7   (hex)               Huaqin Technology Co.,Ltd\r
+700000-7FFFFF     (base 16)            Huaqin Technology Co.,Ltd\r
+                               No. 10 Keyuan Road, Songshan Lake\r
+                               Dongguan  Guangdong  523808\r
+                               CN\r
+\r
+38-B8-EB   (hex)               Sirin Mobile Technologies\r
+700000-7FFFFF     (base 16)            Sirin Mobile Technologies\r
+                               Muhlentalstrasse 2\r
+                               Schaffhausen    8200\r
+                               CH\r
+\r
+24-5D-FC   (hex)               CompanyDeep\r
+000000-0FFFFF     (base 16)            CompanyDeep\r
+                               122, Ross Street\r
+                               Cambridge  Cambridgeshire  CB13BU\r
+                               GB\r
+\r
+24-5D-FC   (hex)               TORGOVYY DOM  TEHNOLOGIY LLC\r
+900000-9FFFFF     (base 16)            TORGOVYY DOM  TEHNOLOGIY LLC\r
+                               Gospytalnaya 10, ap. 109, village Selyatino, city Naro-Fominsk,\r
+                               Moscow  Moscow Region  143345\r
+                               RU\r
+\r
+E8-6C-C7   (hex)               CoxSpace\r
+A00000-AFFFFF     (base 16)            CoxSpace\r
+                               858ho, Business Support Hub, 815, Daewangpangyo-ro Sujeong-gu\r
+                               Seongnam  Kyeonggi-do  13449\r
+                               KR\r
+\r
+24-5D-FC   (hex)               ContactProximity Inc\r
+500000-5FFFFF     (base 16)            ContactProximity Inc\r
+                               241 Arlington Street #966\r
+                               Acton  MA  01720\r
+                               US\r
+\r
+F0-23-B9   (hex)               Shenyang Ali Technology Company Limited\r
+D00000-DFFFFF     (base 16)            Shenyang Ali Technology Company Limited\r
+                               No.17-5, Wensu Street\r
+                               Dongling District  Shenyang Liaoning Province  110168\r
+                               CN\r
+\r
+24-5D-FC   (hex)               Guangzhou Lango Electronics Technology Co.,Ltd.\r
+600000-6FFFFF     (base 16)            Guangzhou Lango Electronics Technology Co.,Ltd.\r
+                               Room 238, Room 406, No. 1, Yichuang Street, Huangpu District\r
+                               Guangzhou  Guangdong  510336\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               Hunan Newman Car NetworKing Technology Co.,Ltd\r
+C00000-CFFFFF     (base 16)            Hunan Newman Car NetworKing Technology Co.,Ltd\r
+                               128 Lixiang East Road,ChangshaEconomic and Technological Development Zone\r
+                               Changsha  Hunan  410100\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               S2C limited\r
+600000-6FFFFF     (base 16)            S2C limited\r
+                               E1 No.2555 Xiupu Rd. Pudong New Area\r
+                               Shanghai          Shanghai        201135\r
+                               CN\r
+\r
+1C-A0-EF   (hex)               LLC Gagar.In\r
+C00000-CFFFFF     (base 16)            LLC Gagar.In\r
+                               Rybnikov Pereulok 1\r
+                               Moscow    107045\r
+                               RU\r
+\r
+1C-A0-EF   (hex)               Zillnk\r
+800000-8FFFFF     (base 16)            Zillnk\r
+                               No. 505, 5 / F, Unit 2, building 1, No. 777, North Section of Yizhou Avenue, Chengdu High Tech Zone, China (Sichuan) Pilot Free Trade Zone\r
+                               Chengdu    610000\r
+                               CN\r
+\r
+1C-A0-EF   (hex)               Tangshan Liulin Automation Equipment Co., Ltd.\r
+000000-0FFFFF     (base 16)            Tangshan Liulin Automation Equipment Co., Ltd.\r
+                               Building 110-3, No.410 Huoju Road, High-tech Zone\r
+                               Tangshan City  Hebei Province  063000\r
+                               CN\r
+\r
+1C-A0-EF   (hex)               Leviathan Solutions Ltd.\r
+400000-4FFFFF     (base 16)            Leviathan Solutions Ltd.\r
+                               Abel Jeno utca 23\r
+                               Budapest    1113\r
+                               HU\r
+\r
+20-CE-2A   (hex)               Shanghai Digicube Info&Tech Co.,Ltd.\r
+100000-1FFFFF     (base 16)            Shanghai Digicube Info&Tech Co.,Ltd.\r
+                               Room B, 9th floor, building 1, Hongqiao headquarters, 100 Zixiu Road, \r
+                               Shanghai  Minhang District  201103\r
+                               CN\r
+\r
 20-85-93   (hex)               UNILUMIN GROUP CO.,LTD\r
 300000-3FFFFF     (base 16)            UNILUMIN GROUP CO.,LTD\r
                                No.112 Yongfu Rd.,BaoanDistrict,\r
@@ -8228,9 +8462,6 @@ B00000-BFFFFF     (base 16)               Stored Energy Systems
                                Longmont  CO  80501\r
                                US\r
 \r
-DC-E5-33   (hex)               Private\r
-A00000-AFFFFF     (base 16)            Private\r
-\r
 24-15-10   (hex)               SHANDONG KEHUI POWER AUTOMATION CO. LTD.\r
 600000-6FFFFF     (base 16)            SHANDONG KEHUI POWER AUTOMATION CO. LTD.\r
                                 No. 16,Sanying Road\r
@@ -12254,6 +12485,186 @@ D00000-DFFFFF     (base 16)           SCAIME
                                JUVIGNY  Select State  74100\r
                                FR\r
 \r
+98-27-82   (hex)               SHENZHEN HEROFUN BIO-TECH CO., LTD\r
+000000-0FFFFF     (base 16)            SHENZHEN HEROFUN BIO-TECH CO., LTD\r
+                               7001B, 7th Floor, LaoBing Building, East Block 2, No. 3012 XingYe Road, BaoAn District\r
+                               Shenzhen    518100\r
+                               CN\r
+\r
+44-6F-D8   (hex)               Annapurna labs\r
+900000-9FFFFF     (base 16)            Annapurna labs\r
+                               Matam Scientific Industries Center,   Building 8.2\r
+                               Mail box 15123  Haifa  3508409\r
+                               IL\r
+\r
+44-6F-D8   (hex)               Anhui GuDao Tech\r
+600000-6FFFFF     (base 16)            Anhui GuDao Tech\r
+                               Dangtu Qingshanhe\r
+                               MaAnShan  AnHui  243000\r
+                               CN\r
+\r
+98-27-82   (hex)               RayTron, INC.\r
+B00000-BFFFFF     (base 16)            RayTron, INC.\r
+                               11F.ESLEAD Bldg.HONMACHI 1-4-8 HONMACHI CHUO-KU\r
+                               Osaka  Osaka  541-0053\r
+                               JP\r
+\r
+98-27-82   (hex)               Thorlabs GmbH\r
+D00000-DFFFFF     (base 16)            Thorlabs GmbH\r
+                               Münchner Weg 1\r
+                               Bergkirchen    85232\r
+                               DE\r
+\r
+98-27-82   (hex)               WESTERN SECURITY SOLUTIONS\r
+600000-6FFFFF     (base 16)            WESTERN SECURITY SOLUTIONS\r
+                               WSS TOWER HARINAGAR\r
+                               GURUGRAM  HARYANA  122001\r
+                               IN\r
+\r
+98-27-82   (hex)               Danfoss Power Solutions\r
+300000-3FFFFF     (base 16)            Danfoss Power Solutions\r
+                               3500 Annapolis Lane N\r
+                               Minneapolis  MN  55447\r
+                               US\r
+\r
+04-11-19   (hex)               AC Power Distribution / ACT Entmt.\r
+900000-9FFFFF     (base 16)            AC Power Distribution / ACT Entmt.\r
+                               2313 N. Valley St.\r
+                               Burbank  CA  91505\r
+                               US\r
+\r
+04-11-19   (hex)               Nuance Hearing Ltd.\r
+D00000-DFFFFF     (base 16)            Nuance Hearing Ltd.\r
+                               Raoul Wallenberg 24, Building A1, Floor 3\r
+                               Tel Aviv    6971920\r
+                               IL\r
+\r
+04-11-19   (hex)               SUZHOU RIBAO TECHNOLOGY CO.,LTD.\r
+300000-3FFFFF     (base 16)            SUZHOU RIBAO TECHNOLOGY CO.,LTD.\r
+                               SUZHOU RIBAO TECHNOLOGY CO.,LTD.\r
+                               SUZHOU  JIANGSU  215133\r
+                               CN\r
+\r
+04-11-19   (hex)               CyOne Security AG\r
+A00000-AFFFFF     (base 16)            CyOne Security AG\r
+                               Hinterbergstrasse 18\r
+                               Steinhausen  Zug  6312\r
+                               CH\r
+\r
+E8-6C-C7   (hex)               Annapurna labs\r
+E00000-EFFFFF     (base 16)            Annapurna labs\r
+                               Matam Scientific Industries Center,   Building 8.2\r
+                               Mail box 15123  Haifa  3508409\r
+                               IL\r
+\r
+E8-6C-C7   (hex)               Shenzhen Yibaifen Industrial Co.,Ltd.\r
+300000-3FFFFF     (base 16)            Shenzhen Yibaifen Industrial Co.,Ltd.\r
+                               501/501, Building 2, Hongxiang Industrial Park, 21 Huancheng South Road, Ma'antang Community, Bantian Street, Longgang District, Shenzhen\r
+                               Shenzhen    518000\r
+                               CN\r
+\r
+E8-6C-C7   (hex)               z-max mediasolution\r
+D00000-DFFFFF     (base 16)            z-max mediasolution\r
+                               Surugadai Bldg.8F kanda surugadai 1-7-10\r
+                               Chiyodaku  Tokyo  101-0062\r
+                               JP\r
+\r
+DC-E5-33   (hex)               Amazinglayer Network Co., Ltd.\r
+A00000-AFFFFF     (base 16)            Amazinglayer Network Co., Ltd.\r
+                               Room118, Building B, JinTaiHuaYun Building, WuGenLin HuTong 11\r
+                               Beijing  Beijing  100035\r
+                               CN\r
+\r
+24-5D-FC   (hex)               ARTICONA - Bechtle Logistik & Service GmbH\r
+100000-1FFFFF     (base 16)            ARTICONA - Bechtle Logistik & Service GmbH\r
+                               Bechtle Platz 1\r
+                               Neckarsulm  Baden-Württemberg  74172\r
+                               DE\r
+\r
+24-5D-FC   (hex)               Blue Iris Labs\r
+200000-2FFFFF     (base 16)            Blue Iris Labs\r
+                               18 Acacia Rd\r
+                               Fairfax  CA  94930\r
+                               US\r
+\r
+24-5D-FC   (hex)               LTY LLC\r
+700000-7FFFFF     (base 16)            LTY LLC\r
+                               1321 UPLAND DR\r
+                               HOUSTON  TX  77043\r
+                               US\r
+\r
+60-15-92   (hex)               PSS Co., Ltd\r
+C00000-CFFFFF     (base 16)            PSS Co., Ltd\r
+                               4F., No. 10, Ln. 327, Sec. 2, Zhongshan Rd., Zhonghe Dist.\r
+                               New Taipei City  ???  235\r
+                               TW\r
+\r
+0C-5C-B5   (hex)               Annapurna labs\r
+400000-4FFFFF     (base 16)            Annapurna labs\r
+                               Matam Scientific Industries Center,   Building 8.2\r
+                               Mail box 15123  Haifa  3508409\r
+                               IL\r
+\r
+60-15-92   (hex)               RTDS Technologies Inc.\r
+100000-1FFFFF     (base 16)            RTDS Technologies Inc.\r
+                               100-150 Innovation Drive\r
+                               Winnipeg  Manitoba  R3T 2E1\r
+                               CA\r
+\r
+60-15-92   (hex)               Annapurna labs\r
+E00000-EFFFFF     (base 16)            Annapurna labs\r
+                               Matam Scientific Industries Center,   Building 8.2\r
+                               Mail box 15123  Haifa  3508409\r
+                               IL\r
+\r
+60-15-92   (hex)               JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.\r
+900000-9FFFFF     (base 16)            JIANGSU SUNFY TECHNOLOGIES HOLDING CO.,LTD.\r
+                               Building 6, No. 1088, Jiangcheng Road, Sutong Technology Industrial Park\r
+                               Nantong  Jiangsu  226017\r
+                               CN\r
+\r
+60-15-92   (hex)               OSI TECHNOLOGY CO.,LTD.\r
+300000-3FFFFF     (base 16)            OSI TECHNOLOGY CO.,LTD.\r
+                               No.74, Fenyang Rd., Sanmin Dist.\r
+                               Kaohsiung City  Taiwan  807\r
+                               TW\r
+\r
+0C-5C-B5   (hex)               Shenzhen C & D Electronics Co., Ltd.\r
+800000-8FFFFF     (base 16)            Shenzhen C & D Electronics Co., Ltd.\r
+                               9th FIoor, Building 9, No.1 Qingxiang road, BaoNeng Science and TechnoIogy Industrial Park, Longhua New District\r
+                               ShenZhen  GuangDong  518000\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               iH&S Technology Limited\r
+300000-3FFFFF     (base 16)            iH&S Technology Limited\r
+                               iH&S Technology Limited\r
+                               7/F, Unify Commercial & Ind. Bldg., 31 Tai Yip Street, Kwun Tong  Hong Kong  999077\r
+                               HK\r
+\r
+0C-5C-B5   (hex)               Colordeve International\r
+900000-9FFFFF     (base 16)            Colordeve International\r
+                               601, block B, Logistics Park, Yihong Road, Yantian village, Fenggang Town, DG, GD, China\r
+                               Dongguan City    523702\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               Energybox Limited\r
+700000-7FFFFF     (base 16)            Energybox Limited\r
+                               8/F., Green 18, HK Science Park\r
+                               Sha Tin  Hong Kong   0000\r
+                               HK\r
+\r
+1C-A0-EF   (hex)               HANJEN.CHIN  CO., LTD.\r
+600000-6FFFFF     (base 16)            HANJEN.CHIN  CO., LTD.\r
+                               Fl.2 No. 101  Jian 1st Rd., Zhonghe Dist., \r
+                               NEW TAIPEI CITY  TAIWAN  235\r
+                               TW\r
+\r
+20-CE-2A   (hex)               Beijing Huadianzhongxin Tech.Co.,Ltd\r
+700000-7FFFFF     (base 16)            Beijing Huadianzhongxin Tech.Co.,Ltd\r
+                               Room 318,the 3rd Floorl,Xingtianhaiyuan Building,Xianghuangqi East Rd,Nongda South Rd, Haidian District,Beijing,P.R.C\r
+                               Bei Jing    100193\r
+                               CN\r
+\r
 4C-4B-F9   (hex)               Shandong Linkotech Electronic Co., Ltd.\r
 600000-6FFFFF     (base 16)            Shandong Linkotech Electronic Co., Ltd.\r
                                22nd Floor, Building 2, Aosheng Building, No.1166 Xinyi Street, High-tech Zone\r
@@ -14663,12 +15074,6 @@ CC-1B-E0   (hex)               Laserworld (Switzerland) AG
                                San Jose  California  95128\r
                                US\r
 \r
-00-55-DA   (hex)               Nanoleaf\r
-500000-5FFFFF     (base 16)            Nanoleaf\r
-                               162 John Street\r
-                               Toronto  Ontario  M5V2E5\r
-                               CA\r
-\r
 00-55-DA   (hex)               Speechlab\r
 A00000-AFFFFF     (base 16)            Speechlab\r
                                Gaasterlandstraat 3\r
@@ -14825,12 +15230,6 @@ B00000-BFFFFF     (base 16)            Capwave Technologies Inc
                                Asbury Park  NJ  07712\r
                                US\r
 \r
-74-F8-DB   (hex)               Avantree Corporation\r
-900000-9FFFFF     (base 16)            Avantree Corporation\r
-                               41871 Via San Miguel\r
-                               Fremont  CA  94539\r
-                               US\r
-\r
 88-5D-90   (hex)               Creative Sensor Inc.\r
 800000-8FFFFF     (base 16)            Creative Sensor Inc.\r
                                9F., No.501, Sec. 6, Nanjing E. Rd., Neihu Dist., Taipei City 114, Taiwan (R.O.C.)\r
@@ -15482,12 +15881,6 @@ B00000-BFFFFF     (base 16)            Chongqing IQIYI Intelligence Technology Co., Ltd.
                                Mail box 15123  Haifa  3508409\r
                                IL\r
 \r
-40-11-75   (hex)               disguise Technologies Limited\r
-C00000-CFFFFF     (base 16)            disguise Technologies Limited\r
-                               Units C&D 127 Great Suffolk Street\r
-                               London    SE1 1PP\r
-                               GB\r
-\r
 10-DC-B6   (hex)               Shenzhen Sunwoda intelligent hardware Co.,Ltd\r
 E00000-EFFFFF     (base 16)            Shenzhen Sunwoda intelligent hardware Co.,Ltd\r
                                No.6-6,Yan Shan Rd.,Baoan District,Shenzhen City,China\r
@@ -16250,12 +16643,144 @@ B00000-BFFFFF     (base 16)          Beijing gpthink technology co.,LTD.
                                Beijing    100070\r
                                CN\r
 \r
+40-11-75   (hex)               disguise Technologies Limited\r
+C00000-CFFFFF     (base 16)            disguise Technologies Limited\r
+                               88-89 Blackfriars Rd\r
+                               London  South Bank  SE1 8HA,\r
+                               GB\r
+\r
 44-6F-D8   (hex)               Global Telecom Engineering, Inc\r
 800000-8FFFFF     (base 16)            Global Telecom Engineering, Inc\r
                                17901 Von Karman Ave, Suite 600\r
                                Irvine  CA  92614\r
                                US\r
 \r
+74-F8-DB   (hex)               Avantree Corporation\r
+900000-9FFFFF     (base 16)            Avantree Corporation\r
+                               175 Bernal road Ste 106\r
+                               SAN JOSE  CA  95119-1343\r
+                               US\r
+\r
+04-11-19   (hex)               Shenzhen YIZHENG Technology Co.,Ltd\r
+800000-8FFFFF     (base 16)            Shenzhen YIZHENG Technology Co.,Ltd\r
+                               2305, block A7, Chuangzhi Yuncheng, Liuxian Avenue, Xili Town, Nanshan District\r
+                               ShenZhen  GuangDong  518000\r
+                               CN\r
+\r
+04-11-19   (hex)               Hubei Baobao Intelligent Technology Co.,LTD\r
+B00000-BFFFFF     (base 16)            Hubei Baobao Intelligent Technology Co.,LTD\r
+                               Hubei Baobao Intelligent Technology Co.,LTD\r
+                               Wuhan  Hubei  430000\r
+                               CN\r
+\r
+04-11-19   (hex)               JULIDA LIMITED\r
+E00000-EFFFFF     (base 16)            JULIDA LIMITED\r
+                               1F., NO. 137, DATONG ST., BEITOU DIST.\r
+                               TAIPEI CITY  Taiwan  112\r
+                               TW\r
+\r
+04-11-19   (hex)               FORT Robotics Inc.\r
+000000-0FFFFF     (base 16)            FORT Robotics Inc.\r
+                               170 S. Independence Mall, Suite 275W\r
+                               Philadelphia  PA  19106\r
+                               US\r
+\r
+E8-6C-C7   (hex)               Shenzhen Rongda Computer Co.,Ltd\r
+500000-5FFFFF     (base 16)            Shenzhen Rongda Computer Co.,Ltd\r
+                               905, Block B, DuoCaiKeChuan Park, No.5 Guanle Road\r
+                               Longhua District  Shenzhen, Guangdong    518110\r
+                               CN\r
+\r
+E8-6C-C7   (hex)               Hangzhou Lanxum Security Technology Co., Ltd\r
+900000-9FFFFF     (base 16)            Hangzhou Lanxum Security Technology Co., Ltd\r
+                               Room 402, Block A, 4th Floor, Building 3, No. 351 changhe Road, Changhe Street, Binjiang District\r
+                               Hangzhou  Zhejiang  310000\r
+                               CN\r
+\r
+E8-6C-C7   (hex)               KLAB\r
+600000-6FFFFF     (base 16)            KLAB\r
+                               94-23,Techno 2-ro\r
+                               Yuseong-gu  Daejeon  34014\r
+                               KR\r
+\r
+24-5D-FC   (hex)               Senix Corporation\r
+C00000-CFFFFF     (base 16)            Senix Corporation\r
+                               10516 Route 116, Suite 300\r
+                               Hinesburg  VT  05461\r
+                               US\r
+\r
+24-5D-FC   (hex)               Hunan Honestone lntelligence Technology Co.,Ltd\r
+D00000-DFFFFF     (base 16)            Hunan Honestone lntelligence Technology Co.,Ltd\r
+                               705, Building 1, Fortune Plaza, Wankuntu, Xiangzhang Road, Yuhua District, Changsha City,\r
+                               Changsha    410007\r
+                               CN\r
+\r
+24-5D-FC   (hex)               Dodge\r
+E00000-EFFFFF     (base 16)            Dodge\r
+                               6040 Ponders Court\r
+                               Greenville  SC  29615\r
+                               US\r
+\r
+60-15-92   (hex)               insensiv GmbH\r
+A00000-AFFFFF     (base 16)            insensiv GmbH\r
+                               Auf dem Esch 28\r
+                               Bielefeld  Nordrhein-Westfalen  33619\r
+                               DE\r
+\r
+00-55-DA   (hex)               Nanoleaf\r
+500000-5FFFFF     (base 16)            Nanoleaf\r
+                               100 Front Street East, 4th Floor\r
+                               Toronto  Ontario  M5A 1E1\r
+                               CA\r
+\r
+60-15-92   (hex)               EDA Technology Co.,LTD\r
+200000-2FFFFF     (base 16)            EDA Technology Co.,LTD\r
+                               Room 301, Building 24, Shengchuang Enterprise Park,No.1661 Jialuo Road, Jiading District\r
+                               Shanghai  Shanghai  201822\r
+                               CN\r
+\r
+60-15-92   (hex)               REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED\r
+D00000-DFFFFF     (base 16)            REMOWIRELESS COMMUNICATION INTERNATIONAL CO.,LIMITED\r
+                                REMOWIRELESS RM1111,HONGYI BUILDING NO.2158 WANYUAN ROAD\r
+                               SHANGHAI  SHANGHAI  201103\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               avxav Electronic Trading LLC\r
+100000-1FFFFF     (base 16)            avxav Electronic Trading LLC\r
+                               Office 534 Building # 6WA Dubai Airport Free Zone\r
+                               Dubai  United Arab Emirates  33964\r
+                               AE\r
+\r
+1C-A0-EF   (hex)               Sequent AG\r
+300000-3FFFFF     (base 16)            Sequent AG\r
+                               Eptingerstrasse 3\r
+                               Basel    4052\r
+                               CH\r
+\r
+0C-5C-B5   (hex)               Yamasei\r
+000000-0FFFFF     (base 16)            Yamasei\r
+                               2F., No. 37, Ln. 11, Sec. 6, Minquan E. Rd., Neihu Dist.\r
+                               Taipei  Taiwan (R.O.C.)  114\r
+                               TW\r
+\r
+0C-5C-B5   (hex)               HongKong Blossom Limited\r
+200000-2FFFFF     (base 16)            HongKong Blossom Limited\r
+                               B1715,Jiansheng Building,No. 1 Pingji Road, NanWan Street Longgang\r
+                               Shenzhen    518112\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               Munters Europe AB\r
+E00000-EFFFFF     (base 16)            Munters Europe AB\r
+                               Borgarfjordsgatan 16\r
+                               Kista    16440\r
+                               SE\r
+\r
+1C-A0-EF   (hex)               tec5AG\r
+700000-7FFFFF     (base 16)            tec5AG\r
+                               Weisskirchener Strasse 2-6\r
+                               Steinbach  Hessen  61449\r
+                               DE\r
+\r
 20-85-93   (hex)               Great Lite International\r
 700000-7FFFFF     (base 16)            Great Lite International\r
                                11F., No.207-2, Sec. 3, Beixin Rd., Xindian Dist.,\r
@@ -19787,12 +20312,6 @@ D00000-DFFFFF     (base 16)            Sunthink S&T Development Co.,Ltd
                                Shenzhen    518100\r
                                CN\r
 \r
-94-05-BB   (hex)               Neurik AG\r
-300000-3FFFFF     (base 16)            Neurik AG\r
-                               Im alten Riet 143\r
-                               Schaan  SCHAAN  9494\r
-                               LI\r
-\r
 DC-44-27   (hex)               Tesla,Inc.\r
 100000-1FFFFF     (base 16)            Tesla,Inc.\r
                                3500 Deer Creek Road\r
@@ -20339,8 +20858,176 @@ B00000-BFFFFF     (base 16)           Jiangsu byzoro intelligent technology Co.,Ltd
                                Nanjing  Jiangsu  210012\r
                                CN\r
 \r
+44-6F-D8   (hex)               BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Åž.\r
+200000-2FFFFF     (base 16)            BAYKON Endüstriyel Kontrol Sistemleri San. ve Tic. A.Åž.\r
+                               Kimya Sanayicileri Org. San. Bolgesi Organik Cad. No:31\r
+                               Istanbul  Tuzla   34956\r
+                               TR\r
+\r
 44-6F-D8   (hex)               ITC\r
 700000-7FFFFF     (base 16)            ITC\r
                                3030 Corporate Grove Drive\r
                                Hudsonville  MI  49426\r
                                US\r
+\r
+44-6F-D8   (hex)               CTE\r
+E00000-EFFFFF     (base 16)            CTE\r
+                               No. 1-7, Gongjian Rd., Cidu District, Keelung City 20647, Taiwan R.O.C\r
+                               Keelung  Taiwan  106\r
+                               TW\r
+\r
+98-27-82   (hex)               INFODAS GmbH\r
+100000-1FFFFF     (base 16)            INFODAS GmbH\r
+                               Rhonestr. 2\r
+                               Cologne    50765\r
+                               DE\r
+\r
+98-27-82   (hex)               Anhui Shengren Electronic Technology Co., Ltd\r
+200000-2FFFFF     (base 16)            Anhui Shengren Electronic Technology Co., Ltd\r
+                               520 Jiahe Road, Yuhui District\r
+                               Bengbu  Anhui  233000\r
+                               CN\r
+\r
+98-27-82   (hex)               SureFlap Ltd\r
+E00000-EFFFFF     (base 16)            SureFlap Ltd\r
+                               7 The Irwin Centre, Scotland Road, Dry Drayton\r
+                               Cambridge  Cambridgeshire  CB23 8AR\r
+                               GB\r
+\r
+98-27-82   (hex)               KRISTECH Krzysztof Kajstura\r
+C00000-CFFFFF     (base 16)            KRISTECH Krzysztof Kajstura\r
+                               Porzeczkowa 12\r
+                               Ustro?  Please select region, state or province  43-450\r
+                               PL\r
+\r
+04-11-19   (hex)               ZPD technology Co., Ltd\r
+600000-6FFFFF     (base 16)            ZPD technology Co., Ltd\r
+                               2# Floor, 1# Gate?12# Building?5# Jiangtai Road, Chaoyang District,Beijing\r
+                               Beijing  Beijing  100015\r
+                               CN\r
+\r
+04-11-19   (hex)               CEITA COMMUNICATION TECHNOLOGY CO.,LTD\r
+500000-5FFFFF     (base 16)            CEITA COMMUNICATION TECHNOLOGY CO.,LTD\r
+                               611, Renbao Building, 32 Baolong Road, Changlong Community, Buji Street, Longgang District\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+24-5D-FC   (hex)               Shenzhen Hailuck Electronic Technology CO.,LTD\r
+300000-3FFFFF     (base 16)            Shenzhen Hailuck Electronic Technology CO.,LTD\r
+                               2/F, building 19, Baotian industrial zone, the Third Baotian Road, Bao'an district\r
+                               Shenzhen  GuangDong  518101\r
+                               CN\r
+\r
+04-11-19   (hex)               Bolicom Innovation Technology (BeiJing) Co.,LTD.\r
+400000-4FFFFF     (base 16)            Bolicom Innovation Technology (BeiJing) Co.,LTD.\r
+                               Rm2327, Building23, No.18 Anningzhuang East Road, Haidian District\r
+                               Bei Jing    100000\r
+                               CN\r
+\r
+04-11-19   (hex)               Haerbin Donglin Technology Co., Ltd.\r
+C00000-CFFFFF     (base 16)            Haerbin Donglin Technology Co., Ltd.\r
+                               Room 2, Floor 1, Unit 6, Building 2,Yuanshi Street 35, Nangang District\r
+                               Haerbin  Heilongjiang  150000\r
+                               CN\r
+\r
+E8-6C-C7   (hex)               MORNSUN Guangzhou Science & Technology Co., Ltd.\r
+B00000-BFFFFF     (base 16)            MORNSUN Guangzhou Science & Technology Co., Ltd.\r
+                               No.5,Kehui St. 1,kehui Development Center,Science Ave.,Guangzhou Science City,  Huangpu District\r
+                               GuangZhou  GuangDong   510000\r
+                               CN\r
+\r
+E8-6C-C7   (hex)               ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd\r
+100000-1FFFFF     (base 16)            ASSA ABLOY(GuangZhou) Smart Technology Co., Ltd\r
+                               Plant Building 5, 106 Xieshi Highway, Shibi 1st Village\r
+                               Guangzhou  GuangDong  511495\r
+                               CN\r
+\r
+24-5D-FC   (hex)               ONLY\r
+B00000-BFFFFF     (base 16)            ONLY\r
+                               1F., No. 16, Ln. 76, Zhongyang N. Rd., Sanchong Dist\r
+                               New Taipei City  Taiwan (R.O.C.)   24146\r
+                               TW\r
+\r
+24-5D-FC   (hex)               Tata Sky Limited\r
+A00000-AFFFFF     (base 16)            Tata Sky Limited\r
+                               Unit 301 to 305, 3rd Floor, Windsor, Off C.S.T. Road, Kalina, Santacruz (East), Mumbai â€“ 400 098 \r
+                               Mumbai  Maharashtra  400098\r
+                               IN\r
+\r
+94-05-BB   (hex)               Neutrik AG\r
+300000-3FFFFF     (base 16)            Neutrik AG\r
+                               Im alten Riet 143\r
+                               Schaan  SCHAAN  9494\r
+                               LI\r
+\r
+60-15-92   (hex)               Yangzhou Wanfang Electronic Technology,CO .,Ltd.\r
+800000-8FFFFF     (base 16)            Yangzhou Wanfang Electronic Technology,CO .,Ltd.\r
+                               No.96 Anlin Road,Guangling District\r
+                               Yangzhou City  Jiangsu Province  225000\r
+                               CN\r
+\r
+A4-53-EE   (hex)               Shenzhen Xunqi Interconnet Technology Co., Ltd\r
+600000-6FFFFF     (base 16)            Shenzhen Xunqi Interconnet Technology Co., Ltd\r
+                               26G, block B, Haiwang building, Chuangye Road, Nanshan District,\r
+                               Shenzhen  Guangdong  518000\r
+                               CN\r
+\r
+60-15-92   (hex)               Faster CZ spol. s r.o.\r
+700000-7FFFFF     (base 16)            Faster CZ spol. s r.o.\r
+                               Jarní 44g\r
+                               Brno    61400\r
+                               CZ\r
+\r
+60-15-92   (hex)               BEIJING KUANGSHI TECHNOLOGY CO., LTD\r
+600000-6FFFFF     (base 16)            BEIJING KUANGSHI TECHNOLOGY CO., LTD\r
+                               Room 1018,10th Floor, No.1 Zhongguancun Street, Haidian District, \r
+                               Beijing  Beijing  100086\r
+                               CN\r
+\r
+0C-5C-B5   (hex)               BSU Inc\r
+D00000-DFFFFF     (base 16)            BSU Inc\r
+                               1611 Headway Circle, Building 1, Suite 200\r
+                               Austin  TX  78754\r
+                               US\r
+\r
+0C-5C-B5   (hex)               Zhengzhou coal machinery hydraulic electric control Co.,Ltd\r
+A00000-AFFFFF     (base 16)            Zhengzhou coal machinery hydraulic electric control Co.,Ltd\r
+                               167 Jingkai 9th Street, Zhengzhou Economic Development Zone\r
+                               Zhengzhou    45000\r
+                               CN\r
+\r
+1C-A0-EF   (hex)               Nanjing Bilin Intelligent Identification Technology Co.,Ltd\r
+500000-5FFFFF     (base 16)            Nanjing Bilin Intelligent Identification Technology Co.,Ltd\r
+                               No.9 Bancang Street\r
+                               Nanjing  Jiangsu  210000\r
+                               CN\r
+\r
+1C-A0-EF   (hex)               Schneider-Electric(China)Co.Ltd,Shenzhen Branch\r
+200000-2FFFFF     (base 16)            Schneider-Electric(China)Co.Ltd,Shenzhen Branch\r
+                               Unit A to C 7/F and 8/F,CES Building ,No.3099,Keyuan South road, Nanshan Dist, Shenzhen, GD, China\r
+                               SHENZHEN    518000\r
+                               CN\r
+\r
+1C-A0-EF   (hex)                BMK professional electronics GmbH\r
+B00000-BFFFFF     (base 16)             BMK professional electronics GmbH\r
+                               Werner-von-Siemens-Straße 6\r
+                               Augsburg     86159\r
+                               DE\r
+\r
+1C-A0-EF   (hex)               Atlas Aerospace\r
+900000-9FFFFF     (base 16)            Atlas Aerospace\r
+                               Ulbrokas 19a\r
+                               Riga  Riga  LV-1021\r
+                               LV\r
+\r
+1C-A0-EF   (hex)               Henrich Electronics Corporation\r
+A00000-AFFFFF     (base 16)            Henrich Electronics Corporation\r
+                               225 Deming Place\r
+                               Westmont    60559\r
+                               US\r
+\r
+1C-A0-EF   (hex)               RDA Microelectronics Technologies (Shanghai) Co. , Ltd\r
+E00000-EFFFFF     (base 16)            RDA Microelectronics Technologies (Shanghai) Co. , Ltd\r
+                               Room 336, No.3, Lane 2288, Zuchongzhi Road, Pudong Area\r
+                               Shanghai  Shanghai  200120\r
+                               CN\r
index 18422c1ab19ef4af1329b56661049a3caf6785f7..1322dce12e87066b5f1589ca462c7c6a1159f9bb 100644 (file)
@@ -218,9 +218,6 @@ CF8000-CF8FFF     (base 16)         Idneo Technologies S.A.U.
                                Barcelona  Barcelona  08028\r
                                ES\r
 \r
-70-B3-D5   (hex)               Private\r
-A9F000-A9FFFF     (base 16)            Private\r
-\r
 70-B3-D5   (hex)               Arevita\r
 5E1000-5E1FFF     (base 16)            Arevita\r
                                Baltu ave 145\r
@@ -413,9 +410,6 @@ E33000-E33FFF     (base 16)         DEUTA-WERKE GmbH
                                New Taipei City, Taiwan    22101\r
                                TW\r
 \r
-70-B3-D5   (hex)               Private\r
-9EE000-9EEFFF     (base 16)            Private\r
-\r
 70-B3-D5   (hex)               Wuhan Xingtuxinke ELectronic Co.,Ltd\r
 70E000-70EFFF     (base 16)            Wuhan Xingtuxinke ELectronic Co.,Ltd\r
                                NO.C3-8F,Software Park,Optics Valley,East Lake Development Zone,Wuhan,Hubei,China\r
@@ -1115,12 +1109,6 @@ D6F000-D6FFFF     (base 16)              X-SPEX GmbH
                                Poellau bei Hartberg  Steiermark  8225\r
                                AT\r
 \r
-70-B3-D5   (hex)               TORGOVYY DOM  TEHNOLOGIY LLC\r
-7C0000-7C0FFF     (base 16)            TORGOVYY DOM  TEHNOLOGIY LLC\r
-                               The village of Rumyantsevo,  Build.1\r
-                               Moscow  Moscow  142784\r
-                               RU\r
-\r
 70-B3-D5   (hex)               Raft Technologies\r
 8D0000-8D0FFF     (base 16)            Raft Technologies\r
                                Habarzel 25\r
@@ -1391,12 +1379,6 @@ EA7000-EA7FFF     (base 16)              S.I.C.E.S. srl
                                Mississauga  Ontario   L4V 1W1\r
                                CA\r
 \r
-70-B3-D5   (hex)               TAIYO SEIKI CO.,LTD.\r
-69B000-69BFFF     (base 16)            TAIYO SEIKI CO.,LTD.\r
-                               1600 Aza-Shironoshita Asahi\r
-                               Shin Asahi-cho  Takashima, Shiga  520-1501\r
-                               JP\r
-\r
 70-B3-D5   (hex)               PLUTO Solution co.,ltd.\r
 842000-842FFF     (base 16)            PLUTO Solution co.,ltd.\r
                                B-1018, Kumkang Penterium IT Tower, 282, Hagui-ro, Dongan-gu\r
@@ -1415,12 +1397,6 @@ EA7000-EA7FFF     (base 16)              S.I.C.E.S. srl
                                Plzen    301 28\r
                                CZ\r
 \r
-70-B3-D5   (hex)               S Labs sp. z o.o.\r
-C53000-C53FFF     (base 16)            S Labs sp. z o.o.\r
-                               Jasnogórska, 44\r
-                               Kraków  Lesser Poland  31-358\r
-                               PL\r
-\r
 70-B3-D5   (hex)               Dameca a/s\r
 EEA000-EEAFFF     (base 16)            Dameca a/s\r
                                Islevdalvej 211\r
@@ -1493,12 +1469,6 @@ A7E000-A7EFFF     (base 16)              QUICCO SOUND Corporation
                                Saint-Petersburg  Russia  197183\r
                                RU\r
 \r
-70-B3-D5   (hex)               Leviathan Solutions Ltd.\r
-A69000-A69FFF     (base 16)            Leviathan Solutions Ltd.\r
-                               Kazal utca 64-66\r
-                               Budapest    1031\r
-                               HU\r
-\r
 70-B3-D5   (hex)               BEDEROV GmbH\r
 371000-371FFF     (base 16)            BEDEROV GmbH\r
                                Rankestr. 8\r
@@ -4853,24 +4823,216 @@ B92000-B92FFF     (base 16)            N A Communications LLC
                                TAIPEI    11560\r
                                TW\r
 \r
-70-B3-D5   (hex)               nexgenwave\r
-5BD000-5BDFFF     (base 16)            nexgenwave\r
-                               1209 sicox tower, 484 Dunchon-daero, jungwon-gu\r
-                               Sungnam-si  gyeonggi-do  13229\r
-                               KR\r
-\r
 70-B3-D5   (hex)               EBZ SysTec GmbH\r
 1FA000-1FAFFF     (base 16)            EBZ SysTec GmbH\r
                                Bleicherstraße 7\r
                                Ravensburg  DE    88212\r
                                DE\r
 \r
+70-B3-D5   (hex)               nexgenwave\r
+5BD000-5BDFFF     (base 16)            nexgenwave\r
+                               1209 sicox tower, 484 Dunchon-daero, jungwon-gu\r
+                               Sungnam-si  gyeonggi-do  13229\r
+                               KR\r
+\r
 70-B3-D5   (hex)               TRIOPTICS\r
 A11000-A11FFF     (base 16)            TRIOPTICS\r
                                Strandbaddamm 6\r
                                Wedel  Schleswig-Holstein  22880\r
                                DE\r
 \r
+70-B3-D5   (hex)               Lockheed Martin - THAAD\r
+9EE000-9EEFFF     (base 16)            Lockheed Martin - THAAD\r
+                               4800 Bradford Drive\r
+                               Huntsville  AL  35805\r
+                               US\r
+\r
+70-B3-D5   (hex)               TT Group SRL\r
+BD7000-BD7FFF     (base 16)            TT Group SRL\r
+                               Via Pazzano 112\r
+                               Roma  RM  00118\r
+                               IT\r
+\r
+70-B3-D5   (hex)               SIAME\r
+66E000-66EFFF     (base 16)            SIAME\r
+                               RUE DES MATHEMATIQUES\r
+                               GROMBALIA    8030\r
+                               TN\r
+\r
+70-B3-D5   (hex)               Stecomp\r
+EE0000-EE0FFF     (base 16)            Stecomp\r
+                               Bollaarsdijk 11\r
+                               Brielle    3231LA\r
+                               NL\r
+\r
+70-B3-D5   (hex)               Plenty Unlimited Inc\r
+D04000-D04FFF     (base 16)            Plenty Unlimited Inc\r
+                               590 Eccles Ave\r
+                               South San Francisco  CA  94080\r
+                               US\r
+\r
+70-B3-D5   (hex)               Aliter Technologies\r
+586000-586FFF     (base 16)            Aliter Technologies\r
+                               Turcianska 16\r
+                               Bratislava    82109\r
+                               SK\r
+\r
+70-B3-D5   (hex)               TORGOVYY DOM  TEHNOLOGIY LLC\r
+7C0000-7C0FFF     (base 16)            TORGOVYY DOM  TEHNOLOGIY LLC\r
+                               Gospytalnaya 10, ap. 109, village Selyatino, city Naro-Fominsk,\r
+                               Moscow  Moscow Region  143345\r
+                               RU\r
+\r
+70-B3-D5   (hex)               Automata GmbH & Co. KG\r
+19D000-19DFFF     (base 16)            Automata GmbH & Co. KG\r
+                               Gewerbering 5\r
+                               Ried  Bavaria  86510\r
+                               DE\r
+\r
+70-B3-D5   (hex)               XJ ELECTRIC CO., LTD.\r
+F26000-F26FFF     (base 16)            XJ ELECTRIC CO., LTD.\r
+                               #1298 XUJI AVENUE\r
+                               XUCHANG  HENAN  461000\r
+                               CN\r
+\r
+70-B3-D5   (hex)               Topic Embedded Products B.V.\r
+63D000-63DFFF     (base 16)            Topic Embedded Products B.V.\r
+                               Materiaalweg 4\r
+                               Best  Noord-Brabant  5681 RJ\r
+                               NL\r
+\r
+70-B3-D5   (hex)               EcoG\r
+1AE000-1AEFFF     (base 16)            EcoG\r
+                               Gaenslerweg 24\r
+                               Furth  Bavaria  82041\r
+                               DE\r
+\r
+70-B3-D5   (hex)               Jiangsu Etern Compamy Limited\r
+DA0000-DA0FFF     (base 16)            Jiangsu Etern Compamy Limited\r
+                               No. 1788 fenhu Guo Dao Road, Foho New&High-tech Industrial Development Zone, Wujiang\r
+                               Suzhou  Jiangsu  215211\r
+                               CN\r
+\r
+70-B3-D5   (hex)               JSC Ural Factories\r
+0FD000-0FDFFF     (base 16)            JSC Ural Factories\r
+                               Gorky street 92\r
+                               Izhevsk  Udmurtia  426000\r
+                               RU\r
+\r
+70-B3-D5   (hex)               Semiconsoft, inc\r
+212000-212FFF     (base 16)            Semiconsoft, inc\r
+                               83 PINE HILL RD\r
+                               SOUTHBOROUGH  MA  01772\r
+                               US\r
+\r
+70-B3-D5   (hex)               M.S. CONTROL\r
+CE0000-CE0FFF     (base 16)            M.S. CONTROL\r
+                               139-141 Fitzgerald Street\r
+                               WEST PERTH  WA  6005\r
+                               AU\r
+\r
+70-B3-D5   (hex)               Hubbell Power Systems\r
+DDA000-DDAFFF     (base 16)            Hubbell Power Systems\r
+                               353 Powerville Road\r
+                               Boonton Township  NJ  07005\r
+                               US\r
+\r
+70-B3-D5   (hex)               Potter Electric Signal Co. LLC\r
+6D5000-6D5FFF     (base 16)            Potter Electric Signal Co. LLC\r
+                               1609 Park 370 Place\r
+                               Hazelwood  MO  63042\r
+                               US\r
+\r
+70-B3-D5   (hex)               Master Meter Inc.\r
+A9F000-A9FFFF     (base 16)            Master Meter Inc.\r
+                               101 Regency Pkwy\r
+                               Mansfield  TX  76063\r
+                               US\r
+\r
+70-B3-D5   (hex)               TIAMA\r
+798000-798FFF     (base 16)            TIAMA\r
+                               ZA des Plattes - 1 Chemin des Plattes\r
+                               VOURLES     69390 \r
+                               FR\r
+\r
+70-B3-D5   (hex)               Rapiot\r
+265000-265FFF     (base 16)            Rapiot\r
+                               Eteläesplanadi 2\r
+                               Helsinki    00130\r
+                               FI\r
+\r
+70-B3-D5   (hex)               OMNISENSING PHOTONICS LLC\r
+70D000-70DFFF     (base 16)            OMNISENSING PHOTONICS LLC\r
+                               8015 Four Quarter Road\r
+                               Ellicott City  MD  21043\r
+                               US\r
+\r
+70-B3-D5   (hex)               Torion Plasma Corporation\r
+B70000-B70FFF     (base 16)            Torion Plasma Corporation\r
+                               99 Hooper Rd, Unit #6\r
+                               Barrie  Ontario  L4N9S3\r
+                               CA\r
+\r
+70-B3-D5   (hex)               Horizon Co., Ltd\r
+69B000-69BFFF     (base 16)            Horizon Co., Ltd\r
+                               1600 Aza-Shironoshita Asahi\r
+                               Shin Asahi-cho  Takashima, Shiga  520-1501\r
+                               JP\r
+\r
+70-B3-D5   (hex)               S Labs sp. z o.o.\r
+C53000-C53FFF     (base 16)            S Labs sp. z o.o.\r
+                               Dworska 1a/1u\r
+                               Kraków  Lesser Poland  30-314\r
+                               PL\r
+\r
+70-B3-D5   (hex)               Smart Systems LLC\r
+746000-746FFF     (base 16)            Smart Systems LLC\r
+                               Flat 1, building 7, Izmalkova street\r
+                               Mykolaiv    54028\r
+                               UA\r
+\r
+70-B3-D5   (hex)               Megger Germany GmbH\r
+59F000-59FFFF     (base 16)            Megger Germany GmbH\r
+                               Röderaue 41\r
+                               Radeburg    01471\r
+                               DE\r
+\r
+70-B3-D5   (hex)               BluB0X Security, Inc.\r
+16D000-16DFFF     (base 16)            BluB0X Security, Inc.\r
+                               9 Bartlet Street Suite 334\r
+                               Andover  MA  01810\r
+                               US\r
+\r
+70-B3-D5   (hex)               Leviathan Solutions Ltd.\r
+A69000-A69FFF     (base 16)            Leviathan Solutions Ltd.\r
+                               Abel Jeno utca 23\r
+                               Budapest    1113\r
+                               HU\r
+\r
+70-B3-D5   (hex)               ACD Elekronik GmbH\r
+D6D000-D6DFFF     (base 16)            ACD Elekronik GmbH\r
+                               Engelberg 2\r
+                               Achstetten    88480\r
+                               DE\r
+\r
+70-B3-D5   (hex)               biosilver .co.,ltd\r
+D21000-D21FFF     (base 16)            biosilver .co.,ltd\r
+                               2-14-4, shinyokohama\r
+                               yokohama  kanagawa  2220033\r
+                               JP\r
+\r
+70-B3-D5   (hex)               Vemco Sp. z o. o.\r
+D45000-D45FFF     (base 16)            Vemco Sp. z o. o.\r
+                               ul. Biala 1\r
+                               Gdansk    80-435\r
+                               PL\r
+\r
+70-B3-D5   (hex)               Network Integrity Systems\r
+9FF000-9FFFFF     (base 16)            Network Integrity Systems\r
+                               1937 Tate Blvd. SE\r
+                               Hickory  NC  28602\r
+                               US\r
+\r
 70-B3-D5   (hex)               EVCO SPA\r
 A80000-A80FFF     (base 16)            EVCO SPA\r
                                VIA FELTRE N. 81\r
@@ -6005,9 +6167,6 @@ A76000-A76FFF     (base 16)               Pietro Fiorentini
                                Arcugnano    36057\r
                                IT\r
 \r
-70-B3-D5   (hex)               Private\r
-720000-720FFF     (base 16)            Private\r
-\r
 70-B3-D5   (hex)               OnYield Inc Ltd\r
 B74000-B74FFF     (base 16)            OnYield Inc Ltd\r
                                814 Houston Centre, 63 Mody Road\r
@@ -7328,12 +7487,6 @@ C87000-C87FFF     (base 16)              Siemens AG
                                Shenzhen  Guangdong  518054\r
                                CN\r
 \r
-70-B3-D5   (hex)               MiraeSignal Co., Ltd\r
-38C000-38CFFF     (base 16)            MiraeSignal Co., Ltd\r
-                               #203 E-dong Bundang Techno Park Yatapdong\r
-                               Sungnam  Kyungkido  463760\r
-                               KR\r
-\r
 70-B3-D5   (hex)               Stara S/A Indústria de Implementos Agrícolas\r
 13E000-13EFFF     (base 16)            Stara S/A Indústria de Implementos Agrícolas\r
                                Avenida Stara 519\r
@@ -9692,12 +9845,6 @@ AFC000-AFCFFF     (base 16)              BAE Systems
                                Endicott  NY  13760\r
                                US\r
 \r
-70-B3-D5   (hex)               DAYOUPLUS\r
-474000-474FFF     (base 16)            DAYOUPLUS\r
-                               3F 509, Dunchon-daero, Jungwon-gu, Seongnam-si, Gyeonggi-do, Republic of Korea\r
-                               Seongnam-si  Gyeonggi-do  13217\r
-                               KR\r
-\r
 70-B3-D5   (hex)               Guangzhou Xianhe Technology Engineering Co., Ltd\r
 C13000-C13FFF     (base 16)            Guangzhou Xianhe Technology Engineering Co., Ltd\r
                                No. 30-6, Jiantai Road, Dongyong Town, Nansha District\r
@@ -9770,18 +9917,162 @@ E66000-E66FFF     (base 16)            Eneon sp. z o.o.
                                Warsaw    02-486\r
                                PL\r
 \r
+70-B3-D5   (hex)               WIZAPPLY CO.,LTD\r
+8D2000-8D2FFF     (base 16)            WIZAPPLY CO.,LTD\r
+                               1-3-13-5107, Benten\r
+                               Osaka-shi, Minato-ku  Osaka-fu  552-0007\r
+                               JP\r
+\r
+70-B3-D5   (hex)               AmericanPharma Technologies\r
+B4C000-B4CFFF     (base 16)            AmericanPharma Technologies\r
+                               222 N 13th Street   Suite 200\r
+                               Boise  ID  83702\r
+                               US\r
+\r
 70-B3-D5   (hex)               ALFI\r
 B0D000-B0DFFF     (base 16)            ALFI\r
                                Via Castelletto 20\r
                                Borgo Ticino  NO  28040\r
                                IT\r
 \r
-70-B3-D5   (hex)               WIZAPPLY CO.,LTD\r
-8D2000-8D2FFF     (base 16)            WIZAPPLY CO.,LTD\r
-                               1-3-13-5107, Benten\r
-                               Osaka-shi, Minato-ku  Osaka-fu  552-0007\r
+70-B3-D5   (hex)               Medipense Inc.\r
+72B000-72BFFF     (base 16)            Medipense Inc.\r
+                               9145 rue Boivin\r
+                               Montreal  Quebec  H8R 2E5\r
+                               CA\r
+\r
+70-B3-D5   (hex)               MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.\r
+7CC000-7CCFFF     (base 16)            MITSUBISHI HEAVY INDUSTRIES THERMAL SYSTEMS, LTD.\r
+                               3-1, Asahi, Nishibiwajima-Cho\r
+                               Kiyosu  Aichi  452-8561\r
                                JP\r
 \r
+70-B3-D5   (hex)               The-Box Development\r
+F31000-F31FFF     (base 16)            The-Box Development\r
+                               D.D. Eisenhowerstraat 74\r
+                               Groningen  Groningen  9728 RX\r
+                               NL\r
+\r
+70-B3-D5   (hex)               MAS Elettronica sas di Mascetti Sandro e C.\r
+4FB000-4FBFFF     (base 16)            MAS Elettronica sas di Mascetti Sandro e C.\r
+                               Via Risorgimento 16/C\r
+                               Selvazzano Dentro  Padova  35030\r
+                               IT\r
+\r
+70-B3-D5   (hex)               DHK Storage, LLC\r
+915000-915FFF     (base 16)            DHK Storage, LLC\r
+                               13873 Park Center Rd, Ste 510N\r
+                               Herndon  VA  20171\r
+                               US\r
+\r
+70-B3-D5   (hex)               Shenzhen Zhiting Technology Co.,Ltd\r
+FE1000-FE1FFF     (base 16)            Shenzhen Zhiting Technology Co.,Ltd\r
+                               Room 516, Building 4,  Qidi Xiexin science and Technology Park, Longcheng Street\r
+                               Shenzhen  Guangdong  518109\r
+                               CN\r
+\r
+70-B3-D5   (hex)               MiraeSignal Co., Ltd\r
+38C000-38CFFF     (base 16)            MiraeSignal Co., Ltd\r
+                               #701,C-dong Bundang Techno Park Pangyoro 744\r
+                               Bundang-gu Sungnam-si  Kyungkido  13510\r
+                               KR\r
+\r
+70-B3-D5   (hex)               on-systems limited\r
+5B7000-5B7FFF     (base 16)            on-systems limited\r
+                               615A Jubilee Road\r
+                               Letchworth Garden City  Hertfordshire  SG6 1NE\r
+                               GB\r
+\r
+70-B3-D5   (hex)               Blueprint Lab\r
+FE0000-FE0FFF     (base 16)            Blueprint Lab\r
+                               3-5 Queen St\r
+                               Glebe  NSW  2037\r
+                               AU\r
+\r
+70-B3-D5   (hex)               LEIDOS\r
+004000-004FFF     (base 16)            LEIDOS\r
+                               1121 W Reeves\r
+                               Ridgecrest  CA  93555\r
+                               US\r
+\r
+70-B3-D5   (hex)               Avionica \r
+CC0000-CC0FFF     (base 16)            Avionica \r
+                               9941 West Jessamine St\r
+                               Miami   FL  33157 \r
+                               US\r
+\r
+70-B3-D5   (hex)               Swiss Timing LTD\r
+725000-725FFF     (base 16)            Swiss Timing LTD\r
+                               Rue de l'Envers 1\r
+                               Corgemont    2606\r
+                               CH\r
+\r
+70-B3-D5   (hex)               RoyalShield Technologies India Private Limited\r
+F1B000-F1BFFF     (base 16)            RoyalShield Technologies India Private Limited\r
+                               B-116, DDA Sheds, Okhla Industrial Area, Okhla Phase -I\r
+                               New Delhi  New Delhi  110020\r
+                               IN\r
+\r
+70-B3-D5   (hex)               Nudron IoT Solutions LLP\r
+6B4000-6B4FFF     (base 16)            Nudron IoT Solutions LLP\r
+                               10, Gitaneel Arcade, Hill Road, Bandra-W\r
+                               Mumbai  Maharashtra  400050\r
+                               IN\r
+\r
+70-B3-D5   (hex)               DORLET SAU\r
+DEB000-DEBFFF     (base 16)            DORLET SAU\r
+                               Albert Eistein 34\r
+                               Alava  SPAIN  01510\r
+                               ES\r
+\r
+70-B3-D5   (hex)               Dadacon GmbH\r
+B79000-B79FFF     (base 16)            Dadacon GmbH\r
+                               Hammarskjoeldring 75F\r
+                               Frankfurt am Main  Hessen  60439\r
+                               DE\r
+\r
+70-B3-D5   (hex)               XIA LLC\r
+3DC000-3DCFFF     (base 16)            XIA LLC\r
+                               31057 Genstar Road\r
+                               HAYWARD  CA  94544\r
+                               US\r
+\r
+70-B3-D5   (hex)               BAB TECHNOLOGIE GmbH\r
+E19000-E19FFF     (base 16)            BAB TECHNOLOGIE GmbH\r
+                               Hoerder Burgstr.18\r
+                               Dortmund  NRW  44263\r
+                               DE\r
+\r
+70-B3-D5   (hex)               Schneider Electric Motion USA\r
+2E4000-2E4FFF     (base 16)            Schneider Electric Motion USA\r
+                               370 N. Main St.\r
+                               Marlborough  CT  06447\r
+                               US\r
+\r
+70-B3-D5   (hex)               Nordson Corporation\r
+50B000-50BFFF     (base 16)            Nordson Corporation\r
+                               11475 Lakefield Dr\r
+                               Duluth  GA  30097\r
+                               US\r
+\r
+70-B3-D5   (hex)               Done Design Inc\r
+928000-928FFF     (base 16)            Done Design Inc\r
+                               930 Delray Drive\r
+                               Forest Hill  MD  21050\r
+                               US\r
+\r
+70-B3-D5   (hex)               Jeio Tech \r
+720000-720FFF     (base 16)            Jeio Tech \r
+                               19 Alexander Road, Suite 7\r
+                               Billerica  MA  01821\r
+                               US\r
+\r
+70-B3-D5   (hex)               TESCAN Brno, s.r.o.\r
+812000-812FFF     (base 16)            TESCAN Brno, s.r.o.\r
+                               Libusina tr.1\r
+                               Brno    62300\r
+                               CZ\r
+\r
 70-B3-D5   (hex)               System West dba ICS Electronics\r
 E06000-E06FFF     (base 16)            System West dba ICS Electronics\r
                                7034 Commerce Circle Suite A\r
@@ -14657,12 +14948,120 @@ D78000-D78FFF     (base 16)          Nxvi Microelectronics Technology (Jinan) Co., Ltd.
                                Seven Hills  NSW  1730\r
                                AU\r
 \r
+70-B3-D5   (hex)               AKASAKATEC  INC.\r
+D83000-D83FFF     (base 16)            AKASAKATEC  INC.\r
+                               3F Marina Plaza 4-2\r
+                               Shiraho kanazawa-ku Yokohamashi    2360007\r
+                               JP\r
+\r
+70-B3-D5   (hex)               VTEQ\r
+B12000-B12FFF     (base 16)            VTEQ\r
+                               Conca de Barbera\r
+                               Castellar del Vallés  Barcelona / Spain  08122\r
+                               ES\r
+\r
+70-B3-D5   (hex)               promedias AG\r
+520000-520FFF     (base 16)            promedias AG\r
+                               Grabenackerstrasse 27\r
+                               Oberhasli  ZH  CH-8156\r
+                               CH\r
+\r
 00-1B-C5   (hex)               OctoGate IT Security Systems GmbH\r
 030000-030FFF     (base 16)            OctoGate IT Security Systems GmbH\r
                                Klingender Strasse 5\r
                                Paderborn  NRW  33100\r
                                DE\r
 \r
+70-B3-D5   (hex)               Array Technologies Inc.\r
+FB4000-FB4FFF     (base 16)            Array Technologies Inc.\r
+                               21 Sequin Drive\r
+                               Glastonbury    06033\r
+                               US\r
+\r
+70-B3-D5   (hex)               REO AG\r
+AD0000-AD0FFF     (base 16)            REO AG\r
+                               Brühlerstr. 100\r
+                               Solingen    42657\r
+                               DE\r
+\r
+70-B3-D5   (hex)               ejoin, s.r.o.\r
+44C000-44CFFF     (base 16)            ejoin, s.r.o.\r
+                               Sturova 1\r
+                               Dubnica nad Vahom    01841\r
+                               SK\r
+\r
+70-B3-D5   (hex)               TEX COMPUTER SRL \r
+390000-390FFF     (base 16)            TEX COMPUTER SRL \r
+                               VIA MERCADANTE 35\r
+                               CATTOLICA   RIMINI   47841\r
+                               IT\r
+\r
+70-B3-D5   (hex)               Grau Elektronik GmbH\r
+314000-314FFF     (base 16)            Grau Elektronik GmbH\r
+                               Badhausweg 14\r
+                               Karlsbad Ittersbach  Baden-Württemberg  76307\r
+                               DE\r
+\r
+70-B3-D5   (hex)               microWerk GmbH\r
+D2C000-D2CFFF     (base 16)            microWerk GmbH\r
+                               Kaffeegasse, 7\r
+                               Halsenbach    56283\r
+                               DE\r
+\r
+70-B3-D5   (hex)               Guan Show Technologe Co., Ltd.\r
+46D000-46DFFF     (base 16)            Guan Show Technologe Co., Ltd.\r
+                               No.127, Jianguo 1st Rd., Lingya Dist.\r
+                                Kaohsiung City     802\r
+                               TW\r
+\r
+70-B3-D5   (hex)               Foxtrot Research Corp\r
+604000-604FFF     (base 16)            Foxtrot Research Corp\r
+                               6201 Johns Road, Suite 3\r
+                               Tampa  FL  33634\r
+                               US\r
+\r
+70-B3-D5   (hex)               Monnit Corporation\r
+A1E000-A1EFFF     (base 16)            Monnit Corporation\r
+                               450 South Simmons STE 670\r
+                               Kaysville  UT  84037\r
+                               US\r
+\r
+70-B3-D5   (hex)               DEUTA-WERKE GmbH\r
+681000-681FFF     (base 16)            DEUTA-WERKE GmbH\r
+                               Paffrather Str. 140\r
+                               Bergisch Gladbach  North Rhine-Westphalia  51465\r
+                               DE\r
+\r
+70-B3-D5   (hex)               Movicom Electric LLC\r
+3B3000-3B3FFF     (base 16)            Movicom Electric LLC\r
+                               Nauchny proezd, 20\r
+                               Moscow  Moscow  117246\r
+                               RU\r
+\r
+70-B3-D5   (hex)               SMITEC S.p.A.\r
+312000-312FFF     (base 16)            SMITEC S.p.A.\r
+                               Via Carlo Ceresa, 10\r
+                               San Giovanni Bianco  Bergamo  24015\r
+                               IT\r
+\r
+70-B3-D5   (hex)               Sicon srl\r
+690000-690FFF     (base 16)            Sicon srl\r
+                               Via Sila 1/3\r
+                               Isola Vicentina  Vicenza  36033\r
+                               IT\r
+\r
+70-B3-D5   (hex)               SCHEIBER\r
+CFA000-CFAFFF     (base 16)            SCHEIBER\r
+                               2 BELLEVUE\r
+                               SAINT PIERRE DU CHEMIN    85120\r
+                               FR\r
+\r
+70-B3-D5   (hex)               Telerob Gesellschaft für Fernhantierungs\r
+6D4000-6D4FFF     (base 16)            Telerob Gesellschaft für Fernhantierungs\r
+                               Vogelsangstr. 8\r
+                               Ostfildern    73760\r
+                               DE\r
+\r
 70-B3-D5   (hex)               YUYAMA MFG Co.,Ltd\r
 BBB000-BBBFFF     (base 16)            YUYAMA MFG Co.,Ltd\r
                                3-3-1\r
@@ -15353,9 +15752,6 @@ FC0000-FC0FFF     (base 16)             CODESYSTEM Co.,Ltd
                                Petah Tikva  Israel  49000\r
                                IL\r
 \r
-70-B3-D5   (hex)               Private\r
-F7C000-F7CFFF     (base 16)            Private\r
-\r
 70-B3-D5   (hex)               boekel\r
 AF8000-AF8FFF     (base 16)            boekel\r
                                855 pennsylvania blvd\r
@@ -16703,12 +17099,6 @@ C3D000-C3DFFF     (base 16)            CISTECH Solutions
                                HONGKONG    999077\r
                                HK\r
 \r
-70-B3-D5   (hex)               Shenzhen Rongda Computer Co.,Ltd\r
-289000-289FFF     (base 16)            Shenzhen Rongda Computer Co.,Ltd\r
-                               Room A616, Aoshida Building, Zhongkang Road, Futian District\r
-                               Shenzhen  Guangdong    518049\r
-                               CN\r
-\r
 70-B3-D5   (hex)               FIBERNET LTD\r
 041000-041FFF     (base 16)            FIBERNET LTD\r
                                9 Hakidma st. Hi-Tech City Park,\r
@@ -19679,6 +20069,168 @@ A79000-A79FFF     (base 16)           NOREYA Technology e.U.
                                Dinkelsbuehl  Bavaria  91550\r
                                DE\r
 \r
+70-B3-D5   (hex)               Akse srl\r
+128000-128FFF     (base 16)            Akse srl\r
+                               Via Aldo Moro, 39\r
+                               Reggio Emilia  Italy  42124\r
+                               IT\r
+\r
+70-B3-D5   (hex)               AXING AG\r
+CA6000-CA6FFF     (base 16)            AXING AG\r
+                               Gewerbehaus Moskau\r
+                               Ramsen    8262\r
+                               CH\r
+\r
+70-B3-D5   (hex)               LLC NTZ Mekhanotronika\r
+6C0000-6C0FFF     (base 16)            LLC NTZ Mekhanotronika\r
+                               Pionerstroya, build 23a\r
+                               Saint-Petersburg    198206\r
+                               RU\r
+\r
+70-B3-D5   (hex)               NAL Research Corporation\r
+1B0000-1B0FFF     (base 16)            NAL Research Corporation\r
+                               11100 Endeavor Ct, Suite 300\r
+                               Manassas  VA  20109\r
+                               US\r
+\r
+70-B3-D5   (hex)               Arwin Technology Limited\r
+8C9000-8C9FFF     (base 16)            Arwin Technology Limited\r
+                               Unit 215, 2/F, 19W, 19 Science Park West Avenue\r
+                               Hong Kong    0\r
+                               HK\r
+\r
+70-B3-D5   (hex)               PNETWORKS\r
+EF0000-EF0FFF     (base 16)            PNETWORKS\r
+                               TEKNOPARK Bul. 1/1A No: 201 Pendik ?stanbul\r
+                               Istanbul    34906\r
+                               TR\r
+\r
+70-B3-D5   (hex)               Herholdt Controls srl\r
+C6B000-C6BFFF     (base 16)            Herholdt Controls srl\r
+                               Via Mestre 13\r
+                               Milan    20132\r
+                               IT\r
+\r
+70-B3-D5   (hex)               Atlas Lighting Products\r
+CB5000-CB5FFF     (base 16)            Atlas Lighting Products\r
+                               1406 S Mebane St\r
+                               Burlington    27215\r
+                               US\r
+\r
+70-B3-D5   (hex)               Weble Sàrl\r
+96C000-96CFFF     (base 16)            Weble Sàrl\r
+                               Rue du Jura 12\r
+                               Bussigny  Vaud  1030\r
+                               CH\r
+\r
+70-B3-D5   (hex)               Grossenbacher Systeme AG\r
+CE8000-CE8FFF     (base 16)            Grossenbacher Systeme AG\r
+                               Spinnereistrasse 10\r
+                               St. Gallen    9008\r
+                               CH\r
+\r
+70-B3-D5   (hex)               G.S.D GROUP INC.\r
+B01000-B01FFF     (base 16)            G.S.D GROUP INC.\r
+                               2010 RUE MICHELIN, SUITE 100\r
+                               LAVAL  Quebec  H7L 5C2\r
+                               CA\r
+\r
+70-B3-D5   (hex)               DIC Corporation\r
+5C3000-5C3FFF     (base 16)            DIC Corporation\r
+                               DIC Building,7-20,Nihonbashi 3-chome\r
+                               Chuo-ku,Tokyo    103-8233\r
+                               JP\r
+\r
+70-B3-D5   (hex)               Medicomp, Inc\r
+F7C000-F7CFFF     (base 16)            Medicomp, Inc\r
+                               600 Atlantis Rd\r
+                               Melbourne  FL  32904\r
+                               US\r
+\r
+70-B3-D5   (hex)               YUYAMA MFG Co.,Ltd\r
+CAD000-CADFFF     (base 16)            YUYAMA MFG Co.,Ltd\r
+                               3-3-1\r
+                               TOYONAKASHI  OSAKA  561-0841\r
+                               JP\r
+\r
+70-B3-D5   (hex)               Shenzhen Rongda Computer Co.,Ltd\r
+289000-289FFF     (base 16)            Shenzhen Rongda Computer Co.,Ltd\r
+                               905, Block B, DuoCaiKeChuan Park, No.5 Guanle Road\r
+                               Longhua District  Shenzhen, Guangdong    518110\r
+                               CN\r
+\r
+70-B3-D5   (hex)               Sono-Tek Corporation\r
+5C2000-5C2FFF     (base 16)            Sono-Tek Corporation\r
+                               2012 Rte. 9W Bldg 3\r
+                               Milton  NY  12547\r
+                               US\r
+\r
+70-B3-D5   (hex)               Breas Medical AB\r
+CF9000-CF9FFF     (base 16)            Breas Medical AB\r
+                               Företagsvägen 1\r
+                               Mölnlycke    SE-435 33\r
+                               SE\r
+\r
+70-B3-D5   (hex)               Davitor AB\r
+E60000-E60FFF     (base 16)            Davitor AB\r
+                               Skordarevagen 5\r
+                               Kalmar    39353\r
+                               SE\r
+\r
+70-B3-D5   (hex)               Coloet S.r.l.\r
+713000-713FFF     (base 16)            Coloet S.r.l.\r
+                               Via Mascheroni, 20\r
+                               MILANO  Italy  20145\r
+                               IT\r
+\r
+70-B3-D5   (hex)               meoENERGY\r
+7FA000-7FAFFF     (base 16)            meoENERGY\r
+                               Glacisstraße 9/1\r
+                               Graz    8010\r
+                               AT\r
+\r
+70-B3-D5   (hex)               European Synchrotron Radiation Facility\r
+160000-160FFF     (base 16)            European Synchrotron Radiation Facility\r
+                               71, avenue des Martyrs\r
+                               Grenoble  Isère  38000\r
+                               FR\r
+\r
+70-B3-D5   (hex)               Radian Research, Inc.\r
+9BC000-9BCFFF     (base 16)            Radian Research, Inc.\r
+                               3852 Fortune Drive\r
+                               Lafayette  IN  47905\r
+                               US\r
+\r
+70-B3-D5   (hex)               VERTEL DIGITAL PRIVATE LIMITED\r
+912000-912FFF     (base 16)            VERTEL DIGITAL PRIVATE LIMITED\r
+                               C-98, SECTOR-10 \r
+                               NOIDA  Uttar Pradesh  201301\r
+                               IN\r
+\r
+70-B3-D5   (hex)               ITALIANA PONTI RADIO SRL\r
+452000-452FFF     (base 16)            ITALIANA PONTI RADIO SRL\r
+                               VIA CA' BASSA 67\r
+                               VARESE  VARESE  21100\r
+                               IT\r
+\r
+70-B3-D5   (hex)               Stuyts Engineering Haarlem BV\r
+D1D000-D1DFFF     (base 16)            Stuyts Engineering Haarlem BV\r
+                               Hogeweg 40\r
+                               Zandvoort  Noord-Holland  2042GH\r
+                               NL\r
+\r
+70-B3-D5   (hex)               sonatest\r
+8FD000-8FDFFF     (base 16)            sonatest\r
+                               1175 Rue Lavigerie, Bur.90\r
+                               Quebec  Quebec  G1V 4P1\r
+                               CA\r
+\r
+70-B3-D5   (hex)               IDZ Ltd\r
+7F6000-7F6FFF     (base 16)            IDZ Ltd\r
+                               160 CITY ROAD\r
+                               LONDON  Select One...  EC1V 2NX\r
+                               GB\r
+\r
 70-B3-D5   (hex)               DISMUNTEL SAL\r
 92C000-92CFFF     (base 16)            DISMUNTEL SAL\r
                                Pol ind cotes\r
@@ -21080,9 +21632,6 @@ C37000-C37FFF     (base 16)             Keycom Corp.
                                Taipei  Taiwan  11070\r
                                TW\r
 \r
-70-B3-D5   (hex)               Private\r
-278000-278FFF     (base 16)            Private\r
-\r
 70-B3-D5   (hex)               Arrowvale Electronics\r
 B07000-B07FFF     (base 16)            Arrowvale Electronics\r
                                Shawbank Road\r
@@ -21491,12 +22040,6 @@ BF3000-BF3FFF     (base 16)            CG-WIRELESS
                                East Pittsburgh  PA  15112-1242\r
                                US\r
 \r
-70-B3-D5   (hex)               PoolDigital GmbH & Co. KG\r
-063000-063FFF     (base 16)            PoolDigital GmbH & Co. KG\r
-                               Kaffeegasse, 7\r
-                               Halsenbach    56283\r
-                               DE\r
-\r
 70-B3-D5   (hex)               HORIBA ABX SAS\r
 AB8000-AB8FFF     (base 16)            HORIBA ABX SAS\r
                                rue du caducee\r
@@ -24511,3 +25054,141 @@ B27000-B27FFF     (base 16)           Naval Group
                                40-42 Rue Du Docteur Finlay\r
                                PARIS CEDEX 15    75732\r
                                FR\r
+\r
+70-B3-D5   (hex)               Shanghai Armour Technology Co., Ltd.\r
+8E5000-8E5FFF     (base 16)            Shanghai Armour Technology Co., Ltd.\r
+                               Room 411, building 10, 471 Guiping Road, Xuhui District\r
+                                Shanghai   Shanghai  200233\r
+                               CN\r
+\r
+70-B3-D5   (hex)               Hangzhou Weimu Technology Co.,Ltd.\r
+373000-373FFF     (base 16)            Hangzhou Weimu Technology Co.,Ltd.\r
+                               3 / f, building 1, yongle village, cangqian street, yuhang district\r
+                               Hangzhou  Zhejiang  310000\r
+                               CN\r
+\r
+70-B3-D5   (hex)               Coda Octopus Products Limited\r
+4D9000-4D9FFF     (base 16)            Coda Octopus Products Limited\r
+                               38 S. Gyle Crescent, South Gyle Business Park\r
+                               Edinburgh  Scotland  EH12 9EB\r
+                               GB\r
+\r
+70-B3-D5   (hex)               Xirgo Technologies LLC\r
+CA0000-CA0FFF     (base 16)            Xirgo Technologies LLC\r
+                               188 Camino Ruiz\r
+                               Camarillo  CA  93012\r
+                               US\r
+\r
+70-B3-D5   (hex)               Xirgo Technologies LLC\r
+CEB000-CEBFFF     (base 16)            Xirgo Technologies LLC\r
+                               188 Camino Ruiz\r
+                               Camarillo  CA  93012\r
+                               US\r
+\r
+70-B3-D5   (hex)               GreenFlux\r
+A02000-A02FFF     (base 16)            GreenFlux\r
+                               Mauritskade 63\r
+                               Amsterdam    1092 AD\r
+                               NL\r
+\r
+70-B3-D5   (hex)               Iylus Inc.\r
+02C000-02CFFF     (base 16)            Iylus Inc.\r
+                               3100 Clarendon Blvd., Suite 200\r
+                               Arlington  VA  22201\r
+                               US\r
+\r
+70-B3-D5   (hex)               Walter Müller AG\r
+0E4000-0E4FFF     (base 16)            Walter Müller AG\r
+                               Russikerstrasse 37\r
+                               Fehraltorf  Zürich  8320\r
+                               CH\r
+\r
+70-B3-D5   (hex)               COONTROL Tecnologia em Combustão LTDA EPP\r
+8E9000-8E9FFF     (base 16)            COONTROL Tecnologia em Combustão LTDA EPP\r
+                               RUA ABRAHAN LINCOLS, 464, Jardim América\r
+                               RIO DO SUL  SANTA CATARINA  89160202\r
+                               BR\r
+\r
+70-B3-D5   (hex)               Private\r
+278000-278FFF     (base 16)            Private\r
+                               600 Atlantis Rd\r
+                               Melbourne  FL  32904\r
+                               US\r
+\r
+70-B3-D5   (hex)               Sensoronic Co.,Ltd\r
+D52000-D52FFF     (base 16)            Sensoronic Co.,Ltd\r
+                               1311ho, sambo techno tower, Jomaru-ro 385beongil,\r
+                               Bucheon-si  Gyeonggi-do  14556\r
+                               KR\r
+\r
+70-B3-D5   (hex)               Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd\r
+E42000-E42FFF     (base 16)            Neusoft Reach Automotive Technology (Shenyang) Co.,Ltd\r
+                               No.2 Xinxiu Street, Hunnan District, Shenyang\r
+                               Shenyang  Liaoning  110000\r
+                               CN\r
+\r
+70-B3-D5   (hex)               YUYAMA MFG Co.,Ltd\r
+196000-196FFF     (base 16)            YUYAMA MFG Co.,Ltd\r
+                               1-4-30\r
+                               MEISHINGUCHI,TOYONAKA  OSAKA  561-0841\r
+                               JP\r
+\r
+70-B3-D5   (hex)               Guan Show Technologe Co., Ltd.\r
+829000-829FFF     (base 16)            Guan Show Technologe Co., Ltd.\r
+                               No.127, Jianguo 1st Rd., Lingya Dist.\r
+                                Kaohsiung City     802\r
+                               TW\r
+\r
+70-B3-D5   (hex)               Thermokon Sensortechnik GmbH\r
+581000-581FFF     (base 16)            Thermokon Sensortechnik GmbH\r
+                               Platanenweg 1\r
+                               Mittenaar  Hessen  35756\r
+                               DE\r
+\r
+70-B3-D5   (hex)               PoolDigital GmbH & Co. KG\r
+063000-063FFF     (base 16)            PoolDigital GmbH & Co. KG\r
+                               Gablinger Weg 102\r
+                               Augsburg    86156\r
+                               DE\r
+\r
+70-B3-D5   (hex)               MB connect line GmbH Fernwartungssysteme\r
+71A000-71AFFF     (base 16)            MB connect line GmbH Fernwartungssysteme\r
+                               Winnettener Straße 6\r
+                               Dinkelsbuehl  Bavaria  91550\r
+                               DE\r
+\r
+70-B3-D5   (hex)               Loma Systems s.r.o.\r
+BC8000-BC8FFF     (base 16)            Loma Systems s.r.o.\r
+                               Southwood\r
+                               Farnborough  Hampshire  GU14 0NY\r
+                               GB\r
+\r
+70-B3-D5   (hex)               MECT SRL\r
+2C5000-2C5FFF     (base 16)            MECT SRL\r
+                               VIA E. FERMI 57/59\r
+                               ALPIGNANO  string:TO  10091\r
+                               IT\r
+\r
+70-B3-D5   (hex)               CTROGERS LLC\r
+474000-474FFF     (base 16)            CTROGERS LLC\r
+                               815 1st Ave #174\r
+                               Seattle  WA  98104\r
+                               US\r
+\r
+70-B3-D5   (hex)               EIZO RUGGED SOLUTIONS\r
+5B9000-5B9FFF     (base 16)            EIZO RUGGED SOLUTIONS\r
+                               442 Northlake Blvd Suite 1008\r
+                               Altamonte Springs  FL  32701\r
+                               US\r
+\r
+70-B3-D5   (hex)               ISG Nordic AB\r
+DEF000-DEFFFF     (base 16)            ISG Nordic AB\r
+                               Energigatan 9\r
+                               KUNGSBACKA  Select State  SE-43437\r
+                               SE\r
+\r
+70-B3-D5   (hex)               PARAGON ID\r
+036000-036FFF     (base 16)            PARAGON ID\r
+                               Les Aubépins\r
+                               ARGENT SUR SAULDRE  CHER  18410\r
+                               FR\r
index 05c6b5d2669a8c242743865f68a71aa02207e2cd..2e223ef23734a6c368ebc1bf4068b4541db0eaf9 100644 (file)
@@ -1,8 +1,8 @@
 #
 #      List of PCI ID's
 #
-#      Version: 2020.11.14
-#      Date:    2020-11-14 03:15:02
+#      Version: 2021.02.12
+#      Date:    2021-02-12 03:15:01
 #
 #      Maintained by Albert Pool, Martin Mares, and other volunteers from
 #      the PCI ID Project at https://pci-ids.ucw.cz/.
                1d49 0200  ThinkSystem 430-8i SAS/SATA 12Gb HBA
                1d49 0202  ThinkSystem 430-8e SAS/SATA 12Gb HBA
                1d49 0204  ThinkSystem 430-8i SAS/SATA 12Gb Dense HBA
-# PCIe switch SES management endpoint
-       00b2  PEX880xx PCIe Gen 4 Switch SES management endpoint
+       00b2  PCIe Switch management endpoint
+               1d49 0003  ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter
        00be  SAS3504 Fusion-MPT Tri-Mode RAID On Chip (ROC)
        00bf  SAS3404 Fusion-MPT Tri-Mode I/O Controller Chip (IOC)
        00c0  SAS3324 PCI-Express Fusion-MPT SAS-3
                8086 0523  MegaRAID RAID Controller SRCS16
        3050  SAS2008 PCI-Express Fusion-MPT SAS-2
        6001  DX1 Multiformat Broadcast HD/SD Encoder/Decoder
+       c012  PEX880xx PCIe Gen 4 Switch
+               1d49 0003  ThinkSystem 1611-8P PCIe Gen4 NVMe Switch Adapter
 1001  Kolter Electronic
        0010  PCI 1616 Measurement card with 32 digital I/O lines
        0011  OPTO-PCI Opto-Isolated digital I/O board
        1478  Navi 10 XL Upstream Port of PCI Express Switch
        1479  Navi 10 XL Downstream Port of PCI Express Switch
        154c  Kryptos [Radeon RX 350]
+               1462 7c28  MS-7C28 Motherboard
        154e  Garfield
        1551  Arlene
        1552  Pooky
        15d8  Picasso
                103c 8615  Pavilion Laptop 15-cw1xxx
                17aa 5124  ThinkPad E595
+               ea50 cc10  RXi2-BP
        15dd  Raven Ridge [Radeon Vega Series / Radeon Vega Mobile Series]
                103c 83c6  Radeon Vega 8 Mobile
+               1043 876b  PRIME Motherboard
                1458 d000  Radeon RX Vega 11
+               ea50 cc10  RXi2-BP
        15de  Raven/Raven2/Fenghuang HDMI/DP Audio Controller
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME B450M-A Motherboard
                17aa 5124  ThinkPad E595
+               ea50 cc10  RXi2-BP
        15df  Raven/Raven2/Fenghuang/Renoir Cryptographic Coprocessor
                103c 8615  Pavilion Laptop 15-cw1xxx
+               ea50 ce19  mCOM10-L1900
        15ff  Fenghuang [Zhongshan Subor Z+]
        1607  Arden
        1636  Renoir
+       1638  Cezanne
+       163f  VanGogh
+       164c  Lucienne
        1714  BeaverCreek HDMI Audio [Radeon HD 6500D and 6400G-6600G series]
                103c 168b  ProBook 4535s
        3150  RV380/M24 [Mobility Radeon X600]
                1179 ff50  Satellite P305D-S8995E
                1458 a022  GA-MA770-DS3rev2.0 Motherboard
                1458 a102  GA-880GMA-USB3
+               1462 7596  760GM-E51(MS-7596) Motherboard
                17f2 5000  KI690-AM2 Motherboard
        4384  SBx00 PCI to PCI Bridge
        4385  SBx00 SMBus Controller
                1179 ff50  Satellite P305D-S8995E
                1458 4385  GA-MA770-DS3rev2.0 Motherboard
                1462 7368  K9AG Neo2
+               1462 7596  760GM-E51(MS-7596) Motherboard
                15d9 a811  H8DGU
                174b 1001  PURE Fusion Mini
                17f2 5000  KI690-AM2 Motherboard
                1043 8389  M4A785TD Motherboard
                105b 0e13  N15235/A74MX mainboard / AMD SB700
                1458 b002  GA-MA770-DS3rev2.0 Motherboard
+               1462 7596  760GM-E51(MS-7596) Motherboard
                1849 4390  Motherboard (one of many)
        4391  SB7x0/SB8x0/SB9x0 SATA Controller [AHCI mode]
                103c 1609  ProLiant MicroServer N36L
                1043 8443  M5A88-V EVO
                105b 0e13  N15235/A74MX mainboard / AMD SB700
                1458 5004  GA-880GMA-USB3
+               1462 7596  760GM-E51(MS-7596) Motherboard
                15d9 a811  H8DGU
                174b 1001  PURE Fusion Mini
        4397  SB7x0/SB8x0/SB9x0 USB OHCI0 Controller
                1043 8443  M5A88-V EVO
                105b 0e13  N15235/A74MX mainboard / AMD SB700
                1458 5004  GA-880GMA-USB3
+               1462 7596  760GM-E51(MS-7596) Motherboard
                15d9 a811  H8DGU
                174b 1001  PURE Fusion Mini
        4398  SB7x0 USB OHCI1 Controller
                1019 2120  A785GM-M
                1043 82ef  M3A78-EH Motherboard
                105b 0e13  N15235/A74MX mainboard / AMD SB700
+               1462 7596  760GM-E51(MS-7596) Motherboard
                15d9 a811  H8DGU
        4399  SB7x0/SB8x0/SB9x0 USB OHCI2 Controller
                1019 2120  A785GM-M
                1043 8443  M5A88-V EVO
                105b 0e13  N15235/A74MX mainboard / AMD SB700
                1458 5004  GA-880GMA-USB3
+               1462 7596  760GM-E51(MS-7596) Motherboard
                174b 1001  PURE Fusion Mini
        439c  SB7x0/SB8x0/SB9x0 IDE Controller
                1002 4392  MSI MS-7713 motherboard
                103c 1609  ProLiant MicroServer N36L
                1043 82ef  M3A78-EH Motherboard
                105b 0e13  N15235/A74MX mainboard / AMD SB700
+               1462 7596  760GM-E51(MS-7596) Motherboard
        439d  SB7x0/SB8x0/SB9x0 LPC host controller
                1019 2120  A785GM-M
                103c 1609  ProLiant MicroServer N36L
                1043 82ef  M3A78-EH Motherboard
                1043 8443  M5A88-V EVO
                105b 0e13  N15235/A74MX mainboard / AMD SB700
+               1462 7596  760GM-E51(MS-7596) Motherboard
                174b 1001  PURE Fusion Mini
        43a0  SB700/SB800/SB900 PCI to PCI bridge (PCIE port 0)
        43a1  SB700/SB800/SB900 PCI to PCI bridge (PCIE port 1)
        5964  RV280 [Radeon 9200 SE]
                1002 5964  Radeon 9200 SE, 64-bit 128MB DDR, 200/166MHz
                1043 c006  Radeon 9200 SE / TD / 128M
-               1458 4018  Radeon 9200 SE
+               1458 4018  R92S128T (Radeon 9200 SE 128MB)
                1458 4032  Radeon 9200 SE 128MB
                147b 6191  R9200SE-DT
                148c 2073  CN-AG92E
                1002 5c63  Apple iBook G4 2004
                144d c00c  P30 notebook
        5d44  RV280 [Radeon 9200 SE] (Secondary)
-               1458 4019  Radeon 9200 SE (Secondary)
+               1458 4019  R92S128T (Radeon 9200 SE 128MB Secondary)
                1458 4032  Radeon 9200 SE 128MB
                147b 6190  R9200SE-DT (Secondary)
                174b 7c12  Radeon 9200 SE (Secondary)
        6607  Mars LE [Radeon HD 8530M / R5 M240]
        6608  Oland GL [FirePro W2100]
                13cc 3d28  MXRT-2600
+       6609  Oland GL [FirePro W2100 / Barco MXRT 2600]
        6610  Oland XT [Radeon HD 8670 / R7 250/350]
                1019 0030  Radeon HD 8670
                1028 2120  Radeon R7 250
        6667  Jet ULT [Radeon R5 M230]
        666f  Sun LE [Radeon HD 8550M / R5 M230]
        66a0  Vega 20 [Radeon Instinct]
-       66a1  Vega 20
+       66a1  Vega 20 WKS GL-XE [Radeon Pro VII]
        66a2  Vega 20
-       66a3  Vega 20
+       66a3  Vega 20 [Radeon Pro Vega II/Radeon Pro Vega II Duo]
        66a7  Vega 20 [Radeon Pro Vega 20]
        66af  Vega 20 [Radeon VII]
        6704  Cayman PRO GL [FirePro V7900]
                1043 04dd  STRIX R9 390
                148c 2358  Radeon R9 390
                174b e324  Sapphire Nitro R9 390
+       67b8  Hawaii XT [Radeon R9 290X Engineering Sample]
        67b9  Vesuvius [Radeon R9 295X2]
        67be  Hawaii LE
        67c0  Ellesmere [Radeon Pro WX 7100 Mobile]
                1462 3418  Radeon RX 580 Armor 4G OC
                1462 341b  Radeon RX 570 Armor 8G OC
                1462 341e  Radeon RX 570 Armor 4G OC
+               1462 809e  Radeon RX 480 4GB
                1462 8a92  Radeon RX 580
                148c 2372  Radeon RX 480 [Red Dragon]
                148c 2373  Radeon RX 470
                148c 2379  Radeon RX 570 4G [Red Dragon]
                1682 9470  Radeon RX 470
                1682 9480  Radeon RX 480
+               1682 9587  Radeon RX 590 FATBOY 8GB
                1682 9588  Radeon RX 580 XTR
                1682 c570  Radeon RX 570
                1682 c580  Radeon RX 580
        6864  Vega 10 [Radeon Pro V340]
        6867  Vega 10 XL [Radeon Pro Vega 56]
        6868  Vega 10 [Radeon PRO WX 8100/8200]
+       6869  Vega 10 XGA [Radeon Pro Vega 48]
+       686a  Vega 10 LEA
+       686b  Vega 10 XTXA [Radeon Pro Vega 64X]
        686c  Vega 10 [Radeon Instinct MI25 MxGPU]
+       686d  Vega 10 GLXTA
+       686e  Vega 10 GLXLA
        687f  Vega 10 XL/XT [Radeon RX Vega 56/64]
                1002 0b36  RX Vega64
                1002 6b76  RX Vega64
                1458 230c  Radeon RX VEGA 56 GAMING OC 8G
+               1da2 e376  Radeon RX VEGA 56 Pulse 8GB OC HBM2
        6880  Lexington [Radeon HD 6550M]
                103c 163c  Pavilion dv6 Radeon HD 6550M
        6888  Cypress XT [FirePro V8800]
                17af 3000  Radeon HD 6510
                17af 3010  Radeon HD 5630
        68da  Redwood LE [Radeon HD 5550/5570/5630/6390/6490/7570]
+               1462 8071  VR5550-MD1G (Radeon HD 5550)
                148c 3000  Radeon HD 6390
                148c 3001  Radeon HD 6490
                1545 7570  Radeon HD 7570
        7312  Navi 10 [Radeon Pro W5700]
        731f  Navi 10 [Radeon RX 5600 OEM/5600 XT / 5700/5700 XT]
                1458 2313  Radeon RX 5700 XT Gaming OC
+               1682 5701  RX 5700 XT RAW II
                1da2 e411  Radeon RX 5600 XT
        7340  Navi 14 [Radeon RX 5500/5500M / Pro 5500M]
        7341  Navi 14 [Radeon Pro W5500]
        7347  Navi 14 [Radeon Pro W5500M]
        734f  Navi 14 [Radeon Pro W5300M]
        7360  Navi 12 [Radeon Pro 5600M]
+       7388  Arcturus GL-XL
+       738c  Arcturus GL-XL [AMD Instinct MI100]
+       738e  Arcturus GL-XL
        73bf  Navi 21 [Radeon RX 6800/6800 XT / 6900 XT]
+               1eae 6701  XFX Speedster MERC 319 AMD Radeon RX 6800 XT Black
        73c3  Navi 22
        73df  Navi 22
+       73e0  Navi 23
        73ff  Navi 23
        7833  RS350 Host Bridge
        7834  RS350 [Radeon 9100 PRO/XT IGP]
        95cd  RV620 GL [FirePro 2450]
        95cf  RV620 GL [FirePro 2260]
        960f  RS780 HDMI Audio [Radeon 3000/3100 / HD 3200/3300]
+               1462 7596  760GM-E51(MS-7596) Motherboard
        9610  RS780 [Radeon HD 3200]
                1458 d000  GA-MA78GM-S2H Motherboard
        9611  RS780C [Radeon 3100]
        9614  RS780D [Radeon HD 3300]
        9615  RS780E [Radeon HD 3200]
        9616  RS780L [Radeon 3000]
+# ID is probably a copy-paste error by a MSI developer from another mainboard, since all other ID numbers on this mainboard including the sub-device of this device has used subsystem ID 1462:7596
+               1462 7501  760GM-E51(MS-7596) Motherboard
        9640  Sumo [Radeon HD 6550D]
        9641  Sumo [Radeon HD 6620G]
        9642  SuperSumo [Radeon HD 6370D]
        9809  Wrestler [Radeon HD 7310]
        980a  Wrestler [Radeon HD 7290]
        9830  Kabini [Radeon HD 8400 / R3 Series]
+               1043 8623  AM1I-A Motherboard
        9831  Kabini [Radeon HD 8400E]
        9832  Kabini [Radeon HD 8330]
                1849 9832  QC5000-ITX/PH
        9839  Kabini [Radeon HD 8180]
        983d  Temash [Radeon HD 8250/8280G]
        9840  Kabini HDMI/DP Audio
+               1043 8623  AM1I-A Motherboard
                1849 9840  QC5000-ITX/PH
        9850  Mullins [Radeon R3 Graphics]
        9851  Mullins [Radeon R4/R5 Graphics]
        1450  Family 17h (Models 00h-0fh) Root Complex
        1451  Family 17h (Models 00h-0fh) I/O Memory Management Unit
        1452  Family 17h (Models 00h-1fh) PCIe Dummy Host Bridge
+               ea50 ce19  mCOM10-L1900
        1453  Family 17h (Models 00h-0fh) PCIe GPP Bridge
        1454  Family 17h (Models 00h-0fh) Internal PCIe GPP Bridge 0 to Bus B
        1455  Zeppelin/Renoir PCIe Dummy Function
        149b  Starship Reserved SSP
        149c  Matisse USB 3.0 Host Controller
                1462 7c37  X570-A PRO motherboard
+       149d  Vangogh CVIP
        1510  Family 14h Processor Root Complex
                174b 1001  PURE Fusion Mini
        1512  Family 14h Processor Root Port
        1534  Family 16h Processor Function 4
        1535  Family 16h Processor Function 5
        1536  Family 16h Processor Root Complex
+               1043 8623  AM1I-A Motherboard
                1849 1536  QC5000-ITX/PH
        1537  Kabini/Mullins PSP-Platform Security Processor
        1538  Family 16h Processor Function 0
        15be  Stoney Audio Processor
        15d0  Raven/Raven2 Root Complex
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME B450M-A Motherboard
        15d1  Raven/Raven2 IOMMU
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME B450M-A Motherboard
+               ea50 ce19  mCOM10-L1900
        15d2  Raven/Raven2 PCIe Dummy Host Bridge
        15d3  Raven/Raven2 PCIe GPP Bridge [6:0]
        15d4  FireFlight USB 3.1
        15d5  FireFlight USB 3.1
        15da  Raven/Raven2 PCIe Dummy Host Bridge
        15db  Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus A
+               ea50 ce19  mCOM10-L1900
        15dc  Raven/Raven2 Internal PCIe GPP Bridge 0 to Bus B
+               ea50 ce19  mCOM10-L1900
        15de  Raven/Raven2/FireFlight HD Audio Controller
        15df  Family 17h (Models 10h-1fh) Platform Security Processor
+               1043 876b  PRIME Motherboard
                17aa 5124  ThinkPad E595
+               ea50 ce19  mCOM10-L1900
        15e0  Raven USB 3.1
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME Motherboard
                17aa 5124  ThinkPad E595
+               ea50 ce19  mCOM10-L1900
        15e1  Raven USB 3.1
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME Motherboard
                17aa 5124  ThinkPad E595
+               ea50 ce19  mCOM10-L1900
        15e2  Raven/Raven2/FireFlight/Renoir Audio Processor
                17aa 5124  ThinkPad E595
        15e3  Family 17h (Models 10h-1fh) 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
        15e5  Raven2 USB 3.1
        1642  Renoir WLAN
        1643  Renoir BT
        1644  Renoir I2S
+       1648  VanGogh Root Complex
+       1649  VanGogh PSP/CCP
        1700  Family 12h/14h Processor Function 0
        1701  Family 12h/14h Processor Function 1
        1702  Family 12h/14h Processor Function 2
        7801  FCH SATA Controller [AHCI mode]
                103c 168b  ProBook 4535s Notebook
                103c 194e  ProBook 455 G1 Notebook
+               1043 8623  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 7801  QC5000-ITX/PH
        7802  FCH SATA Controller [RAID mode]
        7807  FCH USB OHCI Controller
                103c 194e  ProBook 455 G1 Notebook
                103c 1985  Pavilion 17-e163sg Notebook PC
+               1043 8623  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 7807  QC5000-ITX/PH
        7808  FCH USB EHCI Controller
                103c 194e  ProBook 455 G1 Notebook
                103c 1985  Pavilion 17-e163sg Notebook PC
+               1043 8623  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 7808  QC5000-ITX/PH
        7809  FCH USB OHCI Controller
        780b  FCH SMBus Controller
                103c 194e  ProBook 455 G1 Notebook
                103c 1985  Pavilion 17-e163sg Notebook PC
+               1043 8623  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 780b  QC5000-ITX/PH
        780c  FCH IDE Controller
                103c 194e  ProBook 455 G1 Notebook
                103c 1985  Pavilion 17-e163sg Notebook PC
                1043 8444  F2A85-M Series
+               1043 8576  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 8892  QC5000-ITX/PH
        780e  FCH LPC Bridge
                103c 194e  ProBook 455 G1 Notebook
                103c 1985  Pavilion 17-e163sg Notebook PC
+               1043 8623  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 780e  QC5000-ITX/PH
        780f  FCH PCI Bridge
        7814  FCH USB XHCI Controller
                103c 194e  ProBook 455 G1 Notebook
                103c 1985  Pavilion 17-e163sg Notebook PC
+               1043 8623  AM1I-A Motherboard
                17aa 3988  Z50-75
                1849 7814  QC5000-ITX/PH
        7900  FCH SATA Controller [IDE mode]
        7901  FCH SATA Controller [AHCI mode]
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME Motherboard
                1462 7c37  X570-A PRO motherboard
+               ea50 ce19  mCOM10-L1900
        7902  FCH SATA Controller [RAID mode]
        7903  FCH SATA Controller [RAID mode]
        7904  FCH SATA Controller [AHCI mode]
        7908  FCH USB EHCI Controller
        790b  FCH SMBus Controller
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME Motherboard
                1462 7c37  X570-A PRO motherboard
                17aa 5124  ThinkPad E595
+               ea50 ce19  mCOM10-L1900
        790e  FCH LPC Bridge
                103c 8615  Pavilion Laptop 15-cw1xxx
+               1043 876b  PRIME B450M-A Motherboard
                1462 7c37  X570-A PRO motherboard
                17aa 5124  ThinkPad E595
+               ea50 ce19  mCOM10-L1900
        790f  FCH PCI Bridge
        7914  FCH USB XHCI Controller
        9600  RS780 Host Bridge
                1931 000a  GlobeTrotter Fusion Quad Lite (PPP data)
                1931 000b  GlobeTrotter Fusion Quad Lite (GSM data)
                807d 0035  PCI-USB2 (OHCI subsystem)
+               8086 4d44  D850EMV2 motherboard
        003b  PCI to C-bus Bridge
        003e  NAPCCARD Cardbus Controller
        0046  PowerVR PCX2 [midas]
                14c2 0205  PTI-205N USB 2.0 Host Controller
                1799 0002  Root Hub
                807d 1043  PCI-USB2 (EHCI subsystem)
+               8086 4d44  D850EMV2 motherboard
        00e7  uPD72873 [Firewarden] IEEE1394a OHCI 1.1 Link/2-port PHY Controller
        00f2  uPD72874 [Firewarden] IEEE1394a OHCI 1.1 Link/3-port PHY Controller
        00f3  uPD6113x Multimedia Decoder/Processor [EMMA2]
                103c 17e8  SN1000Q 16Gb Dual Port Fibre Channel Adapter
                103c 1939  QMH2672 16Gb Dual Port Fibre Channel Adapter
                103c 8002  3830C 16G Fibre Channel Host Bus Adapter
+               1077 0241  QLE2670 16Gb Single Port Fibre Channel Adapter
        2071  ISP2714-based 16/32Gb Fibre Channel to PCIe Adapter
                1077 0283  QLE2764 Quad Port 32Gb Fibre Channel to PCIe Adapter
                1077 029e  QLE2694 Quad Port 16Gb Fibre Channel to PCIe Adapter
        2081  ISP2814-based 64/32G Fibre Channel to PCIe Controller
                1077 02e1  QLE2874 Quad Port 64GFC PCIe Gen4 x16 Adapter
                1077 02e3  QLE2774 Quad Port 32GFC PCIe Gen4 x16 Adapter
+       2089  ISP2854-based 64/32G Fibre Channel to PCIe Controller with StorCryption
+               1077 02e8  QLE2884 Quad Port 64GFC PCIe Gen4 x16 Adapter with StorCryption
+               1077 02ea  QLE2784 Quad Port 32GFC PCIe Gen4 x16 Adapter with StorCryption
        2100  QLA2100 64-bit Fibre Channel Adapter
                1077 0001  QLA2100 64-bit Fibre Channel Adapter
        2200  QLA2200 64-bit Fibre Channel Adapter
                1590 0203  StoreFabric SN1600Q 32Gb Single Port Fibre Channel Host Bus Adapter
                1590 0204  StoreFabric SN1600Q 32Gb Dual Port Fibre Channel Host Bus Adapter
                1590 022d  5830C 32Gb Dual Port Fibre Channel Adapter
+               193d 100d  NIC-FC680i-Mb-2x16G
        2281  ISP2812-based 64/32G Fibre Channel to PCIe Controller
                1077 02e2  QLE2872 Dual Port 64GFC PCIe Gen4 x8 Adapter
                1077 02e4  QLE2772 Dual Port 32GFC PCIe Gen4 x8 Adapter
                1077 02f3  QLogic 2x32Gb QLE2772 FC HBA
                1590 02d3  SN1610Q - 1P Enhanced 32GFC Single Port Fibre Channel Host Bus Adapter
                1590 02d4  SN1610Q â€“ 2P Enhanced 32GFC Dual Port Fibre Channel Host Bus Adapter
+       2289  ISP2852-based 64/32G Fibre Channel to PCIe Controller with StorCryption
+               1077 02e9  QLE2882 Dual Port 64GFC PCIe Gen4 x8 Adapter with StorCryption
+               1077 02eb  QLE2782 Dual Port 32GFC PCIe Gen4 x8 Adapter with StorCryption
+               1077 02ef  QLE2880 Single Port 64GFC PCIe Gen4 x8 Adapter with StorCryption
+               1077 02f1  QLE2780 Single Port 32GFC PCIe Gen4 x8 Adapter with StorCryption
        2300  QLA2300 64-bit Fibre Channel Adapter
        2312  ISP2312-based 2Gb Fibre Channel to PCI-X HBA
                103c 0131  2Gb Fibre Channel - Single port [A7538A]
                1590 021f  10/25GbE 2P QL41262HMCU-HP Adapter
                1590 0220  10/25GbE 2P QL41122HLRJ-HP Adapter
                1590 02bd  10Gb 2P 524SFP+ NIC
+               193d 1030  NIC-ETH681i-Mb-2x25G
+               193d 1032  NIC-ETH682i-Mb-2x25G
        8080  FastLinQ QL41000 Series 10/25/40/50GbE Controller (FCoE)
                1077 0001  10GE 2P QL41162HxRJ-DE Adapter
                1077 0002  10GE 2P QL41112HxCU-DE Adapter
                10b5 2905  Alpermann+Velte PCI TS: Time Synchronisation Board
                10b5 3196  Goramo PLX200SYN sync serial card
                10b5 9050  PCI-I04 PCI Passive PC/CAN Interface
+               12fe 0001  CAN-PCI/331 CAN bus controller
                1369 8901  PCX11+ PCI
                1369 8f01  VX222
                1369 9401  PCX924
        0a21  GT216M [GeForce GT 330M]
        0a22  GT216 [GeForce 315]
        0a23  GT216 [GeForce 210]
+       0a24  GT216 [GeForce 405]
        0a26  GT216 [GeForce 405]
        0a27  GT216 [GeForce 405]
        0a28  GT216M [GeForce GT 230M]
        1aeb  TU116 High Definition Audio Controller
        1aec  TU116 USB 3.1 Host Controller
        1aed  TU116 USB Type-C UCSI Controller
+       1aef  GA102 High Definition Audio Controller
        1b00  GP102 [TITAN X]
        1b01  GP102 [GeForce GTX 1080 Ti 10GB]
        1b02  GP102 [TITAN Xp]
        1b07  GP102 [P102-100]
        1b30  GP102GL [Quadro P6000]
        1b38  GP102GL [Tesla P40]
+       1b39  GP102GL [Tesla P10]
        1b70  GP102GL
        1b78  GP102GL
        1b80  GP104 [GeForce GTX 1080]
        1c2d  GP106M
        1c30  GP106GL [Quadro P2000]
        1c31  GP106GL [Quadro P2200]
-       1c35  GP106
-       1c36  GP106
+       1c35  GP106M [Quadro P2000 Mobile]
+       1c36  GP106 [P106M]
        1c60  GP106BM [GeForce GTX 1060 Mobile 6GB]
                103c 8390  GeForce GTX 1060 Max-Q 6GB
        1c61  GP106BM [GeForce GTX 1050 Ti Mobile]
        1f98  TU117M [GeForce MX450]
        1f99  TU117M
        1f9c  TU117M [GeForce MX450]
+       1f9d  TU117M [GeForce GTX 1650 Mobile / Max-Q]
        1fae  TU117GL
        1fb8  TU117GLM [Quadro T2000 Mobile / Max-Q]
        1fb9  TU117GLM [Quadro T1000 Mobile]
+       1fbb  TU117GLM [Quadro T500 Mobile]
        1fbf  TU117GL
        1fd9  TU117BM [GeForce GTX 1650 Mobile Refresh]
        1ff9  TU117GLM [Quadro T1000 Mobile]
        20b0  GA100 [A100 SXM4 40GB]
        20b1  GA100 [A100 PCIe 40GB]
+       20b2  GA100 [A100 SXM4 80GB]
        20be  GA100 [GRID A100A]
        20bf  GA100 [GRID A100B]
        20f1  GA100 [A100 PCIe 40GB]
        2192  TU116M [GeForce GTX 1650 Ti Mobile]
        21ae  TU116GL
        21bf  TU116GL
+       21c2  TU116
        21c4  TU116 [GeForce GTX 1660 SUPER]
        21d1  TU116BM [GeForce GTX 1660 Ti Mobile]
        2204  GA102 [GeForce RTX 3090]
+       2205  GA102 [GeForce RTX 3080 Ti]
        2206  GA102 [GeForce RTX 3080]
+               10de 1467  GA102 [GeForce RTX 3080]
                10de 146d  GA102 [GeForce RTX 3080 20GB]
                1462 3892  RTX 3080 10GB GAMING X TRIO
        222b  GA102 [GeForce RTX 3090 Engineering Sample]
        222f  GA102 [GeForce RTX 3080 11GB / 12GB Engineering Sample]
        2230  GA102GL [RTX A6000]
+       2235  GA102GL [RTX A40]
+       2236  GA102GL
        223f  GA102GL
+       228b  GA104 High Definition Audio Controller
+       2321  GA103
        2482  GA104 [GeForce RTX 3070 Ti]
        2484  GA104 [GeForce RTX 3070]
                10de 146b  GA104 [GeForce RTX 3070]
                10de 14ae  GA104 [GeForce RTX 3070 16GB]
        2486  GA104 [GeForce RTX 3060 Ti]
-       249c  GA104M [GeForce RTX 3070 Mobile / Max-Q 8GB/16GB]
+       249c  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
        249d  GA104M [GeForce RTX 3070 Mobile / Max-Q]
+       249f  GA104M
        24ac  GA104 [GeForce RTX 30x0 Engineering Sample]
        24ad  GA104 [GeForce RTX 3060 Engineering Sample]
        24af  GA104 [GeForce RTX 3070 Engineering Sample]
+       24b6  GA104
+       24b8  GA104
        24bf  GA104 [GeForce RTX 3070 Engineering Sample]
-       24dc  GA104M [GeForce RTX 3070 Mobile 16GB]
+       24dc  GA104M [GeForce RTX 3080 Mobile / Max-Q 8GB/16GB]
        24dd  GA104M [GeForce RTX 3070 Mobile / Max-Q]
+       2501  GA106 [GeForce RTX 3060]
+       2503  GA106 [GeForce RTX 3060]
+       2505  GA106
+       2520  GA106M [GeForce RTX 3060 Mobile / Max-Q]
        252f  GA106 [GeForce RTX 3060 Engineering Sample]
+       2560  GA106M [GeForce RTX 3060 Mobile / Max-Q]
+       2583  GA107 [GeForce RTX 3050]
+       25a2  GA107
+       25a4  GA107
        25af  GA107 [GeForce RTX 3050 Engineering Sample]
 10df  Emulex Corporation
        0720  OneConnect NIC (Skyhawk)
                1590 0213  StoreFabric SN1200E 1-Port 16Gb Fibre Channel Adapter
                1590 0214  StoreFabric SN1200E 2-Port 16Gb Fibre Channel Adapter
                1590 022e  Synergy 5330C 2-Port 32Gb Fibre Channel Mezz Card
+               193d 1060  NIC-FC730i-Mb-2P
        f011  Saturn: LightPulse Fibre Channel Host Adapter
        f015  Saturn: LightPulse Fibre Channel Host Adapter
        f085  LP850 Fibre Channel Host Adapter
                10df f419  LPe35002-M2-L 2-Port 32Gb PCIe 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
        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
        8111  Twist3 Frame Grabber
 10ec  Realtek Semiconductor Co., Ltd.
        0139  RTL-8139/8139C/8139C+ Ethernet Controller
+       3000  Killer E3000 2.5GbE Controller
        5208  RTS5208 PCI Express Card Reader
        5209  RTS5209 PCI Express Card Reader
        5227  RTS5227 PCI Express Card Reader
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
                1028 06e4  XPS 15 9550
+               1028 06e6  Latitude 11 5175 2-in-1
                17aa 224f  ThinkPad X1 Carbon 5th Gen
        5260  RTS5260 PCI Express Card Reader
        5286  RTS5286 PCI Express Card Reader
                8e2e 7000  KF-230TX
                8e2e 7100  KF-230TX/2
                a0a0 0007  ALN-325C
+       8161  RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
+               10ec 8168  TP-Link TG-3468 v4.0 Gigabit PCI Express Network Adapter
        8167  RTL-8110SC/8169SC Gigabit Ethernet
                105b 0e10  RTL-8110SC-GR on a N15235/A74MX mainboard
                1458 e000  GA-MA69G-S3H Motherboard
                1043 83a3  M4A785/P7P55 Motherboard
                1043 8432  P8P67 and other motherboards
                1043 8505  P8 series motherboard
+               1043 8554  H81M-C Motherboard
+               1043 859e  AM1I-A Motherboard
+               1043 8677  PRIME B450M-A Motherboard
                105b 0d7c  D270S/D250S Motherboard
                10ec 8168  RTL8111/8168 PCI Express Gigabit Ethernet controller
                144d c652  RTL8168 on a NP300E5C series laptop
                1462 7522  X58 Pro-E
                1462 7c37  X570-A PRO motherboard
                1775 11cc  CC11/CL11
+               17aa 3098  ThinkCentre E73
                17aa 3814  Z50-75
                17aa 3823  Lenovo V130-15IGM Laptop - Type 81HL
                17aa 5124  ThinkPad E595
                7470 3468  TG-3468 Gigabit PCI Express Network Adapter
                8086 2055  NUC Kit DN2820FYKH
                8086 d615  Desktop Board D510MO/D525MW
+               ea50 ce19  mCOM10-L1900
        8169  RTL8169 PCI Gigabit Ethernet Controller
                1025 0079  Aspire 5024WLMi
                10bd 3202  EP-320G-TX1 32-bit PCI Gigabit Ethernet Adapter
                16ec 011f  USR997903
                1734 1091  D2030-A1
                a0a0 0449  AK86-L motherboard
+       816a  RTL8111xP UART #1
+               ea50 ce19  mCOM10-L1900
+       816b  RTL8111xP UART #2
+               ea50 ce19  mCOM10-L1900
+       816c  RTL8111xP IPMI interface
+               ea50 ce19  mCOM10-L1900
+       816d  RTL811x EHCI host controller
+               ea50 ce19  mCOM10-L1900
        8171  RTL8191SEvA Wireless LAN Controller
        8172  RTL8191SEvB Wireless LAN Controller
        8173  RTL8192SE Wireless LAN Controller
        5005  Alveo U250
        7038  FPGA Card XC7VX690T
                17aa 402f  FPGA XC7VX690T-3FFG1157E
+       8019  Memory controller
        8380  Ellips ProfiXpress Profibus Master
        8381  Ellips Santos Frame Grabber
        d154  Copley Controls CAN card (PCI-CAN-02)
 1172  Altera Corporation
        00a7  Stratix V
        0530  Stratix IV
+       646c  KT-500/KT-521 board
 1173  Adobe Systems, Inc
 1174  Bridgeport Machines
 1175  Mitron Computer Inc.
 1179  Toshiba Corporation
        0102  Extended IDE Controller
        0103  EX-IDE Type-B
+       010e  PXP04 NVMe SSD
        010f  NVMe Controller
        0110  NVMe SSD Controller Cx5
                1028 1ffb  Express Flash NVMe 960G (RI) U.2 (CD5)
                1d49 4039  Thinksystem U.2 CM5 NVMe SSD
                1d49 403a  Thinksystem AIC CM5 NVMe SSD
        0113  BG3 NVMe SSD Controller
+               1179 0001  Toshiba KBG30ZMS128G 128GB NVMe SSD
        0115  XG4 NVMe SSD Controller
+       011a  XG6 NVMe SSD Controller
        0404  DVD Decoder card
        0406  Tecra Video Capture device
        0407  DVD Decoder card (Version 2)
                a000 2000  Parallel Port
                a000 6000  SPI
                a000 7000  Local Bus
+               ea50 1c10  RXi2-BP
 125c  Aurora Technologies, Inc.
        0101  Saturn 4520P
        0640  Aries 16000P
        0820  SM820 Lynx3D
        0910  SM910
        2262  SM2262/SM2262EN SSD Controller
+       2263  SM2263EN/SM2263XT SSD Controller
 1270  Olympus Optical Co., Ltd.
 1271  GW Instruments
 1272  Telematics International
 1281  Yokogawa Electric Corporation
 1282  Davicom Semiconductor, Inc.
        6585  DM562P V90 Modem
-       9009  Ethernet 100/10 MBit
+       9009  DM9009 Ethernet Controller
        9100  21x4x DEC-Tulip compatible 10/100 Ethernet
-       9102  21x4x DEC-Tulip compatible 10/100 Ethernet
+       9102  DM9102 Fast Ethernet Controller
 # Subsystem ID is main ID reveresed.
                0291 8212  DM9102A (DM9102AE, SM9102AF) Ethernet 100/10 MBit
        9132  Ethernet 100/10 MBit
        8888  IT8888F/G PCI to ISA Bridge with SMB [Golden Gate]
        8889  IT8889F PCI to ISA Bridge
        8892  IT8892E PCIe to PCI Bridge
+               8086 200d  DH61CR motherboard
        8893  IT8893E PCIe to PCI Bridge
        e886  IT8330G
 1284  Sahara Networks, Inc.
        2304  PI7C9X2G304 EL/SL PCIe2 3-Port/4-Lane Packet Switch
        2404  PI7C9X2G404 EL/SL PCIe2 4-Port/4-Lane Packet Switch
        2608  PI7C9X2G608GP PCIe2 6-Port/8-Lane Packet Switch
+               ea50 cc10  RXi2-BP
        400a  PI7C9X442SL PCI Express Bridge Port
        400e  PI7C9X442SL USB OHCI Controller
        400f  PI7C9X442SL USB EHCI Controller
        8150  PCI to PCI Bridge
        8152  PI7C8152A/PI7C8152B/PI7C8152BI PCI-to-PCI Bridge
        8154  PI7C8154A/PI7C8154B/PI7C8154BI PCI-to-PCI Bridge
+       8619  PI7C9X2G1616PR PCIe2 16-Port/16-Lane Packet Switch
        e110  PI7C9X110 PCI Express to PCI bridge
                1775 11cc  CC11/CL11 CompactPCI Bridge
        e111  PI7C9X111SL PCIe-to-PCI Reversible Bridge
 12ea  Zuken
 12eb  Aureal Semiconductor
        0001  Vortex 1
+               0000 0300  Terasound A3D PCI
                104d 8036  AU8820 Vortex Digital Audio Processor
                1092 2000  Sonic Impact A3D
                1092 2100  Sonic Impact A3D
                1092 2110  Sonic Impact A3D
                1092 2200  Sonic Impact A3D
-               122d 1002  AU8820 Vortex Digital Audio Processor
+               122d 1002  SC 338-A3D
                12eb 0001  AU8820 Vortex Digital Audio Processor
                5053 3355  Montego
                50b2 1111  XLerate
 134f  Algo System Co Ltd
 1350  Systec Co. Ltd
 1351  Sonix Inc
-# nee Thales Idatys
-1353  Vierling Communication SAS
+# nee Vierling Communication SAS, nee Thales Idatys
+1353  dbeeSet Technology
        0002  Proserver
        0003  PCI-FUT
        0004  PCI-S0
        0005  PCI-FUT-S0
+       0006  OTDU-1U (FPGA Zynq-7000)
+       0007  OTDU-EX
 1354  Dwave System Inc
 1355  Kratos Analytical Ltd
 1356  The Logical Co
        a544  Exynos 8890 PCIe Root Complex
        a800  XP941 PCIe SSD
        a802  NVMe SSD Controller SM951/PM951
-       a804  NVMe SSD Controller SM961/PM961
+               144d a801  PM963 2.5" NVMe PCIe SSD
+       a804  NVMe SSD Controller SM961/PM961/SM963
+               144d a801  SM963 2.5" NVMe PCIe SSD
        a808  NVMe SSD Controller SM981/PM981/PM983
                1d49 403b  Thinksystem U.2 PM983 NVMe SSD
+       a80a  NVMe SSD Controller PM9A1/980PRO
        a820  NVMe SSD Controller 171X
                1028 1f95  Express Flash NVMe XS1715 SSD 400GB
                1028 1f96  Express Flash NVMe XS1715 SSD 800GB
                103c 339d  Ethernet 10Gb 2-port 530SFP+ Adapter
                193d 1003  530F-B
                193d 1006  530F-L
+               193d 100f  NIC-ETH522i-Mb-2x10G
        1690  NetXtreme BCM57760 Gigabit Ethernet PCIe
        1691  NetLink BCM57788 Gigabit Ethernet PCIe
                1028 04aa  XPS 8300
        16a0  NetLink BCM5785 Fast Ethernet
        16a1  BCM57840 NetXtreme II 10 Gigabit Ethernet
                1043 866e  PEB-10G/57840-2T 10GBase-T Network Adapter
+               193d 100b  NIC-ETH521i-Mb-4x10G
        16a2  BCM57840 NetXtreme II 10/20-Gigabit Ethernet
                103c 1916  FlexFabric 20Gb 2-port 630FLB Adapter
                103c 1917  FlexFabric 20Gb 2-port 630M Adapter
        1805  BCM57508 NetXtreme-E RDMA Partition
        1806  BCM5750X NetXtreme-E Ethernet Virtual Function
        1807  BCM5750X NetXtreme-E RDMA Virtual Function
+       2711  BCM2711 PCIe Bridge
        3352  BCM3352
        3360  BCM3360
        4210  BCM4210 iLine10 HomePNA 2.0
                15b3 0021  MCX4421A-ACQN ConnectX-4 Lx EN OCP,2x25G
                15b3 0025  ConnectX-4 Lx 25 GbE Dual Port SFP28 rNDC
                193d 100a  620F-B
+               193d 1031  NIC-ETH640i-Mb-2x25G
        1016  MT27710 Family [ConnectX-4 Lx Virtual Function]
        1017  MT27800 Family [ConnectX-5]
                15b3 0006  ConnectX®-5 EN network interface card, 100GbE single-port QSFP28, PCIe3.0 x16, tall bracket; MCX515A-CCAT
                15b3 0007  Mellanox ConnectX®-5 MCX516A-CCAT
                15b3 0020  ConnectX®-5 EN network interface card, 10/25GbE dual-port SFP28, PCIe3.0 x8, tall bracket ; MCX512A-ACAT
                15b3 0068  ConnectX®-5 EN network interface card for OCP2.0, Type 1, with host management, 25GbE dual-port SFP28, PCIe3.0 x8, no bracket Halogen free ; MCX542B-ACAN
+               193d 1051  NIC-IB1040i-Mb-2P
        1018  MT27800 Family [ConnectX-5 Virtual Function]
        1019  MT28800 Family [ConnectX-5 Ex]
                15b3 0008  ConnectX-5 Ex EN network interface card, 100GbE dual-port QSFP28, PCIe4.0 x16, tall bracket; MCX516A-CDAT
 15b7  Sandisk Corp
        2001  Skyhawk Series NVME SSD
        5001  WD Black NVMe SSD
-       5002  WD Black 2018 / PC SN720 NVMe SSD
-       5003  WD Black 2018 / PC SN520 NVMe SSD
+       5002  WD Black 2018/SN750 / PC SN720 NVMe SSD
+       5003  WD Blue SN500 / PC SN520 NVMe SSD
        5004  PC SN520 NVMe SSD
        5005  PC SN520 NVMe SSD
-       5006  WD Black 2019/PC SN750 NVMe SSD
+       5006  WD Black SN750 / PC SN730 NVMe SSD
        5009  WD Blue SN550 NVMe SSD
                15b7 5009  WD Blue SN550 NVMe SSD
+       500b  PC SN530 NVMe SSD
+               1414 500b  Xbox Series X
        500d  WD Ultrastar DC SN340 NVMe SSD
+       5011  WD Black SN850
 15b8  ADDI-DATA GmbH
        1001  APCI1516 SP controller (16 digi outputs)
        1003  APCI1032 SP controller (32 digi inputs w/ opto coupler)
        0245  PCA7428CE_F1 - Analog Inputs isolated
        0303  PCD-7006C Digital Input & Output PCI Card
        0800  PCD8006 - PCIe digital Inputs/Outputs
+       0840  PCA-8428 General-purpose multifunctional PCIe card with 8 analog inputs and 2 analog outputs
+       0841  PCA-8429 General-purpose multifunctional PCIe card with 8 analog inputs
+       0842  PCA-8438 General-purpose multifunctional PCIe card with 16 analog inputs and 2 analog outputs
+       0843  PCA-8439 General-purpose multifunctional PCIe card with 16 analog inputs
        ff00  CTU CAN FD PCIe Card
 1761  Pickering Interfaces Ltd
 1771  InnoVISION Multimedia Ltd.
        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)]
 17cc  NetChip Technology, Inc
        2280  USB 2.0
 17cd  Cadence Design Systems, Inc.
                19e5 d136  Hi1822 SP580 (4*25GE)
                19e5 d141  Hi1822 SP583 (4*25GE)
                19e5 d146  Hi1822 SP585 (4*25GE)
+       3714  ES3000 V5 NVMe PCIe SSD
+               19e5 5312  NVMe SSD ES3500P V5 2000GB 2.5" U.2
        371e  Hi1822 Family Virtual Bridge
+       3754  ES3000 V6 NVMe PCIe SSD
+               19e5 6122  NVMe SSD ES3600P V6 1600GB 2.5" U.2
+               19e5 6123  NVMe SSD ES3600P V6 3200GB 2.5" U.2
+               19e5 6124  NVMe SSD ES3600P V6 6400GB 2.5" U.2
+               19e5 6141  NVMe SSD ES3800P V6 800GB 2.5" U.2
+               19e5 6142  NVMe SSD ES3800P V6 1600GB 2.5" U.2
+               19e5 6212  NVMe SSD ES3500P V6 1920GB 2.5" U.2
+               19e5 6213  NVMe SSD ES3500P V6 3840GB 2.5" U.2
+               19e5 6214  NVMe SSD ES3500P V6 7680GB 2.5" U.2
+               19e5 6215  NVMe SSD ES3500P V6 15360GB 2.5" U.2
        375e  Hi1822 Family Virtual Function
        379e  Hi1822 Family Virtual Function
        a120  HiSilicon PCIe Root Port with Gen4
 1a4a  SLAC National Accelerator Lab TID-AIR
        1000  MCOR Power Supply Controller
        1010  AMC EVR - Stockholm Timing Board
+       1020  PGPCard - Gen3 Cameralink Interface
        1030  PGPCard - Gen3 GIGe Interface
        2000  PGPCard - 4 Lane
        2001  PGPCard - 8 Lane Plus EVR
        000b  QEMU PCIe Expander bridge
        000c  QEMU PCIe Root port
        000d  QEMU XHCI Host Controller
+       0010  QEMU NVM Express Controller
        0100  QXL paravirtual graphic card
                1af4 1100  QEMU Virtual Machine
 1b37  Signal Processing Devices Sweden AB
        9172  88SE9172 SATA 6Gb/s Controller
        9178  88SE9170 PCIe SATA 6Gb/s Controller
        917a  88SE9172 SATA III 6Gb/s RAID Controller
+       9182  88SE9182 PCIe 2.0 x2 2-port SATA 6 Gb/s Controller
        9183  88SS9183 PCIe SSD Controller
        9192  88SE9172 SATA III 6Gb/s RAID Controller
        91a0  88SE912x SATA 6Gb/s Controller [IDE mode]
        91a4  88SE912x IDE Controller
+       9215  88SE9215 PCIe 2.0 x1 4-port SATA 6 Gb/s Controller
        9220  88SE9220 PCIe 2.0 x2 2-port SATA 6 Gb/s RAID Controller
-       9230  88SE9230 PCIe SATA 6Gb/s Controller
+       9230  88SE9230 PCIe 2.0 x2 4-port SATA 6 Gb/s RAID Controller
                1028 1fd6  BOSS-S1 Adapter
                1028 1fdf  BOSS-S1 Modular
                1028 1fe2  BOSS-S1 Adapter
        2402  Ultrastar DC SN640 NVMe SSD
        2404  Ultrastar DC SN640 NVMe SSD
        2500  Ultrastar DC SN840 NVMe SSD
+       2600  Ultrastar DC ZN540 ZNS NVMe SSD
        3714  PC SN730 NVMe SSD
        3734  PC SN730 NVMe SSD
 1b9a  XAVi Technologies Corp.
        1285  PC300 NVMe Solid State Drive 1TB
        1327  BC501 NVMe Solid State Drive 512GB
        1504  SC300 512GB M.2 2280 SATA Solid State Drive
+       1527  PC401 NVMe Solid State Drive 256GB
        243b  PE6110 NVMe Solid State Drive
                1c5c 0100  PE6110 NVMe Solid State Drive
        2839  PE8000 Series NVMe Solid State Drive
                1c5c 0100  PE8000 Series NVMe Solid State Drive
 1c5f  Beijing Memblaze Technology Co. Ltd.
-       000d  PBlaze5 520/526 AIC
-       003d  PBlaze5 920/926 AIC
-       010d  PBlaze5 520/526 U.2
-       013d  PBlaze5 920/926 U.2
+       000d  PBlaze5 520/526
+       003d  PBlaze5 920/926
+       003e  PBlaze6 6920
+               1c5f 0a31  NVMe SSD PBlaze6 6920 3840GB 2.5" U.2
+               1c5f 0a41  NVMe SSD PBlaze6 6920 7680GB 2.5" U.2
+               1c5f 4a31  NVMe SSD PBlaze6 6920 3200GB 2.5" U.2
+               1c5f 4a41  NVMe SSD PBlaze6 6920 6400GB 2.5" U.2
        0540  PBlaze4 NVMe SSD
        0550  PBlaze5 700/900
        0555  PBlaze5 510/516
 1d00  Pure Storage
 1d05  Tongfang Hongkong Limited
 1d0f  Amazon.com, Inc.
+       8061  NVMe EBS Controller
        cd01  NVMe SSD Controller
        ec20  Elastic Network Adapter (ENA)
        efa0  Elastic Fabric Adapter (EFA)
        1014  AR-MAN-U280 [Manitou Class Accelerator for U280]
        1015  AR-ARK-BBDEV-FX0 [Arkville 32B DPDK Baseband Device]
        1016  AR-ARK-BBDEV-FX1 [Arkville 64B DPDK Baseband Device]
+       1017  AR-ARK-FX1 [Arkville 64B Multi-Homed Primary Endpoint]
+       1018  AR-ARK-FX1 [Arkville 64B Multi-Homed Secondary Endpoint]
+       1019  AR-ARK-FX1 [Arkville 64B Multi-Homed Tertiary Endpoint]
        4200  A5PL-E1-10GETI [10 GbE Ethernet Traffic Instrument]
 1d72  Xiaomi
 1d78  DERA Storage
        0100  RK3399 PCI Express Root Port
        1808  RK1808 Neural Network Processor Card
 1d8f  Enyx
-1d93  YADRO (KNS Group)
+1d93  YADRO
 1d94  Chengdu Haiguang IC Design Co., Ltd.
        1450  Root Complex
        1451  I/O Memory Management Unit
                1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
                1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
                1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-               1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-               1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+               1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+               1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
                1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
                1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-               1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+               1dd8 400d  DSP DSC-100 Ent 100Gb Card
+               1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
        1001  DSC Virtual Downstream Port
                1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
                1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
                1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-               1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-               1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+               1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+               1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
                1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
                1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-               1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+               1dd8 400d  DSP DSC-100 Ent 100Gb Card
+               1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
        1002  DSC Ethernet Controller
                1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
                1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
                1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-               1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-               1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+               1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+               1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
                1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
                1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-               1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+               1dd8 400d  DSP DSC-100 Ent 100Gb Card
+               1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
        1003  DSC Ethernet Controller VF
                1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
                1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
                1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-               1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-               1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+               1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+               1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
                1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
                1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-               1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+               1dd8 400d  DSP DSC-100 Ent 100Gb Card
+               1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
        1004  DSC Management Controller
                1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
                1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
                1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-               1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-               1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+               1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+               1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
                1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
                1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-               1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+               1dd8 400d  DSP DSC-100 Ent 100Gb Card
+               1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
        1007  DSC Storage Accelerator
                1dd8 4000  Naples 100Gb 2-port QSFP28 x16 8GB
                1dd8 4001  Naples 100Gb 2-port QSFP28 x16 4GB
                1dd8 4002  Naples 25Gb 2-port SFP28 x8 4GB
-               1dd8 4007  DSP DSC-25 10/25G 2p OCP Card
-               1dd8 4008  DSC-25 10/25G 2-port SFP28 x8 4GB RAM 8GB eMMC
+               1dd8 4007  DSP DSC-25 Ent 10/25G OCP3 Card
+               1dd8 4008  DSP DSC-25 10/25G 2p SFP28 Card
                1dd8 400a  DSC-100 40/100G 2-port 8G RAM 16G eMMC G1 Services Card
                1dd8 400c  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
-               1dd8 400d  DSP DSC-100 100G 2p QSFP28 Card
+               1dd8 400d  DSP DSC-100 Ent 100Gb Card
+               1dd8 400e  DSC-25 10/25G 2-port 4G RAM 8G eMMC G1 Services Card
 1de0  Groq
-       0000  Q100 Tensor Streaming Processor
+# rename due to conflict with a term in use by another company for an entirely different product.
+       0000  TSP100 Tensor Streaming Processor
 1de1  Tekram Technology Co.,Ltd.
        0391  TRM-S1040 [DC-315 / DC-395 series]
        2020  DC-390
        e00a  eMAG PCI Express Root Port 5
        e00b  eMAG PCI Express Root Port 6
        e00c  eMAG PCI Express Root Port 7
+# Root Complex A (RCA)
+       e100  Altra PCI Express Root Complex A
+# RCA port 0
+       e101  Altra PCI Express Root Port a0
+# RCA port 1
+       e102  Altra PCI Express Root Port a1
+# RCA port 2
+       e103  Altra PCI Express Root Port a2
+# RAC port 3
+       e104  Altra PCI Express Root Port a3
+# RCA port 4
+       e105  Altra PCI Express Root Port a4
+# RCA port 5
+       e106  Altra PCI Express Root Port a5
+# RCA port 6
+       e107  Altra PCI Express Root Port a6
+# RCA port 7
+       e108  Altra PCI Express Root Port a7
+# Root Complex B (RCB)
+       e110  Altra PCI Express Root Complex B
+# RCB port 0
+       e111  Altra PCI Express Root Port b0
+# RCB port 1
+       e112  Altra PCI Express Root Port b1
+# RCB port 2
+       e113  Altra PCI Express Root Port b2
+# RCB port 3
+       e114  Altra PCI Express Root Port b3
+# RCB port 4
+       e115  Altra PCI Express Root Port b4
+# RCB port 5
+       e116  Altra PCI Express Root Port b5
+# RCB port 6
+       e117  Altra PCI Express Root Port b6
+# RCB port 7
+       e118  Altra PCI Express Root Port b7
 1df3  Ethernity Networks
        0201  ACE-NIC40 Programmable Network Accelerator
                1df3 0001  ENA1040
        0002  T11 [CloudBlazer]
        0003  T10s [CloudBlazer]
        8011  I10 [CloudBlazer]
+       8012  I10L [CloudBlazer]
 # nee Thinci, Inc
 1e38  Blaize, Inc
        0102  Xplorer X1600
        1601  NVMe SSD Controller MAP1601
 1e4c  GSI Technology
 # Associative Processing Unit (APU)
-       0010  APU [Leda-G]
+       0010  APU [Leda]
                1e4c 0120  SE120
 1e57  Beijing Panyi Technology Co., Ltd
        0100  The device has already been deleted.
                0000 0100  PY8800 64GB Accelerator
+1e60  Hailo Technologies Ltd.
+       2864  Hailo-8 AI Processor
 1e6b  Axiado Corp.
 1e7b  Dataland
 1e7c  Brainchip Inc
 # aka SED Systems
 1e94  Calian SED
 1e95  Solid State Storage Technology Corporation
+1ea0  Tencent Technology (Shenzhen) Company Limited
+       2a16  Cloud Intelligent Inference Controller
 1eab  Hefei DATANG Storage Technology Co.,LTD.
+       300a  NVMe SSD Controller 300A
+       300b  NVMe SSD Controller 300B
 1eae  XFX Limited
 1eb1  VeriSilicon Inc
        1001  Video Accelerator
+1ed8  Digiteq Automotive
+       0101  FG4 PCIe Frame Grabber
+1ed9  Myrtle.ai
+1ee9  SUSE LLC
 # nee Tumsan Oy
 1fc0  Ascom (Finland) Oy
        0300  E2200 Dual E1/Rawpipe Card
 2348  Racore
        2010  8142 100VG/AnyLAN
 2646  Kingston Technology Company, Inc.
+       0010  HyperX Predator PCIe AHCI SSD
        2263  A2000 NVMe SSD
+       5008  U-SNS8154P3 NVMe SSD
+       500d  OM3PDP3 NVMe SSD
 270b  Xantel Corporation
 270f  Chaintech Computer Co. Ltd
 2711  AVID Technology Inc.
        0100  2nd Generation Core Processor Family DRAM Controller
                1028 04aa  XPS 8300
                1043 844d  P8P67/P8H67 Series Motherboard
+               8086 200d  DH61CR motherboard
        0101  Xeon E3-1200/2nd Generation Core Processor Family PCI Express Root Port
                1028 04b2  Vostro 3350
                106b 00dc  MacBookPro8,2 [Core i7, 15", 2011]
                1043 844d  P8B WS Motherboard
        0172  Xeon E3-1200 v2/3rd Gen Core processor Graphics Controller
        0176  3rd Gen Core processor Graphics Controller
+       0201  Arctic Sound
        0284  Comet Lake PCH-LP LPC Premium Controller/eSPI Controller
        02a3  Comet Lake PCH-LP SMBus Host Controller
        02a4  Comet Lake SPI (flash) Controller
        02a6  Comet Lake North Peak
+       02b0  Comet Lake PCI Express Root Port #9
+       02b1  Comet Lake PCI Express Root Port #10
+       02b3  Comet Lake PCI Express Root Port #12
+       02b4  Comet Lake PCI Express Root Port #13
+       02b8  Comet Lake PCI Express Root Port #1
+       02bc  Comet Lake PCI Express Root Port #5
+       02c5  Comet Lake Serial IO I2C Host Controller
        02c8  Comet Lake PCH-LP cAVS
        02d3  Comet Lake SATA AHCI Controller
        02e0  Comet Lake Management Engine Interface
        02e8  Serial IO I2C Host Controller
        02e9  Comet Lake Serial IO I2C Host Controller
+       02ea  Comet Lake PCH-LP LPSS: I2C Controller #2
        02ed  Comet Lake PCH-LP USB 3.1 xHCI Host Controller
        02ef  Comet Lake PCH-LP Shared SRAM
        02f0  Comet Lake PCH-LP CNVi WiFi
        040a  Xeon E3-1200 v3 Processor Integrated Graphics Controller
        0412  Xeon E3-1200 v3/4th Gen Core Processor Integrated Graphics Controller
                103c 1998  EliteDesk 800 G1
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        0416  4th Gen Core Processor Integrated Graphics Controller
                17aa 220e  ThinkPad T440p
                1028 1fe9  Express Flash NVMe 4.0TB HHHL AIC (P4600)
        0b26  Thunderbolt 4 Bridge [Goshen Ridge 2020]
        0b27  Thunderbolt 4 USB Controller [Goshen Ridge 2020]
-       0b60  NVMe DC SSD [3DNAND, Beta Rock Controller]
+       0b60  NVMe DC SSD [3DNAND, Sentinel Rock Controller]
                1028 2060  NVMe SED MU U.2 1.6TB (P5600)
                1028 2061  NVMe SED MU U.2 3.2TB (P5600)
                1028 2062  NVMe SED MU U.2 6.4TB (P5600)
                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)
+               8086 8008  NVMe Datacenter SSD [3DNAND] SE 2.5" U.2 (P5510)
        0be0  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
        0be1  Atom Processor D2xxx/N2xxx Integrated Graphics Controller
                105b 0d7c  D270S/D250S Motherboard
        0bf7  Atom Processor D2xxx/N2xxx DRAM Controller
        0c00  4th Gen Core Processor DRAM Controller
                103c 1998  EliteDesk 800 G1
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        0c01  Xeon E3-1200 v3/4th Gen Core Processor PCI Express x16 Controller
        0c04  Xeon E3-1200 v3/4th Gen Core Processor DRAM Controller
                8086 4532  Desktop Board D815EEA2/D815EFV
                8086 4541  D815EEA Motherboard
                8086 4557  D815EGEW Mainboard
+       1136  Thunderbolt 4 Bridge [Maple Ridge 4C 2020]
+       1137  Thunderbolt 4 NHI [Maple Ridge 4C 2020]
+       1138  Thunderbolt 4 USB Controller [Maple Ridge 4C 2020]
        1161  82806AA PCI64 Hub Advanced Programmable Interrupt Controller
                8086 1161  82806AA PCI64 Hub APIC
        1162  Xscale 80200 Big Endian Companion Chip
        1503  82579V Gigabit Network Connection
                1043 849c  P8P67 Deluxe Motherboard
                10cf 161c  LIFEBOOK E752
+               8086 200d  DH61CR motherboard
        1507  Ethernet Express Module X520-P2
        1508  82598EB Gigabit BX Network Connection
        1509  82580 Gigabit Network Connection
        156f  Ethernet Connection I219-LM
                1028 06dc  Latitude E7470
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
        1570  Ethernet Connection I219-V
        1571  Ethernet Virtual Function 700 Series
        1572  Ethernet Controller X710 for 10GbE SFP+
                17aa 0000  ThinkServer X710 AnyFabric for 10GbE SFP+
                17aa 4001  ThinkServer X710-4 AnyFabric for 10GbE SFP+
                17aa 4002  ThinkServer X710-2 AnyFabric for 10GbE SFP+
+               193d 1020  NIC-ETH561F-sL-4x10G
+               193d 1021  NIC-ETH561F-sL-2x10G
                19e5 d11c  Ethernet 2-port X710 10Gb SFP+ Adapter SP330
                1bd4 0056  Ethernet Network Adapter X710-BM2 for OCP NIC 3.0
                8086 0000  Ethernet Converged Network Adapter X710
        1577  DSL6540 Thunderbolt 3 NHI [Alpine Ridge 4C 2015]
        1578  DSL6540 Thunderbolt 3 Bridge [Alpine Ridge 4C 2015]
        157b  I210 Gigabit Network Connection
+               ea50 cc10  RXi2-BP
        157c  I210 Gigabit Backplane Connection
        157d  DSL5110 Thunderbolt 2 NHI (Low Power) [Win Ridge 2C 2014]
        157e  DSL5110 Thunderbolt 2 Bridge (Low Power) [Win Ridge 2C 2014]
                1059 0170  RD-01213 10GbE interface
                1590 0000  Ethernet 2-port 563i Adapter
                1590 00f8  Ethernet 2-port 563i Adapter
+               193d 100e  NIC-ETH561i-Mb-4x10G
                8086 0000  Ethernet Converged Network Adapter XL710-Q2
        1583  Ethernet Controller XL710 for 40GbE QSFP+
                1028 0000  Ethernet 40G 2P XL710 QSFP+ rNDC
        1591  Ethernet Controller E810-C for backplane
        1592  Ethernet Controller E810-C for QSFP
                1137 02bf  E810CQDA2 2x100 GbE QSFP28 PCIe NIC
+               8086 0001  Ethernet Network Adapter E810-C-Q1
                8086 0002  Ethernet Network Adapter E810-C-Q2
                8086 0004  Ethernet Network Adapter E810-C-Q2
                8086 0005  Ethernet Network Adapter E810-C-Q1 for OCP3.0
                8086 000a  Ethernet Network Adapter E810-C-Q1 for OCP
                8086 000b  Ethernet 100G 2P E810-C Adapter
                8086 000c  Ethernet 100G 2P E810-C OCP
+               8086 000d  Ethernet Network Adapter E810-L-Q2 for OCP 3.0
        1593  Ethernet Controller E810-C for SFP
                1137 02c3  E810XXVDA4 4x25/10 GbE SFP28 PCIe NIC
                8086 0002  Ethernet Network Adapter E810-L-2
                1137 0000  X710TLG GbE RJ45 PCIe NIC
                1137 02c1  X710T2LG 2x10 GbE RJ45 PCIe NIC
                1137 02c2  X710T4LG 4x10 GbE RJ45 PCIe NIC
+               1137 02d9  Ethernet Network Adapter X710-T2L OCP 3.0
+               1137 02da  Ethernet Network Adapter X710-T4L OCP 3.0
                8086 0000  Ethernet Network Adapter X710-TL
                8086 0001  Ethernet Network Adapter X710-T4L
                8086 0002  Ethernet Network Adapter X710-T4L
        18a0  C4xxx Series QAT
        18a1  C4XXX Series QAT Virtual Function
        1900  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
-       1901  6th-9th Gen Core Processor PCIe Controller (x16)
+       1901  6th-10th Gen Core Processor PCIe Controller (x16)
        1902  HD Graphics 510
        1903  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Thermal Subsystem
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
                1028 06e4  XPS 15 9550
+               1028 06e6  Latitude 11 5175 2-in-1
                103c 825b  OMEN-17-w001nv
                17aa 225d  ThinkPad T480
        1904  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
                1028 06dc  Latitude E7470
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
                17aa 382a  B51-80 Laptop
        1905  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x8)
        1906  HD Graphics 510
        1909  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor PCIe Controller (x4)
        190c  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        190f  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
        1910  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
                1028 06e4  XPS 15 9550
                1028 06dc  Latitude E7470
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
        1918  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
        1919  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Imaging Unit
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        191b  HD Graphics 530
                1028 06e4  XPS 15 9550
                103c 825b  OMEN-17-w001nv
        191d  HD Graphics P530
        191e  HD Graphics 515
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        191f  Xeon E3-1200 v5/E3-1500 v5/6th Gen Core Processor Host Bridge/DRAM Registers
        1921  HD Graphics 520
        1926  Iris Graphics 540
        1c02  6 Series/C200 Series Chipset Family 6 port Desktop SATA AHCI Controller
                1028 04aa  XPS 8300
                1043 844d  P8 series motherboard
+               8086 200d  DH61CR motherboard
                8086 7270  Server Board S1200BT Family
        1c03  6 Series/C200 Series Chipset Family 6 port Mobile SATA AHCI Controller
                1028 04a3  Precision M4600
                17aa 21cf  ThinkPad T520
 # Realtek ALC888 audio codec
                8086 2008  DQ67SW board
+               8086 200d  DH61CR motherboard
                8086 7270  Apple MacBookPro8,2 [Core i7, 15", 2011]
        1c22  6 Series/C200 Series Chipset Family SMBus Controller
                1028 04a3  Precision M4600
                1028 04da  Vostro 3750
                1043 844d  P8 series motherboard
                17aa 21cf  ThinkPad T520
+               8086 200d  DH61CR motherboard
                8086 7270  Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2
        1c24  6 Series/C200 Series Chipset Family Thermal Management Controller
        1c25  6 Series/C200 Series Chipset Family DMI to PCI Bridge
                1028 04da  Vostro 3750
                1043 844d  P8 series motherboard
                17aa 21cf  ThinkPad T520
+               8086 200d  DH61CR motherboard
                8086 7270  Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2
        1c27  6 Series/C200 Series Chipset Family USB Universal Host Controller #1
                8086 7270  Apple MacBookPro8,2 [Core i7, 15", 2011]
                1028 04da  Vostro 3750
                1043 844d  P8 series motherboard
                17aa 21cf  ThinkPad T520
+               8086 200d  DH61CR motherboard
                8086 7270  Server Board S1200BT Family / Apple MacBook Pro 8,1/8,2
        1c33  6 Series/C200 Series Chipset Family LAN Controller
        1c35  6 Series/C200 Series Chipset Family VECI Controller
                1028 04da  Vostro 3750
                1043 844d  P8 series motherboard
                17aa 21cf  ThinkPad T520
+               8086 200d  DH61CR motherboard
                8086 7270  Apple MacBookPro8,2 [Core i7, 15", 2011]
        1c3b  6 Series/C200 Series Chipset Family MEI Controller #2
        1c3c  6 Series/C200 Series Chipset Family IDE-r Controller
        1c5a  Upgraded Q67 Express Chipset LPC Controller
        1c5b  6 Series/C200 Series Chipset Family LPC Controller
        1c5c  H61 Express Chipset LPC Controller
+               8086 200d  DH61CR motherboard
        1c5d  6 Series/C200 Series Chipset Family LPC Controller
        1c5e  6 Series/C200 Series Chipset Family LPC Controller
        1c5f  6 Series/C200 Series Chipset Family LPC Controller
                147b 0507  TH7II-RAID
                8086 4532  Desktop Board D815EEA2/D815EFV
                8086 4557  D815EGEW Mainboard
+               8086 4d44  D850EMV2 motherboard
                8086 5744  S845WD1-E mainboard
        2443  82801BA/BAM SMBus Controller
                1014 01c6  Netvista A40/A40p
                147b 0507  TH7II-RAID
                8086 4557  D815EGEW Mainboard
                8086 4656  Desktop Board D815EFV
+               8086 4d44  D850EMV2 motherboard
        2446  82801BA/BAM AC'97 Modem Controller
                1025 1016  Travelmate 612 TX
                104d 80df  Vaio PCG-FX403
                15d9 3280  Supermicro P4SBE Mainboard
                8086 4532  Desktop Board D815EEA2/D815EFV
                8086 4557  D815EGEW Mainboard
+               8086 4d44  D850EMV2 motherboard
                8086 5744  S845WD1-E mainboard
        244c  82801BAM ISA Bridge (LPC)
        244e  82801 PCI Bridge
                103c 0934  Compaq nw8240/nx8220
                103c 0944  Compaq nc6220 Notebook PC
                103c 099c  NX6110/NC6120
+               1043 82d9  Asus Eee PC 900
                104d 81b7  Vaio VGN-S3XP
                a304 81b7  Vaio VGN-S3XP
                e4bf 0ccd  CCD-CALYPSO
                1028 022f  Inspiron 1525
                103c 30c0  Compaq 6710b
                103c 30c1  Compaq 6910p
+               103c 30c5  Compaq 8510p
                103c 30cc  Pavilion dv6700
                103c 30d9  Presario C700
                1043 1017  X58LE
        2a41  Mobile 4 Series Chipset PCI Express Graphics Port
                e4bf cc4d  CCM-BOOGIE
        2a42  Mobile 4 Series Chipset Integrated Graphics Controller
+               1028 02aa  Dell Inspiron 1545
                17aa 2112  ThinkPad T400
                e4bf cc4d  CCM-BOOGIE
        2a43  Mobile 4 Series Chipset Integrated Graphics Controller
                8086 4210  Dual Band Wireless AC 3165
        3166  Dual Band Wireless-AC 3165 Plus Bluetooth
                8086 4210  Dual Band Wireless-AC 3165
-       3184  UHD Graphics 605
-       3185  UHD Graphics 605
+       3184  GeminiLake [UHD Graphics 605]
+       3185  GeminiLake [UHD Graphics 600]
        318c  Celeron/Pentium Silver Processor Dynamic Platform and Thermal Framework Processor Participant
        318e  Celeron/Pentium Silver Processor NorthPeak
        3190  Celeron/Pentium Silver Processor Gaussian Mixture Model
                17aa 380b  V130-15IGM Laptop (Lenovo) - Type 81HL
        319a  Celeron/Pentium Silver Processor Trusted Execution Engine Interface
        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
        31bc  Celeron/Pentium Silver Processor Serial IO UART Host Controller
        31da  Gemini Lake PCI Express Root Port
        31db  Gemini Lake PCI Express Root Port
        31dc  AC 1550i Wireless
+       31e3  Celeron/Pentium Silver Processor SATA Controller
+       31e8  Celeron/Pentium Silver Processor LPC Controller
        31ee  Celeron/Pentium Silver Processor Serial IO UART Host Controller
        31f0  Gemini Lake Host Bridge
        3200  GD31244 PCI-X SATA HBA
        34aa  Ice Lake-LP Serial IO SPI Controller #0
        34ab  Ice Lake-LP Serial IO SPI Controller #1
        34b0  Ice Lake-LP PCI Express Root Port #9
+       34b7  Ice Lake-LP PCI Express Root Port #16
        34bc  Ice Lake-LP PCI Express Root Port #5
        34c5  Ice Lake-LP Serial IO I2c Controller #4
        34c6  Ice Lake-LP Serial IO I2c Controller #5
-       34c8  Smart Sound Technology Audio Controller
+       34c8  Ice Lake-LP Smart Sound Technology Audio Controller
        34d3  Ice Lake-LP SATA Controller [AHCI mode]
-       34e0  Management Engine Interface
+       34e0  Ice Lake-LP Management Engine
        34e8  Ice Lake-LP Serial IO I2C Controller #0
        34e9  Ice Lake-LP Serial IO I2C Controller #1
        34ea  Ice Lake-LP Serial IO I2C Controller #2
        34eb  Ice Lake-LP Serial IO I2C Controller #3
        34ed  Ice Lake-LP USB 3.1 xHCI Host Controller
+       34ef  Ice Lake-LP DRAM Controller
        34f0  Killer Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW)
        34f8  Ice Lake-LP SD Controller
+       34fc  Ice Lake-LP Integrated Sensor Solution
        3500  6311ESB/6321ESB PCI Express Upstream Port
                103c 31fe  ProLiant DL140 G3
                15d9 9680  X7DBN Motherboard
        3e81  8th Gen Core Processor PCIe Controller (x16)
        3e85  8th Gen Core Processor PCIe Controller (x8)
        3e89  8th Gen Core Processor PCIe Controller (x4)
-       3e91  8th Gen Core Processor Gaussian Mixture Model
-       3e92  UHD Graphics 630 (Desktop)
+       3e90  CoffeeLake-S GT1 [UHD Graphics 610]
+       3e91  CoffeeLake-S GT2 [UHD Graphics 630]
+       3e92  CometLake-S GT2 [UHD Graphics 630]
                1028 0869  Vostro 3470
-       3e93  UHD Graphics 610
-       3e96  HD Graphics P630
-       3e98  UHD Graphics 630 (Desktop 9 Series)
-       3e9b  UHD Graphics 630 (Mobile)
-       3ea0  UHD Graphics 620 (Whiskey Lake)
+       3e93  CoffeeLake-S GT1 [UHD Graphics 610]
+       3e96  CoffeeLake-S GT2 [UHD Graphics P630]
+       3e98  CoffeeLake-S GT2 [UHD Graphics 630]
+       3e9b  CoffeeLake-H GT2 [UHD Graphics 630]
+       3ea0  WhiskeyLake-U GT2 [UHD Graphics 620]
                1028 089e  Inspiron 5482
-       3ea5  Iris Plus Graphics 655
+       3ea5  CoffeeLake-U GT3e [Iris Plus Graphics 655]
        3ec2  8th Gen Core Processor Host Bridge/DRAM Registers
                1028 0869  Vostro 3470
                1043 8694  PRIME H310M-D
        4032  5400 Chipset IOxAPIC
        4035  5400 Chipset FBD Registers
        4036  5400 Chipset FBD Registers
+       4041  NVMe Datacenter SSD [Optane]
        4100  Moorestown Graphics and Video
        4108  Atom Processor E6xx Integrated Graphics Controller
        4109  Atom Processor E6xx Integrated Graphics Controller
        4115  Atom Processor E6xx PCI Host Bridge #2
        4116  Atom Processor E6xx PCI Host Bridge #3
        4117  Atom Processor E6xx PCI Host Bridge #4
+       4140  NVMe Datacenter SSD [Optane]
+               1028 2134  NVMe Datacenter SSD [Optane] SED 400GB 2.5" U.2 (P5800X)
+               1028 2135  NVMe Datacenter SSD [Optane] SED 800GB 2.5" U.2 (P5800X)
+               1028 2136  NVMe Datacenter SSD [Optane] SED 1.6GB 2.5" U.2 (P5800X)
+               1028 2137  NVMe Datacenter SSD [Optane] 400GB 2.5" U.2 (P5800X)
+               1028 2138  NVMe Datacenter SSD [Optane] 800GB 2.5" U.2 (P5800X)
+               1028 2139  NVMe Datacenter SSD [Optane] 1.6TB 2.5" U.2 (P5800X)
        4220  PRO/Wireless 2200BG [Calexico2] Network Connection
                103c 0934  Compaq nw8240/nx8220
                103c 12f6  nc6120/nc6220/nw8240/nx8220
                8086 1316  WiMAX/WiFi Link 5150 ABG
        444e  Turbo Memory Controller
        467f  Volume Management Device NVMe RAID Controller
+       4680  AlderLake-S GT1
+       46a0  AlderLake-P GT2
+       4905  DG1 [Iris Xe MAX Graphics]
+       4906  DG1 [Iris Xe Pod]
+       4907  SG1 [Server GPU SG-18M]
+       4908  DG1 [Iris Xe Graphics]
        4c3d  Volume Management Device NVMe RAID Controller
+       4f80  DG2
+       4f81  DG2
+       4f82  DG2
        5001  LE80578
        5002  LE80578 Graphics Processor Unit
        5009  LE80578 Video Display Controller
                1993 0ded  mGuard-PCI AV#2
                1993 0dee  mGuard-PCI AV#1
                1993 0def  mGuard-PCI AV#0
+       8603  Ice Lake-LP Dynamic Tuning Processor Participant
        87c0  UHD Graphics 617
        8800  Platform Controller Hub EG20T PCI Express Port
        8801  Platform Controller Hub EG20T Packet Hub
        8818  Platform Controller Hub EG20T Controller Area Network (CAN) Controller
        8819  Platform Controller Hub EG20T IEEE 1588 Hardware Assist
        8a0d  Ice Lake Thunderbolt 3 NHI #1
+       8a12  Ice Lake-LP Processor Host Bridge/DRAM Registers
        8a13  Ice Lake Thunderbolt 3 USB Controller
        8a17  Ice Lake Thunderbolt 3 NHI #0
+       8a19  Image Signal Processor
        8a1d  Ice Lake Thunderbolt 3 PCI Express Root Port #0
        8a1f  Ice Lake Thunderbolt 3 PCI Express Root Port #1
        8a21  Ice Lake Thunderbolt 3 PCI Express Root Port #2
        8c01  8 Series Chipset Family 4-port SATA Controller 1 [IDE mode] - Mobile
        8c02  8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
                103c 1998  EliteDesk 800 G1
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        8c03  8 Series/C220 Series Chipset Family 6-port SATA Controller 1 [AHCI mode]
                103c 1909  ZBook 15
                103c 1998  EliteDesk 800 G1
                1043 8534  ASUS H81I-PLUS
                17aa 220e  ThinkPad T440p
+               17aa 3098  ThinkCentre E73
        8c11  8 Series/C220 Series Chipset Family PCI Express Root Port #1
        8c12  8 Series/C220 Series Chipset Family PCI Express Root Port #2
                103c 1998  EliteDesk 800 G1
        8c18  8 Series/C220 Series Chipset Family PCI Express Root Port #5
        8c19  8 Series/C220 Series Chipset Family PCI Express Root Port #5
        8c1a  8 Series/C220 Series Chipset Family PCI Express Root Port #6
+               17aa 3098  ThinkCentre E73
        8c1b  8 Series/C220 Series Chipset Family PCI Express Root Port #6
        8c1c  8 Series/C220 Series Chipset Family PCI Express Root Port #7
        8c1d  8 Series/C220 Series Chipset Family PCI Express Root Port #7
                103c 1909  ZBook 15
                103c 1998  EliteDesk 800 G1
                17aa 220e  ThinkPad T440p
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        8c23  8 Series Chipset Family CHAP Counters
        8c24  8 Series Chipset Family Thermal Management Controller
                103c 1998  EliteDesk 800 G1
                17aa 220e  ThinkPad T440p
                17aa 2210  ThinkPad T540p
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
                2210 17aa  ThinkPad T540p
        8c2d  8 Series/C220 Series Chipset Family USB EHCI #2
                103c 1909  ZBook 15
                103c 1998  EliteDesk 800 G1
                17aa 220e  ThinkPad T440p
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        8c31  8 Series/C220 Series Chipset Family USB xHCI
                103c 1909  ZBook 15
                103c 1998  EliteDesk 800 G1
                17aa 220e  ThinkPad T440p
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        8c33  8 Series/C220 Series Chipset Family LAN Controller
        8c34  8 Series/C220 Series Chipset Family NAND Controller
                103c 1909  ZBook 15
                103c 1998  EliteDesk 800 G1
                17aa 220e  ThinkPad T440p
+               17aa 3098  ThinkCentre E73
                17aa 309f  ThinkCentre M83
        8c3b  8 Series/C220 Series Chipset Family MEI Controller #2
        8c3c  8 Series/C220 Series Chipset Family IDE-r Controller
        8c5a  8 Series/C220 Series Chipset Family LPC Controller
        8c5b  8 Series/C220 Series Chipset Family LPC Controller
        8c5c  H81 Express LPC Controller
+               17aa 3098  ThinkCentre E73
        8c5d  8 Series/C220 Series Chipset Family LPC Controller
        8c5e  8 Series/C220 Series Chipset Family LPC Controller
        8c5f  8 Series/C220 Series Chipset Family LPC Controller
        9622  Integrated RAID
        9641  Integrated RAID
        96a1  Integrated RAID
+       9a03  TigerLake-LP Dynamic Tuning Processor Participant
        9a09  11th Gen Core Processor PCIe Controller
        9a0b  Volume Management Device NVMe RAID Controller
-       9a13  Tiger Lake-LP Thunderbolt USB Controller
+       9a0d  Tiger Lake-LP Telemetry Aggregator
+       9a13  Tiger Lake-LP Thunderbolt 4 USB Controller
        9a14  11th Gen Core Processor Host Bridge/DRAM Registers
-       9a17  Tiger Lake-H Thunderbolt USB Controller
-       9a1b  Tiger Lake-LP Thunderbolt NHI #0
-       9a1d  Tiger Lake-LP Thunderbolt NHI #1
-       9a1f  Tiger Lake-H Thunderbolt NHI #0
-       9a21  Tiger Lake-H Thunderbolt NHI #1
-       9a23  Tiger Lake-LP Thunderbolt PCI Express Root Port #0
-       9a25  Tiger Lake-LP Thunderbolt PCI Express Root Port #1
-       9a27  Tiger Lake-LP Thunderbolt PCI Express Root Port #2
-       9a29  Tiger Lake-LP Thunderbolt PCI Express Root Port #3
-       9a2b  Tiger Lake-H Thunderbolt PCI Express Root Port #0
-       9a2d  Tiger Lake-H Thunderbolt PCI Express Root Port #1
-       9a2f  Tiger Lake-H Thunderbolt PCI Express Root Port #2
-       9a31  Tiger Lake-H Thunderbolt PCI Express Root Port #3
+       9a17  Tiger Lake-H Thunderbolt USB Controller
+       9a1b  Tiger Lake-LP Thunderbolt NHI #0
+       9a1d  Tiger Lake-LP Thunderbolt NHI #1
+       9a1f  Tiger Lake-H Thunderbolt NHI #0
+       9a21  Tiger Lake-H Thunderbolt NHI #1
+       9a23  Tiger Lake-LP Thunderbolt PCI Express Root Port #0
+       9a25  Tiger Lake-LP Thunderbolt PCI Express Root Port #1
+       9a27  Tiger Lake-LP Thunderbolt PCI Express Root Port #2
+       9a29  Tiger Lake-LP Thunderbolt PCI Express Root Port #3
+       9a2b  Tiger Lake-H Thunderbolt PCI Express Root Port #0
+       9a2d  Tiger Lake-H Thunderbolt PCI Express Root Port #1
+       9a2f  Tiger Lake-H Thunderbolt PCI Express Root Port #2
+       9a31  Tiger Lake-H Thunderbolt PCI Express Root Port #3
        9a33  Tiger Lake Trace Hub
-       9a49  Iris Xe Graphics
-       9b41  UHD Graphics
+       9a49  TigerLake GT2 [Iris Xe Graphics]
+       9b41  CometLake-U GT2 [UHD Graphics]
        9b44  10th Gen Core Processor Host Bridge/DRAM Registers
+       9b53  Comet Lake-S 6c Host Bridge/DRAM Controller
        9b54  10th Gen Core Processor Host Bridge/DRAM Registers
        9b61  Comet Lake-U v1 4c Host Bridge/DRAM Controller
+       9b63  10th Gen Core Processor Host Bridge/DRAM Registers
        9b64  10th Gen Core Processor Host Bridge/DRAM Registers
-       9bc4  UHD Graphics
-       9bc8  UHD Graphics 630
+       9bc4  CometLake-H GT2 [UHD Graphics]
+       9bc5  CometLake-S GT2 [UHD Graphics 630]
+       9bc8  CometLake-S GT2 [UHD Graphics 630]
        9c00  8 Series SATA Controller 1 [IDE mode]
        9c01  8 Series SATA Controller 1 [IDE mode]
        9c02  8 Series SATA Controller 1 [AHCI mode]
        9d03  Sunrise Point-LP SATA Controller [AHCI mode]
                1025 115f  Acer Aspire E5-575G
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
                17aa 225d  ThinkPad T480
        9d16  Sunrise Point-LP PCI Express Root Port #7
        9d17  Sunrise Point-LP PCI Express Root Port #8
        9d18  Sunrise Point-LP PCI Express Root Port #9
+               17aa 2247  ThinkPad T570
                17aa 382a  B51-80 Laptop
        9d19  Sunrise Point-LP PCI Express Root Port #10
        9d1a  Sunrise Point-LP PCI Express Root Port #11
                1025 115f  Acer Aspire E5-575G
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
                17aa 224f  ThinkPad X1 Carbon 5th Gen
                17aa 225d  ThinkPad T480
                17aa 382a  B51-80 Laptop
                1025 115f  Acer Aspire E5-575G
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
                17aa 2247  ThinkPad T570
                1025 115f  Acer Aspire E5-575G
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
                17aa 2247  ThinkPad T570
                1025 115f  Acer Aspire E5-575G
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
                17aa 2247  ThinkPad T570
                17aa 382a  B51-80 Laptop
        9d32  CSI-2 Host Controller
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        9d35  Sunrise Point-LP Integrated Sensor Hub
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        9d3a  Sunrise Point-LP CSME HECI #1
                1025 115f  Acer Aspire E5-575G
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
                17aa 2247  ThinkPad T570
                17aa 382a  B51-80 Laptop
        9d3d  Sunrise Point-LP Active Management Technology - SOL
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
        9d43  Sunrise Point-LP LPC Controller
                17aa 382a  B51-80 Laptop
        9d46  LPC/eSPI Controller
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        9d48  Sunrise Point-LP LPC Controller
                1028 06dc  Latitude E7470
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
        9d4e  Sunrise Point LPC Controller/eSPI Controller
                17aa 225d  ThinkPad T480
        9d50  Sunrise Point LPC Controller
        9d60  Sunrise Point-LP Serial IO I2C Controller #0
                1025 115f  Acer Aspire E5-575G
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
                17aa 225d  ThinkPad T480
                8086 9d60  100 Series PCH/Sunrise Point PCH I2C0 [Skylake/Kaby Lake LPSS I2C]
        9d61  Sunrise Point-LP Serial IO I2C Controller #1
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        9d62  Sunrise Point-LP Serial IO I2C Controller #2
                1028 06d6  Latitude 7275 tablet
+               1028 06e6  Latitude 11 5175 2-in-1
        9d63  Sunrise Point-LP Serial IO I2C Controller #3
        9d64  Sunrise Point-LP Serial IO I2C Controller #4
        9d65  Sunrise Point-LP Serial IO I2C Controller #5
        9d70  Sunrise Point-LP HD Audio
                1028 06d6  Latitude 7275 tablet
                1028 06dc  Latitude E7470
+               1028 06e6  Latitude 11 5175 2-in-1
                1028 06f3  Latitude 3570
                103c 8079  EliteBook 840 G3
+               17aa 2247  ThinkPad T570
                17aa 382a  B51-80 Laptop
        9d71  Sunrise Point-LP HD Audio
                1025 1094  Acer Aspire E5-575G
        a0a9  Tiger Lake-LP Serial IO UART Controller #1
        a0ab  Tiger Lake-LP Serial IO SPI Controller #1
        a0b0  Tiger Lake-LP PCI Express Root Port #9
+       a0bd  Tigerlake PCH-LP PCI Express Root Port #6
        a0bf  Tiger Lake-LP PCI Express Root Port #8
        a0c5  Tiger Lake-LP Serial IO I2C Controller #4
        a0c6  Tiger Lake-LP Serial IO I2C Controller #5
        a379  Cannon Lake PCH Thermal Controller
                1028 0869  Vostro 3470
        a382  400 Series Chipset Family SATA AHCI Controller
+       a3a1  Memory controller
        a3a3  Comet Lake PCH-V SMBus Host Controller
+       a3af  Comet Lake PCH-V USB Controller
        a3b1  Comet Lake PCH-V Thermal Subsystem
        a620  6400/6402 Advanced Memory Buffer (AMB)
        abc0  Omni-Path Fabric Switch Silicon 100 Series
 8088  Beijing Wangxun Technology Co., Ltd.
        0101  WX1860A2 Gigabit Ethernet Controller
                8088 0201  Dual-Port Ethernet Network Adaptor SF200T
+               8088 4201  Dual-Port Ethernet Network Adaptor SF200T (WOL)
+               8088 8201  Dual-Port Ethernet Network Adaptor SF200T (NCSI)
+               8088 c201  Dual-Port Ethernet Network Adaptor SF200T (WOL, NCSI)
        0102  WX1860A2S Gigabit Ethernet Controller
                8088 0210  Dual-Port Ethernet Network Adaptor SF200T-S
        0103  WX1860A4 Gigabit Ethernet Controller
                8088 0401  Qual-Port Ethernet Network Adaptor SF400T
                8088 0440  Qual-Port Ethernet Network Adaptor SF400-OCP
+               8088 4103  Quad-Port Ethernet Network Adaptor SF400T (WOL)
+               8088 8103  Quad-Port Ethernet Network Adaptor SF400T (NCSI)
+               8088 c103  Quad-Port Ethernet Network Adaptor SF400T (WOL, NCSI)
        0104  WX1860A4S Gigabit Ethernet Controller
                8088 0410  Qual-Port Ethernet Network Adaptor SF400T-S
        0105  WX1860AL2 Gigabit Ethernet Controller
                8088 0202  Dual-Port Ethernet Network Adaptor SF200HT
+               8088 4202  Dual-Port Ethernet Network Adaptor SF200HT (WOL)
+               8088 8202  Dual-Port Ethernet Network Adaptor SF200HT (NCSI)
+               8088 c202  Dual-Port Ethernet Network Adaptor SF200HT (WOL, NCSI)
        0106  WX1860AL2S Gigabit Ethernet Controller
                8088 0220  Dual-Port Ethernet Network Adaptor SF200HT-S
        0107  WX1860AL4 Gigabit Ethernet Controller
                8088 0402  Qual-Port Ethernet Network Adaptor SF400HT
+               8088 4402  Quad-Port Ethernet Network Adaptor SF400HT (WOL)
+               8088 8402  Quad-Port Ethernet Network Adaptor SF400HT (NCSI)
+               8088 c402  Quad-Port Ethernet Network Adaptor SF400HT (WOL, NCSI)
        0108  WX1860AL4S Gigabit Ethernet Controller
                8088 0420  Qual-Port Ethernet Network Adaptor SF400HT-S
+       0109  WX1860-LC Gigabit Ethernet Controller
+       010a  WX1860A1 Gigabit Ethernet Controller
+# add new device ID
+       010b  WX1860AL1 Gigabit Ethernet Controller
+               8088 0102  Single-Port Ethernet Network Adaptor SF100HT
+               8088 4102  Single-Port Ethernet Network Adaptor SF100HT (WOL)
+               8088 8102  Single-Port Ethernet Network Adaptor SF100HT (NCSI)
+               8088 c102  Single-Port Ethernet Network Adaptor SF100HT (WOL, NCSI)
+       0111  WX1860A2 Ethernet Controller Virtual Function
+       0113  WX1860A4 Ethernet Controller Virtual Function
+       0115  WX1860AL2 Ethernet Controller Virtual Function
+       0117  WX1860AL4 Ethernet Controller Virtual Function
+       0119  WX1860-LC Gigabit Ethernet Controller Virtual Function
+       011a  WX1860A1 Gigabit Ethernet Controller Virtual Function
+       011b  WX1860AL1 Gigabit Ethernet Controller Virtual Function
+       1000  Ethernet Controller RP1000 Virtual Function for 10GbE SFP+
        1001  Ethernet Controller RP1000 for 10GbE SFP+
                8088 0000  Ethernet Network Adaptor RP1000 for 10GbE SFP+
+       2000  Ethernet Controller RP2000 Virtual Function for 10GbE SFP+
        2001  Ethernet Controller RP2000 for 10GbE SFP+
                8088 2000  Ethernet Network Adaptor RP2000 for 10GbE SFP+
 80ee  InnoTek Systemberatung GmbH
@@ -32952,7 +33331,7 @@ deda  XIMEA
        4021  MT camera
 e000  Winbond
        e000  W89C940
-e159  Tiger Jet Network Inc.
+e159  Tiger Jet Network Inc. / ICP DAS
        0001  Tiger3XX Modem/ISDN interface
                0059 0001  128k ISDN-S/T Adapter
                0059 0003  128k ISDN-U Adapter
@@ -32983,6 +33362,7 @@ ea01  Eagle Technology
        0046  PCI-766 Analog Output Card
        0052  PCI-703 Analog I/O Card
        0800  PCI-800 Digital I/O Card
+ea50  Emerson Automation Solutions
 # The main chip of all these devices is by Xilinx -> It could also be a Xilinx ID.
 ea60  RME
        9896  Digi32
index 797a79691ed88bea69d9b02809a0370f0b2abdd4..57e6ce27ed519114d017c0e80df2af2bc0556bdf 100644 (file)
  <tr class="odd"><td>MILCOTS</td><td>MLC</td><td>07/15/2020</td> </tr>
  <tr class="even"><td>NZXT (PNP same EDID)_</td><td>NXT</td><td>07/15/2020</td> </tr>
  <tr class="odd"><td>Unicompute Technology Co., Ltd.</td><td>UTC</td><td>10/19/2020</td> </tr>
+ <tr class="even"><td>TECHNOGYM S.p.A.</td><td>TGW</td><td>01/08/2021</td> </tr>
       </tbody>
     </table>
   </body>
index 02e2ef420927e14fd55a24b090bd010d04b95a86..5e28693d311d847040d32d2cccdc83b8fd77c7a2 100644 (file)
@@ -9,8 +9,8 @@
 #      The latest version can be obtained from
 #              http://www.linux-usb.org/usb.ids
 #
-# Version: 2020.08.26
-# Date:    2020-08-26 20:34:09
+# Version: 2021.01.29
+# Date:    2021-01-29 20:34:11
 #
 
 # Vendors, devices and interfaces. Please keep sorted.
        0155  5800 XpressMusic (Multimedia mode)
        0156  5800 XpressMusic (Storage mode)
        0157  5800 XpressMusic (Imaging mode)
+       0189  N810 Internet Tablet WiMAX
        0199  6700 Classic (msc)
        019a  6700 Classic (PC Suite)
        019b  6700 Classic (mtp)
        01b1  6303 classic Phone (Mass storage mode)
        01b2  6303 classic Phone (Printing and media mode)
        01c7  N900 (Storage Mode)
-       01c8  N900 (PC-Suite Mode)
+       01c8  N900/N950 (PC-Suite Mode)
        0228  5530 XpressMusic
        023a  6730 Classic
        026a  N97 (mass storage)
        03c1  C7-00 (Media transfer mode)
        03c2  Sim
        03cd  C7-00 (Nokia Suite mode)
-       03d1  N950
+       03d1  N950 (Storage Mode)
+       03d2  N950 (PC Suite mode)
        0400  7600 Phone Parent
        0401  6650 GSM Phone
        0402  6255 Phone Parent
        0423  6682 Phone Parent
        0428  6230i Modem
        0429  6230i MultiMedia Card
-       0431  770 Internet Tablet
+       0431  770/N800 Internet Tablet
        0432  N90 Phone Parent
        0435  E70 (IP Passthrough/RNDIS mode)
        0436  E60 (IP Passthrough/RNDIS mode)
        04f9  6300 (PC Suite mode)
        0508  E65 (PC Suite mode)
        0509  E65 (Storage mode)
-       0518  N9 Phone
+       0518  N9 (Storage mode)
+       0519  N9 (RNDIS/Ethernet mode)
+       051a  N9 (PC Suite mode)
        054d  C2-01
        0600  Digital Pen SU-1B
        0610  CS-15 (Internet Stick 3G modem)
 05fc  Harman
        0001  Soundcraft Si Multi Digital Card
        0010  Soundcraft Si MADI combo card
+       0021  Soundcraft Signature 12 MTK
        7849  Harman/Kardon SoundSticks
 05fd  InterAct, Inc.
        0239  SV-239 HammerHead Digital
 32b3  TEXA
        d1a6  TXT Multihub
        d1a7  TXT Multihub
+3310  MUDITA Sp. z o.o.
+       0100  Pure
+       0101  Pure tethering
 3333  InLine
        3333  2 port KVM switch model 60652K
 3334  AEI
index d3745ce52d64eaccf22a7719b43ed38881a689e1..33683144fa3fcc4beb88f695745f649f98794eb4 100644 (file)
         <term><option>-s</option></term>
         <term><option>--signal=</option></term>
 
-        <listitem><para>When used with <command>kill-session</command>
-        or <command>kill-user</command>, choose which signal to send
-        to selected processes. Must be one of the well known signal
-        specifiers, such as <constant>SIGTERM</constant>,
-        <constant>SIGINT</constant> or <constant>SIGSTOP</constant>.
-        If omitted, defaults to
-        <constant>SIGTERM</constant>.</para></listitem>
+        <listitem><para>When used with <command>kill-session</command> or <command>kill-user</command>,
+        choose which signal to send to selected processes. Must be one of the well known signal specifiers,
+        such as <constant>SIGTERM</constant>, <constant>SIGINT</constant> or <constant>SIGSTOP</constant>.
+        If omitted, defaults to <constant>SIGTERM</constant>.</para>
+
+        <para>The special value <literal>help</literal> will list the known values and the program will exit
+        immediately, and the special value <literal>list</literal> will list known values along with the
+        numerical signal numbers and the program will exit immediately.</para></listitem>
       </varlistentry>
 
       <varlistentry>
index 9026849559b57ba4c1f6380948a8d9fb7752e9ad..556fe309dc469a9a4e73a7a5e0043aa270e2ddbb 100644 (file)
         <option>all</option>.</para></listitem>
       </varlistentry>
 
-      <varlistentry>
-        <term><option>-s</option></term>
-        <term><option>--signal=</option></term>
-
-        <listitem><para>When used with <command>kill</command>, choose
-        which signal to send to selected processes. Must be one of the
-        well-known signal specifiers, such as
-        <constant>SIGTERM</constant>, <constant>SIGINT</constant> or
-        <constant>SIGSTOP</constant>. If omitted, defaults to
-        <constant>SIGTERM</constant>.</para></listitem>
-      </varlistentry>
+      <xi:include href="standard-options.xml" xpointer="signal" />
 
       <varlistentry>
          <term><option>--uid=</option></term>
index 9e64e58fe3d32bc8d4f657efd3c1fcb2c0d26081..2da0ff0579d529e723fe2ae5dadc20903b7bceec 100644 (file)
@@ -2470,6 +2470,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
       readonly s ManagedOOMMemoryPressure = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly u ManagedOOMMemoryPressureLimitPermyriad = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly s ManagedOOMPreference = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -2994,6 +2996,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
 
     <!--property ManagedOOMMemoryPressureLimitPermyriad is not documented!-->
 
+    <!--property ManagedOOMPreference is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -3558,6 +3562,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2eservice {
 
     <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMMemoryPressureLimitPermyriad"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMPreference"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -4224,6 +4230,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
       readonly s ManagedOOMMemoryPressure = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly u ManagedOOMMemoryPressureLimitPermyriad = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly s ManagedOOMPreference = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -4776,6 +4784,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
 
     <!--property ManagedOOMMemoryPressureLimitPermyriad is not documented!-->
 
+    <!--property ManagedOOMPreference is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -5338,6 +5348,8 @@ node /org/freedesktop/systemd1/unit/avahi_2ddaemon_2esocket {
 
     <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMMemoryPressureLimitPermyriad"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMPreference"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -5917,6 +5929,8 @@ node /org/freedesktop/systemd1/unit/home_2emount {
       readonly s ManagedOOMMemoryPressure = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly u ManagedOOMMemoryPressureLimitPermyriad = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly s ManagedOOMPreference = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -6397,6 +6411,8 @@ node /org/freedesktop/systemd1/unit/home_2emount {
 
     <!--property ManagedOOMMemoryPressureLimitPermyriad is not documented!-->
 
+    <!--property ManagedOOMPreference is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -6877,6 +6893,8 @@ node /org/freedesktop/systemd1/unit/home_2emount {
 
     <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMMemoryPressureLimitPermyriad"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMPreference"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -7577,6 +7595,8 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
       readonly s ManagedOOMMemoryPressure = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly u ManagedOOMMemoryPressureLimitPermyriad = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly s ManagedOOMPreference = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly as Environment = ['...', ...];
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -8043,6 +8063,8 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
 
     <!--property ManagedOOMMemoryPressureLimitPermyriad is not documented!-->
 
+    <!--property ManagedOOMPreference is not documented!-->
+
     <!--property EnvironmentFiles is not documented!-->
 
     <!--property PassEnvironment is not documented!-->
@@ -8509,6 +8531,8 @@ node /org/freedesktop/systemd1/unit/dev_2dsda3_2eswap {
 
     <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMMemoryPressureLimitPermyriad"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMPreference"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="Environment"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="EnvironmentFiles"/>
@@ -9062,6 +9086,8 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
       readonly s ManagedOOMMemoryPressure = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly u ManagedOOMMemoryPressureLimitPermyriad = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly s ManagedOOMPreference = '...';
   };
   interface org.freedesktop.DBus.Peer { ... };
   interface org.freedesktop.DBus.Introspectable { ... };
@@ -9198,6 +9224,8 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
 
     <!--property ManagedOOMMemoryPressureLimitPermyriad is not documented!-->
 
+    <!--property ManagedOOMPreference is not documented!-->
+
     <!--Autogenerated cross-references for systemd.directives, do not edit-->
 
     <variablelist class="dbus-interface" generated="True" extra-ref="org.freedesktop.systemd1.Unit"/>
@@ -9338,6 +9366,8 @@ node /org/freedesktop/systemd1/unit/system_2eslice {
 
     <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMMemoryPressureLimitPermyriad"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMPreference"/>
+
     <!--End of Autogenerated section-->
 
     <refsect2>
@@ -9497,6 +9527,8 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
       readonly s ManagedOOMMemoryPressure = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
       readonly u ManagedOOMMemoryPressureLimitPermyriad = ...;
+      @org.freedesktop.DBus.Property.EmitsChangedSignal("false")
+      readonly s ManagedOOMPreference = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
       readonly s KillMode = '...';
       @org.freedesktop.DBus.Property.EmitsChangedSignal("const")
@@ -9649,6 +9681,8 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
 
     <!--property ManagedOOMMemoryPressureLimitPermyriad is not documented!-->
 
+    <!--property ManagedOOMPreference is not documented!-->
+
     <!--property KillMode is not documented!-->
 
     <!--property KillSignal is not documented!-->
@@ -9815,6 +9849,8 @@ node /org/freedesktop/systemd1/unit/session_2d1_2escope {
 
     <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMMemoryPressureLimitPermyriad"/>
 
+    <variablelist class="dbus-property" generated="True" extra-ref="ManagedOOMPreference"/>
+
     <variablelist class="dbus-property" generated="True" extra-ref="KillMode"/>
 
     <variablelist class="dbus-property" generated="True" extra-ref="KillSignal"/>
index 3653207d727ec6fc5c18a79e8a6d368e3ad3653c..bd0c9e0573b610c3abcb742dde10c4c507502237 100644 (file)
         to be used in case the unit names do not match the image name as described in the <command>attach</command>.</para>
       </varlistentry>
 
+      <varlistentry>
+        <term><command>reattach</command> <replaceable>IMAGE</replaceable> [<replaceable>PREFIX…</replaceable>]</term>
+
+        <listitem><para>Detaches an existing portable service image from the host, and immediately attaches it again.
+        This is useful in case the image was replaced. Running units are not stopped during the process. Partial matching,
+        to allow for different versions in the image name, is allowed: only the part before the first <literal>_</literal>
+        character has to match. If the new image doesn't exist, the existing one will not be detached. The parameters
+        follow the same syntax as the <command>attach</command> command.</para></listitem>
+
+        <para>If <option>--now</option> and/or <option>--enable</option> are passed, the portable service(s) are
+        immediately stopped if removed, started and/or enabled if added, or restarted if updated. Prefixes are also
+        accepted, in the same way as described in the <command>attach</command> case.</para>
+      </varlistentry>
+
       <varlistentry>
         <term><command>inspect</command> <replaceable>IMAGE</replaceable> [<replaceable>PREFIX…</replaceable>]</term>
 
       <varlistentry>
         <term><option>--now</option></term>
 
-        <listitem><para>Immediately start/stop the portable service after attaching/before detaching.</para></listitem>
+        <listitem><para>Immediately start/stop/restart the portable service after attaching/before
+        detaching/after upgrading.</para></listitem>
       </varlistentry>
 
       <varlistentry>
index fb6cae7b9b6a6bd447c3afdfe02381ddbacaf6d3..7662349cc54b45acf92e707e70479d7284526dd0 100644 (file)
         returned.</para></listitem>
       </varlistentry>
 
+      <varlistentry>
+        <term><option>--validate=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
+        (the default), DNSSEC validation is applied as usual â€” under the condition that it is enabled for the
+        network and for <filename>systemd-resolved.service</filename> as a whole. If false, DNSSEC validation
+        is disabled for the specific query, regardless of whether it is enabled for the network or in the
+        service. Note that setting this option to true does not force DNSSEC validation on systems/networks
+        where DNSSEC is turned off. This option is only suitable to turn off such validation where otherwise
+        enabled, not enable validation where otherwise disabled.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--synthesize=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
+        (the default), select domains are resolved on the local system, among them
+        <literal>localhost</literal> and <literal>_gateway</literal> or entries from
+        <filename>/etc/hosts</filename>. If false these domains are not resolved locally, and either fail (in
+        case of <literal>localhost</literal> or <literal>_gateway</literal> and suchlike) or go to the
+        network via regular DNS/mDNS/LLMNR lookups (in case of <filename>/etc/hosts</filename>
+        entries).</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--cache=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
+        (the default), lookups use the local DNS resource record cache. If false, lookups are routed to the
+        network instead, regardless if already available in the local cache.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--zone=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
+        (the default), lookups are answered from locally registered LLMNR or mDNS resource records, if
+        defined. If false, locally registered LLMNR/mDNS records are not considered for the lookup
+        request.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--trust-anchor=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
+        (the default), lookups for DS and DNSKEY are answered from the local DNSSEC trust anchors if
+        possible. If false, the local trust store is not considered for the lookup request.</para></listitem>
+      </varlistentry>
+
+      <varlistentry>
+        <term><option>--network=</option><replaceable>BOOL</replaceable></term>
+
+        <listitem><para>Takes a boolean parameter; used in conjunction with <command>query</command>. If true
+        (the default), lookups are answered via DNS, LLMNR or mDNS network requests if they cannot be
+        synthesized locally, or be answered from the local cache, zone or trust anchors (see above). If false,
+        the request is not answered from the network and will thus fail if none of the indicated sources can
+        answer them.</para></listitem>
+      </varlistentry>
+
       <varlistentry>
         <term><option>--search=</option><replaceable>BOOL</replaceable></term>
 
index 8ba5b09df85f291e4f0803b034085e5e3e1b8494..4565a43b2449966b413eb585a8829a710273b054 100644 (file)
     (for a pretty version of the same, with indentation and line breaks) or <literal>off</literal> (to turn
     off JSON output, the default).</para></listitem>
   </varlistentry>
+
+  <varlistentry id='signal'>
+    <term><option>-s</option></term>
+    <term><option>--signal=</option></term>
+
+    <listitem>
+      <para>When used with <command>kill</command>, choose which signal to send to selected processes. Must
+      be one of the well-known signal specifiers such as <constant>SIGTERM</constant>,
+      <constant>SIGINT</constant> or <constant>SIGSTOP</constant>. If omitted, defaults to
+      <option>SIGTERM</option>.</para>
+
+      <para>The special value <literal>help</literal> will list the known values and the program will exit
+      immediately, and the special value <literal>list</literal> will list known values along with the
+      numerical signal numbers and the program will exit immediately.</para>
+    </listitem>
+  </varlistentry>
 </variablelist>
index 642a5ecf2d15df446780c10b1082e7d4c7a70d79..be414ebb1e47d80aa6cdad38729fcbff8b4f3c8c 100644 (file)
@@ -2067,21 +2067,9 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
           is defined. If omitted, defaults to
           <option>all</option>.</para>
         </listitem>
-
       </varlistentry>
 
-      <varlistentry>
-        <term><option>-s</option></term>
-        <term><option>--signal=</option></term>
-
-        <listitem>
-          <para>When used with <command>kill</command>, choose which
-          signal to send to selected processes. Must be one of the
-          well-known signal specifiers such as <constant>SIGTERM</constant>, <constant>SIGINT</constant> or
-          <constant>SIGSTOP</constant>. If omitted, defaults to
-          <option>SIGTERM</option>.</para>
-        </listitem>
-      </varlistentry>
+      <xi:include href="standard-options.xml" xpointer="signal" />
 
       <varlistentry>
         <term><option>--what=</option></term>
index 606a2dd5dbbf637f9b3a7af9e13616c25fffdfda..7cf1da6ce5e3b3ca187034778648fbbbd5a26597 100644 (file)
@@ -1926,6 +1926,13 @@ IPv6Token=prefixstable:2002:da8:1::</programlisting></para>
           </listitem>
         </varlistentry>
 
+        <varlistentry>
+          <term><varname>UseFQDN=</varname></term>
+          <listitem>
+            <para>Equivalent of <varname>UseHostname=</varname> in the [DHCPv4] section.</para>
+          </listitem>
+        </varlistentry>
+
         <varlistentry>
           <term><varname>RouteMetric=</varname></term>
           <listitem>
index be9c35057db955878b0a1b3e729583535d66aeb6..6d15540377b541eb1890791aaa8169eafc87104f 100644 (file)
@@ -913,6 +913,38 @@ DeviceAllow=/dev/loop-control
           </para>
         </listitem>
       </varlistentry>
+
+      <varlistentry>
+        <term><varname>ManagedOOMPreference=none|avoid|omit</varname></term>
+
+        <listitem>
+          <para>Allows deprioritizing or omitting this unit's cgroup as a candidate when <command>systemd-oomd</command>
+          needs to act. Requires support for extended attributes (see
+          <citerefentry project='man-pages'><refentrytitle>xattr</refentrytitle><manvolnum>7</manvolnum></citerefentry>)
+          in order to use <option>avoid</option> or <option>omit</option>. Additionally, <command>systemd-oomd</command>
+          will ignore these extended attributes if the unit's cgroup is not owned by the root user.</para>
+
+          <para>If this property is set to <option>avoid</option>, the service manager will set the
+          "user.oomd_avoid" extended attribute on the unit's cgroup to "1". If <command>systemd-oomd</command> sees
+          this extended attribute on a cgroup set to "1" when choosing between candidates, it will only select the
+          cgroup with "user.oomd_avoid" if there are no other viable candidates.</para>
+
+          <para>If this property is set to <option>omit</option>, the service manager will set the "user.oomd_omit"
+          extended attribute on the unit's cgroup to "1". If <command>systemd-oomd</command> sees the this extended
+          attribute on the cgroup set to "1", it will ignore the cgroup as a candidate and will not perform any actions
+          on the cgroup.</para>
+
+          <para>It is recommended to use <option>avoid</option> and <option>omit</option> sparingly as it can adversely
+          affect <command>systemd-oomd</command>'s kill behavior. Also note that these extended attributes are not
+          applied recursively to cgroups under this unit's cgroup.</para>
+
+          <para>Defaults to <option>none</option> which means no extended attributes will be set and systemd-oomd will
+          sort this unit's cgroup as defined in
+          <citerefentry><refentrytitle>systemd-oomd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
+          and <citerefentry><refentrytitle>oomd.conf</refentrytitle><manvolnum>5</manvolnum></citerefentry> (if this
+          unit's cgroup becomes a candidate).</para>
+        </listitem>
+      </varlistentry>
     </variablelist>
   </refsect1>
 
index 35b4f2c6dc54cf0fff1e901ad5a4ebd8657f5811..50b357f8df9e84418c68014a0a10fc00ecbcd894 100644 (file)
@@ -110,7 +110,7 @@ KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DAT
   IMPORT{builtin}="blkid --noraid"
 
 # probe filesystem metadata of disks
-KERNEL!="sr*", IMPORT{builtin}="blkid"
+KERNEL!="sr*|mmcblk[0-9]boot[0-9]", IMPORT{builtin}="blkid"
 
 # by-label/by-uuid links (filesystem metadata)
 ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}"
index aef863b02012c555cee7675aa12381cd425db01d..5fc11fdbd289acdbbbf28075c47274d986c57408 100644 (file)
@@ -40,7 +40,7 @@ _coredumpctl() {
     local cur=${COMP_WORDS[COMP_CWORD]} prev=${COMP_WORDS[COMP_CWORD-1]}
     local OPTS='-h --help --version --no-pager --no-legend -o --output -F --field -1
                 -r --reverse -S --since -U --until -D --directory -q --quiet --debugger
-                -A --debugger-arguments'
+                -A --debugger-arguments --json -n'
 
     local -A VERBS=(
         [LIST]='list info'
@@ -58,6 +58,8 @@ _coredumpctl() {
         compopt -o filenames
     elif __contains_word "$prev" '--field -F'; then
         comps=$( compgen -W '${__journal_fields[*]}' -- "$cur" )
+    elif __contains_word "$prev" '--json'; then
+        comps=$( compgen -W 'pretty short off' -- "$cur" )
     elif [[ $cur = -* ]]; then
         comps=${OPTS}
     elif __contains_word "$prev" ${VERBS[*]} &&
index ac85519c1088963b2645b25359d7bf7c5a6d9177..f94f191d89e7f8d21396b3b56ec941aac0d73391 100644 (file)
@@ -43,7 +43,7 @@ _loginctl () {
         [STANDALONE]='--all -a --help -h --no-pager --version
                       --no-legend --no-ask-password -l --full --value'
         [ARG]='--host -H --kill-who --property -p --signal -s -M --machine
-                      -n --lines -o --output'
+                      -n --lines -o --output -P'
     )
 
     if __contains_word "$prev" ${OPTS[ARG]}; then
@@ -61,7 +61,7 @@ _loginctl () {
             --machine|-M)
                 comps=$( __get_machines )
                 ;;
-            --property|-p)
+            --property|-p|-P)
                 comps=''
                 ;;
             --output|-o)
index fe3d925d783eb9b3bcb37033e3e5f2568037629b..e18d04c7ea85d3a1e870c72f0e5b109ce5c8604b 100644 (file)
@@ -40,7 +40,7 @@ _portablectl() {
 
     local -A VERBS=(
         [STANDALONE]='list'
-        [IMAGE]='attach detach inspect is-attached set-limit'
+        [IMAGE]='attach detach reattach inspect is-attached set-limit'
         [IMAGES]='remove'
         [IMAGE_WITH_BOOL]='read-only'
     )
index bb20a12294d5406ed963c291013d1185fa2e7485..3c59ca5e10607be3b0886cd247941dcab4b5d1ad 100644 (file)
@@ -635,6 +635,20 @@ int cg_get_xattr_malloc(const char *controller, const char *path, const char *na
         return r;
 }
 
+int cg_get_xattr_bool(const char *controller, const char *path, const char *name) {
+        _cleanup_free_ char *val = NULL;
+        int r;
+
+        assert(path);
+        assert(name);
+
+        r = cg_get_xattr_malloc(controller, path, name, &val);
+        if (r < 0)
+                return r;
+
+        return parse_boolean(val);
+}
+
 int cg_remove_xattr(const char *controller, const char *path, const char *name) {
         _cleanup_free_ char *fs = NULL;
         int r;
@@ -1703,6 +1717,25 @@ int cg_get_attribute_as_bool(const char *controller, const char *path, const cha
         return 0;
 }
 
+int cg_get_owner(const char *controller, const char *path, uid_t *ret_uid) {
+        _cleanup_free_ char *f = NULL;
+        struct stat stats;
+        int r;
+
+        assert(ret_uid);
+
+        r = cg_get_path(controller, path, NULL, &f);
+        if (r < 0)
+                return r;
+
+        r = stat(f, &stats);
+        if (r < 0)
+                return -errno;
+
+        *ret_uid = stats.st_uid;
+        return 0;
+}
+
 int cg_get_keyed_attribute_full(
                 const char *controller,
                 const char *path,
@@ -2185,3 +2218,11 @@ static const char* const managed_oom_mode_table[_MANAGED_OOM_MODE_MAX] = {
 };
 
 DEFINE_STRING_TABLE_LOOKUP(managed_oom_mode, ManagedOOMMode);
+
+static const char* const managed_oom_preference_table[_MANAGED_OOM_PREFERENCE_MAX] = {
+        [MANAGED_OOM_PREFERENCE_NONE] = "none",
+        [MANAGED_OOM_PREFERENCE_AVOID] = "avoid",
+        [MANAGED_OOM_PREFERENCE_OMIT] = "omit",
+};
+
+DEFINE_STRING_TABLE_LOOKUP(managed_oom_preference, ManagedOOMPreference);
index c5f54aafea7962abe7c3a87c506847575b5c041d..420ddb59c0c507df915af58270b0af0c90d14d93 100644 (file)
@@ -212,10 +212,13 @@ int cg_get_attribute_as_uint64(const char *controller, const char *path, const c
 int cg_get_attribute_as_bool(const char *controller, const char *path, const char *attribute, bool *ret);
 
 int cg_set_access(const char *controller, const char *path, uid_t uid, gid_t gid);
+int cg_get_owner(const char *controller, const char *path, uid_t *ret_uid);
 
 int cg_set_xattr(const char *controller, const char *path, const char *name, const void *value, size_t size, int flags);
 int cg_get_xattr(const char *controller, const char *path, const char *name, void *value, size_t size);
 int cg_get_xattr_malloc(const char *controller, const char *path, const char *name, char **ret);
+/* Returns negative on error, and 0 or 1 on success for the bool value */
+int cg_get_xattr_bool(const char *controller, const char *path, const char *name);
 int cg_remove_xattr(const char *controller, const char *path, const char *name);
 
 int cg_install_release_agent(const char *controller, const char *agent);
@@ -288,3 +291,14 @@ typedef enum ManagedOOMMode {
 
 const char* managed_oom_mode_to_string(ManagedOOMMode m) _const_;
 ManagedOOMMode managed_oom_mode_from_string(const char *s) _pure_;
+
+typedef enum ManagedOOMPreference {
+        MANAGED_OOM_PREFERENCE_NONE = 0,
+        MANAGED_OOM_PREFERENCE_AVOID = 1,
+        MANAGED_OOM_PREFERENCE_OMIT = 2,
+        _MANAGED_OOM_PREFERENCE_MAX,
+        _MANAGED_OOM_PREFERENCE_INVALID = -1
+} ManagedOOMPreference;
+
+const char* managed_oom_preference_to_string(ManagedOOMPreference a) _const_;
+ManagedOOMPreference managed_oom_preference_from_string(const char *s) _pure_;
index 5aeddef7e2dfae4ada90b6b4ff8c862df7718f1d..8e8d5f1d0b594485f9ab5b00ce5f8c00e41d61dd 100644 (file)
@@ -290,8 +290,11 @@ bool is_efi_boot(void) {
         if (cache < 0) {
                 if (detect_container() > 0)
                         cache = false;
-                else
+                else {
                         cache = access("/sys/firmware/efi/", F_OK) >= 0;
+                        if (!cache && errno != ENOENT)
+                                log_debug_errno(errno, "Unable to test whether /sys/firmware/efi/ exists, assuming EFI not available: %m");
+                }
         }
 
         return cache;
index f58e0348ba76d77084904c5e4c7e2c05fe60f612..93261e675e2ff4009c3569af30027db001341f7d 100644 (file)
@@ -98,7 +98,6 @@ static int add_locales_from_archive(Set *locales) {
         _cleanup_close_ int fd = -1;
         size_t sz = 0;
         struct stat st;
-        size_t i;
         int r;
 
         fd = open("/usr/lib/locale/locale-archive", O_RDONLY|O_NOCTTY|O_CLOEXEC);
@@ -129,7 +128,7 @@ static int add_locales_from_archive(Set *locales) {
         }
 
         e = (const struct namehashent*) ((const uint8_t*) p + h->namehash_offset);
-        for (i = 0; i < h->namehash_size; i++) {
+        for (size_t i = 0; i < h->namehash_size; i++) {
                 char *z;
 
                 if (e[i].locrec_offset == 0)
@@ -434,12 +433,10 @@ const char *special_glyph(SpecialGlyph code) {
 }
 
 void locale_variables_free(char *l[_VARIABLE_LC_MAX]) {
-        LocaleVariable i;
-
         if (!l)
                 return;
 
-        for (i = 0; i < _VARIABLE_LC_MAX; i++)
+        for (LocaleVariable i = 0; i < _VARIABLE_LC_MAX; i++)
                 l[i] = mfree(l[i]);
 }
 
index d87a6a7193bf55ad7246ed22fcdcc24542e30b79..44df37b37e878b12bc926d66e28332ee0e649b27 100644 (file)
@@ -42,7 +42,7 @@
 #    warning "bpf() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_bpf && __NR_bpf >= 0
 #    if defined systemd_NR_bpf
 assert_cc(__NR_bpf == systemd_NR_bpf);
@@ -98,7 +98,7 @@ assert_cc(__NR_bpf == systemd_NR_bpf);
 #    warning "close_range() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_close_range && __NR_close_range >= 0
 #    if defined systemd_NR_close_range
 assert_cc(__NR_close_range == systemd_NR_close_range);
@@ -154,7 +154,7 @@ assert_cc(__NR_close_range == systemd_NR_close_range);
 #    warning "copy_file_range() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_copy_file_range && __NR_copy_file_range >= 0
 #    if defined systemd_NR_copy_file_range
 assert_cc(__NR_copy_file_range == systemd_NR_copy_file_range);
@@ -210,7 +210,7 @@ assert_cc(__NR_copy_file_range == systemd_NR_copy_file_range);
 #    warning "getrandom() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_getrandom && __NR_getrandom >= 0
 #    if defined systemd_NR_getrandom
 assert_cc(__NR_getrandom == systemd_NR_getrandom);
@@ -266,7 +266,7 @@ assert_cc(__NR_getrandom == systemd_NR_getrandom);
 #    warning "memfd_create() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_memfd_create && __NR_memfd_create >= 0
 #    if defined systemd_NR_memfd_create
 assert_cc(__NR_memfd_create == systemd_NR_memfd_create);
@@ -322,7 +322,7 @@ assert_cc(__NR_memfd_create == systemd_NR_memfd_create);
 #    warning "name_to_handle_at() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_name_to_handle_at && __NR_name_to_handle_at >= 0
 #    if defined systemd_NR_name_to_handle_at
 assert_cc(__NR_name_to_handle_at == systemd_NR_name_to_handle_at);
@@ -378,7 +378,7 @@ assert_cc(__NR_name_to_handle_at == systemd_NR_name_to_handle_at);
 #    warning "pidfd_open() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_pidfd_open && __NR_pidfd_open >= 0
 #    if defined systemd_NR_pidfd_open
 assert_cc(__NR_pidfd_open == systemd_NR_pidfd_open);
@@ -434,7 +434,7 @@ assert_cc(__NR_pidfd_open == systemd_NR_pidfd_open);
 #    warning "pidfd_send_signal() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_pidfd_send_signal && __NR_pidfd_send_signal >= 0
 #    if defined systemd_NR_pidfd_send_signal
 assert_cc(__NR_pidfd_send_signal == systemd_NR_pidfd_send_signal);
@@ -490,7 +490,7 @@ assert_cc(__NR_pidfd_send_signal == systemd_NR_pidfd_send_signal);
 #    warning "pkey_mprotect() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_pkey_mprotect && __NR_pkey_mprotect >= 0
 #    if defined systemd_NR_pkey_mprotect
 assert_cc(__NR_pkey_mprotect == systemd_NR_pkey_mprotect);
@@ -546,7 +546,7 @@ assert_cc(__NR_pkey_mprotect == systemd_NR_pkey_mprotect);
 #    warning "renameat2() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_renameat2 && __NR_renameat2 >= 0
 #    if defined systemd_NR_renameat2
 assert_cc(__NR_renameat2 == systemd_NR_renameat2);
@@ -602,7 +602,7 @@ assert_cc(__NR_renameat2 == systemd_NR_renameat2);
 #    warning "setns() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_setns && __NR_setns >= 0
 #    if defined systemd_NR_setns
 assert_cc(__NR_setns == systemd_NR_setns);
@@ -658,7 +658,7 @@ assert_cc(__NR_setns == systemd_NR_setns);
 #    warning "statx() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_statx && __NR_statx >= 0
 #    if defined systemd_NR_statx
 assert_cc(__NR_statx == systemd_NR_statx);
index d1991f0de30642e4bf8eed7dc8e68ac4fe9c8025..746fbf4a26055844d8f00292ecd45db76b377072 100644 (file)
@@ -33,7 +33,7 @@ def parse_syscall_table(filename):
             yield items[0], int(items[1])
 
 def parse_syscall_tables(filenames):
-    return {filename.split('-')[-1]: parse_syscall_table(filename)
+    return {filename.split('-')[-1][:-4]: parse_syscall_table(filename)
             for filename in filenames}
 
 DEF_TEMPLATE = '''\
@@ -78,7 +78,7 @@ DEF_TEMPLATE = '''\
 #    warning "{syscall}() syscall number is unknown for your architecture"
 #  endif
 
-/* may be (invalid) negative number due to libseccomp, see PR 13319 */
+/* may be an (invalid) negative number due to libseccomp, see PR 13319 */
 #  if defined __NR_{syscall} && __NR_{syscall} >= 0
 #    if defined systemd_NR_{syscall}
 assert_cc(__NR_{syscall} == systemd_NR_{syscall});
index f7498d012568538681e51cb60435232270b1d608..f3398418c4f22b991b7fd0537ade711079c97a08 100644 (file)
@@ -752,38 +752,6 @@ int fsck_exists(const char *fstype) {
         return executable_is_good(checker);
 }
 
-int parse_path_argument_and_warn(const char *path, bool suppress_root, char **arg) {
-        char *p;
-        int r;
-
-        /*
-         * This function is intended to be used in command line
-         * parsers, to handle paths that are passed in. It makes the
-         * path absolute, and reduces it to NULL if omitted or
-         * root (the latter optionally).
-         *
-         * NOTE THAT THIS WILL FREE THE PREVIOUS ARGUMENT POINTER ON
-         * SUCCESS! Hence, do not pass in uninitialized pointers.
-         */
-
-        if (isempty(path)) {
-                *arg = mfree(*arg);
-                return 0;
-        }
-
-        r = path_make_absolute_cwd(path, &p);
-        if (r < 0)
-                return log_error_errno(r, "Failed to parse path \"%s\" and make it absolute: %m", path);
-
-        path_simplify(p, false);
-        if (suppress_root && empty_or_root(p))
-                p = mfree(p);
-
-        free_and_replace(*arg, p);
-
-        return 0;
-}
-
 char* dirname_malloc(const char *path) {
         char *d, *dir, *dir2;
 
index e7a26c9a843215cc643fff17e61af6fe36a3fd8f..ba12b03dbe6d70323c401f1a3e5be4b8f6c53512 100644 (file)
@@ -144,8 +144,6 @@ int fsck_exists(const char *fstype);
                 _ret;                                                   \
         })
 
-int parse_path_argument_and_warn(const char *path, bool suppress_root, char **arg);
-
 char* dirname_malloc(const char *path);
 const char *last_path_component(const char *path);
 int path_extract_filename(const char *p, char **ret);
index c831f06dacf3790ca48ae2b2034ec0e7645cbfcd..eca818757170a4ce40a79ab02797e6703b4448ad 100644 (file)
@@ -494,3 +494,22 @@ int random_write_entropy(int fd, const void *seed, size_t size, bool credit) {
 
         return 1;
 }
+
+int random_u64_range(uint64_t m) {
+        uint64_t x, remainder;
+
+        /* Generates a random number in the range 0…m-1, unbiased. (Java's algorithm) */
+
+        if (m == 0) /* Let's take m == 0 as special case to return an integer from the full range */
+                return random_u64();
+        if (m == 1)
+                return 0;
+
+        remainder = UINT64_MAX % m;
+
+        do {
+                x = random_u64();
+        } while (x >= UINT64_MAX - remainder);
+
+        return x % m;
+}
index f661fc093aef703ff522504a85b1e2d08bad8cab..1d5fb60fa24674fbfbe8de7e42359be8d97a9f53 100644 (file)
@@ -40,3 +40,5 @@ int rdrand(unsigned long *ret);
 size_t random_pool_size(void);
 
 int random_write_entropy(int fd, const void *seed, size_t size, bool credit);
+
+int random_u64_range(uint64_t max);
index e01ffdb0744fc01338fd1d980e8ee475679f1075..23d108d5df397affe43ad0246258289cc2f654df 100644 (file)
@@ -43,6 +43,8 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) {
             fixed.rlim_max == highest.rlim_max)
                 return 0;
 
+        log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", rlim->rlim_max, rlimit_to_string(resource), fixed.rlim_max);
+
         if (setrlimit(resource, &fixed) < 0)
                 return -errno;
 
index c04f8be05bbfa8bd8a72fc4e7be9e556a77ec032..331295c2c509d1e1c3720842e5929efc01e668c4 100644 (file)
@@ -198,7 +198,7 @@ static const char *const __signal_table[] = {
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP(__signal, int);
 
 const char *signal_to_string(int signo) {
-        static thread_local char buf[STRLEN("RTMIN+") + DECIMAL_STR_MAX(int) + 1];
+        static thread_local char buf[STRLEN("RTMIN+") + DECIMAL_STR_MAX(int)];
         const char *name;
 
         name = __signal_to_string(signo);
index 5caedacb011d1df1672db1d35998dea06c9a8b23..97c1adc07d94df44949e58460d6e7cf141ca2299 100644 (file)
@@ -81,12 +81,15 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k
 
 #define DEFINE_STRING_TABLE_LOOKUP(name,type) _DEFINE_STRING_TABLE_LOOKUP(name,type,)
 #define DEFINE_STRING_TABLE_LOOKUP_TO_STRING(name,type) _DEFINE_STRING_TABLE_LOOKUP_TO_STRING(name,type,)
+#define DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type) _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type,)
 #define DEFINE_PRIVATE_STRING_TABLE_LOOKUP(name,type) _DEFINE_STRING_TABLE_LOOKUP(name,type,static)
 #define DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(name,type) _DEFINE_STRING_TABLE_LOOKUP_TO_STRING(name,type,static)
 #define DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(name,type) _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(name,type,static)
 
 #define DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(name,type,yes) _DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(name,type,yes,)
 #define DEFINE_PRIVATE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(name,type,yes) _DEFINE_STRING_TABLE_LOOKUP_WITH_BOOLEAN(name,type,yes,static)
+#define DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(name,type,yes) \
+        _DEFINE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(name,type,yes,static)
 
 /* For string conversions where numbers are also acceptable */
 #define DEFINE_STRING_TABLE_LOOKUP_WITH_FALLBACK(name,type,max)         \
@@ -100,9 +103,8 @@ ssize_t string_table_lookup(const char * const *table, size_t len, const char *k
 
 #define DUMP_STRING_TABLE(name,type,max)                                \
         do {                                                            \
-                type _k;                                                \
                 flockfile(stdout);                                      \
-                for (_k = 0; _k < (max); _k++) {                        \
+                for (type _k = 0; _k < (max); _k++) {                   \
                         const char *_t;                                 \
                         _t = name##_to_string(_k);                      \
                         if (!_t)                                        \
index 3383d1afadfc0d1fa52a51a623de8b20aae1a9f6..236fc64a8f308cc999c2057e759d59aaad92fd77 100644 (file)
@@ -354,10 +354,16 @@ int unit_file_build_name_map(
 
                                 /* 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 destination directly.
+                                 * 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) {
+                                if (!tail) {
+                                        log_debug("%s: linked unit file: %s â†’ %s",
+                                                  __func__, filename, simplified);
+
+                                        dst = filename;
+                                } else {
+
                                         bool self_alias;
 
                                         dst = basename(simplified);
@@ -380,10 +386,6 @@ int unit_file_build_name_map(
                                         }
 
                                         log_debug("%s: alias: %s/%s â†’ %s", __func__, *dir, de->d_name, dst);
-                                } else {
-                                        dst  = simplified;
-
-                                        log_debug("%s: linked unit file: %s/%s â†’ %s", __func__, *dir, de->d_name, dst);
                                 }
 
                         } else {
index 02e7fbf1f72fe7456645d5259610f86e138e5dc7..6160b852dc6b9366783667cae684279e615a71e5 100644 (file)
@@ -9,6 +9,7 @@
 #include <unistd.h>
 
 #include "alloc-util.h"
+#include "cgroup-util.h"
 #include "dirent-util.h"
 #include "env-util.h"
 #include "fd-util.h"
@@ -453,6 +454,100 @@ static const char *const container_table[_VIRTUALIZATION_MAX] = {
 
 DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(container, int);
 
+static int running_in_cgroupns(void) {
+        int r;
+
+        if (!cg_ns_supported())
+                return false;
+
+        r = cg_all_unified();
+        if (r < 0)
+                return r;
+
+        if (r) {
+                /* cgroup v2 */
+
+                r = access("/sys/fs/cgroup/cgroup.events", F_OK);
+                if (r < 0) {
+                        if (errno != ENOENT)
+                                return -errno;
+                        /* All kernel versions have cgroup.events in nested cgroups. */
+                        return false;
+                }
+
+                /* There's no cgroup.type in the root cgroup, and future kernel versions
+                 * are unlikely to add it since cgroup.type is something that makes no sense
+                 * whatsoever in the root cgroup. */
+                r = access("/sys/fs/cgroup/cgroup.type", F_OK);
+                if (r == 0)
+                        return true;
+                if (r < 0 && errno != ENOENT)
+                        return -errno;
+
+                /* On older kernel versions, there's no cgroup.type */
+                r = access("/sys/kernel/cgroup/features", F_OK);
+                if (r < 0) {
+                        if (errno != ENOENT)
+                                return -errno;
+                        /* This is an old kernel that we know for sure has cgroup.events
+                         * only in nested cgroups. */
+                        return true;
+                }
+
+                /* This is a recent kernel, and cgroup.type doesn't exist, so we must be
+                 * in the root cgroup. */
+                return false;
+        } else {
+                /* cgroup v1 */
+
+                /* If systemd controller is not mounted, do not even bother. */
+                r = access("/sys/fs/cgroup/systemd", F_OK);
+                if (r < 0) {
+                        if (errno != ENOENT)
+                                return -errno;
+                        return false;
+                }
+
+                /* release_agent only exists in the root cgroup. */
+                r = access("/sys/fs/cgroup/systemd/release_agent", F_OK);
+                if (r < 0) {
+                        if (errno != ENOENT)
+                                return -errno;
+                        return true;
+                }
+
+                return false;
+        }
+}
+
+static int detect_container_files(void) {
+        unsigned i;
+
+        static const struct {
+                const char *file_path;
+                int id;
+        } container_file_table[] = {
+                /* https://github.com/containers/podman/issues/6192 */
+                /* https://github.com/containers/podman/issues/3586#issuecomment-661918679 */
+                { "/run/.containerenv", VIRTUALIZATION_PODMAN },
+                /* https://github.com/moby/moby/issues/18355 */
+                /* Docker must be the last in this table, see below. */
+                { "/.dockerenv",        VIRTUALIZATION_DOCKER },
+        };
+
+        for (i = 0; i < ELEMENTSOF(container_file_table); i++) {
+                if (access(container_file_table[i].file_path, F_OK) >= 0)
+                        return container_file_table[i].id;
+
+                if (errno != ENOENT)
+                        log_debug_errno(errno,
+                                        "Checking if %s exists failed, ignoring: %m",
+                                        container_file_table[i].file_path);
+        }
+
+        return VIRTUALIZATION_NONE;
+}
+
 int detect_container(void) {
         static thread_local int cached_found = _VIRTUALIZATION_INVALID;
         _cleanup_free_ char *m = NULL, *o = NULL, *p = NULL;
@@ -530,7 +625,7 @@ int detect_container(void) {
                  */
                 e = getenv("container");
                 if (!e)
-                        goto none;
+                        goto check_files;
                 if (isempty(e)) {
                         r = VIRTUALIZATION_NONE;
                         goto finish;
@@ -558,12 +653,36 @@ int detect_container(void) {
         if (r < 0) /* This only works if we have CAP_SYS_PTRACE, hence let's better ignore failures here */
                 log_debug_errno(r, "Failed to read $container of PID 1, ignoring: %m");
 
-none:
-        /* If that didn't work, give up, assume no container manager. */
+check_files:
+        /* Check for existence of some well-known files. We only do this after checking
+         * for other specific container managers, otherwise we risk mistaking another
+         * container manager for Docker: the /.dockerenv file could inadvertently end up
+         * in a file system image. */
+        r = detect_container_files();
+        if (r)
+                goto finish;
+
+        r = running_in_cgroupns();
+        if (r > 0) {
+                r = VIRTUALIZATION_CONTAINER_OTHER;
+                goto finish;
+        }
+        if (r < 0)
+                log_debug_errno(r, "Failed to detect cgroup namespace: %m");
+
+        /* If none of that worked, give up, assume no container manager. */
         r = VIRTUALIZATION_NONE;
         goto finish;
 
 translate_name:
+        if (streq(e, "oci")) {
+                /* Some images hardcode container=oci, but OCI is not a specific container manager.
+                 * Try to detect one based on well-known files. */
+                r = detect_container_files();
+                if (!r)
+                        r = VIRTUALIZATION_CONTAINER_OTHER;
+                goto finish;
+        }
         r = container_from_string(e);
         if (r < 0)
                 r = VIRTUALIZATION_CONTAINER_OTHER;
index 7b759bcd0257a6593ce10b3bdad2e85f59b5bf45..cccd834cc82fe66ef68a00c4af57cd749768afee 100644 (file)
@@ -1233,6 +1233,7 @@ static int verb_status(int argc, char *argv[], void *userdata) {
                 printf("     Firmware: %s%s (%s)%s\n", ansi_highlight(), strna(fw_type), strna(fw_info), ansi_normal());
                 printf("  Secure Boot: %sd\n", enable_disable(is_efi_secure_boot()));
                 printf("   Setup Mode: %s\n", is_efi_secure_boot_setup_mode() ? "setup" : "user");
+                printf(" TPM2 Support: %s\n", yes_no(efi_has_tpm2()));
 
                 k = efi_get_reboot_to_firmware();
                 if (k > 0)
index c577ac2bab9ecfdbb75911e2238fc00f98bbc249..142aba0b92828ee800fa4b92faeb87fb124075b6 100644 (file)
@@ -21,6 +21,7 @@
 #include "log.h"
 #include "main-func.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -2523,7 +2524,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_JSON:
-                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
                         if (r <= 0)
                                 return r;
 
index c9cf7fb16c6abc9ac0d7379db923226d8810d6cd..b0fc67a1255736623b37d633fe116ab0cfecc4f8 100644 (file)
@@ -131,6 +131,7 @@ void cgroup_context_init(CGroupContext *c) {
 
                 .moom_swap = MANAGED_OOM_AUTO,
                 .moom_mem_pressure = MANAGED_OOM_AUTO,
+                .moom_preference = MANAGED_OOM_PREFERENCE_NONE,
         };
 }
 
@@ -417,7 +418,8 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
                 "%sDelegate: %s\n"
                 "%sManagedOOMSwap: %s\n"
                 "%sManagedOOMMemoryPressure: %s\n"
-                "%sManagedOOMMemoryPressureLimit: %" PRIu32 ".%02" PRIu32 "%%\n",
+                "%sManagedOOMMemoryPressureLimit: %" PRIu32 ".%02" PRIu32 "%%\n"
+                "%sManagedOOMPreference: %s%%\n",
                 prefix, yes_no(c->cpu_accounting),
                 prefix, yes_no(c->io_accounting),
                 prefix, yes_no(c->blockio_accounting),
@@ -450,7 +452,8 @@ void cgroup_context_dump(Unit *u, FILE* f, const char *prefix) {
                 prefix, yes_no(c->delegate),
                 prefix, managed_oom_mode_to_string(c->moom_swap),
                 prefix, managed_oom_mode_to_string(c->moom_mem_pressure),
-                prefix, c->moom_mem_pressure_limit_permyriad / 100, c->moom_mem_pressure_limit_permyriad % 100);
+                prefix, c->moom_mem_pressure_limit_permyriad / 100, c->moom_mem_pressure_limit_permyriad % 100,
+                prefix, managed_oom_preference_to_string(c->moom_preference));
 
         if (c->delegate) {
                 _cleanup_free_ char *t = NULL;
@@ -600,6 +603,41 @@ int cgroup_add_device_allow(CGroupContext *c, const char *dev, const char *mode)
 UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_low);
 UNIT_DEFINE_ANCESTOR_MEMORY_LOOKUP(memory_min);
 
+void cgroup_oomd_xattr_apply(Unit *u, const char *cgroup_path) {
+        CGroupContext *c;
+        int r;
+
+        assert(u);
+
+        c = unit_get_cgroup_context(u);
+        if (!c)
+                return;
+
+        if (c->moom_preference == MANAGED_OOM_PREFERENCE_OMIT) {
+                r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_omit", "1", 1, 0);
+                if (r < 0)
+                        log_unit_debug_errno(u, r, "Failed to set oomd_omit flag on control group %s, ignoring: %m", cgroup_path);
+        }
+
+        if (c->moom_preference == MANAGED_OOM_PREFERENCE_AVOID) {
+                r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_avoid", "1", 1, 0);
+                if (r < 0)
+                        log_unit_debug_errno(u, r, "Failed to set oomd_avoid flag on control group %s, ignoring: %m", cgroup_path);
+        }
+
+        if (c->moom_preference != MANAGED_OOM_PREFERENCE_AVOID) {
+                r = cg_remove_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_avoid");
+                if (r != -ENODATA)
+                        log_unit_debug_errno(u, r, "Failed to remove oomd_avoid flag on control group %s, ignoring: %m", cgroup_path);
+        }
+
+        if (c->moom_preference != MANAGED_OOM_PREFERENCE_OMIT) {
+                r = cg_remove_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup_path, "user.oomd_omit");
+                if (r != -ENODATA)
+                        log_unit_debug_errno(u, r, "Failed to remove oomd_omit flag on control group %s, ignoring: %m", cgroup_path);
+        }
+}
+
 static void cgroup_xattr_apply(Unit *u) {
         char ids[SD_ID128_STRING_MAX];
         int r;
@@ -630,6 +668,8 @@ static void cgroup_xattr_apply(Unit *u) {
                 if (r != -ENODATA)
                         log_unit_debug_errno(u, r, "Failed to remove delegate flag on control group %s, ignoring: %m", u->cgroup_path);
         }
+
+        cgroup_oomd_xattr_apply(u, u->cgroup_path);
 }
 
 static int lookup_block_device(const char *p, dev_t *ret) {
@@ -2746,7 +2786,7 @@ int unit_check_oomd_kill(Unit *u) {
         else if (r == 0)
                 return 0;
 
-        r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "user.systemd_oomd_kill", &value);
+        r = cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, u->cgroup_path, "user.oomd_kill", &value);
         if (r < 0 && r != -ENODATA)
                 return r;
 
@@ -3737,12 +3777,6 @@ int unit_cgroup_freezer_action(Unit *u, FreezerAction action) {
         return 1;
 }
 
-static const char* const cgroup_device_policy_table[_CGROUP_DEVICE_POLICY_MAX] = {
-        [CGROUP_DEVICE_POLICY_AUTO]   = "auto",
-        [CGROUP_DEVICE_POLICY_CLOSED] = "closed",
-        [CGROUP_DEVICE_POLICY_STRICT] = "strict",
-};
-
 int unit_get_cpuset(Unit *u, CPUSet *cpus, const char *name) {
         _cleanup_free_ char *v = NULL;
         int r;
@@ -3771,6 +3805,12 @@ int unit_get_cpuset(Unit *u, CPUSet *cpus, const char *name) {
         return parse_cpu_set_full(v, cpus, false, NULL, NULL, 0, NULL);
 }
 
+static const char* const cgroup_device_policy_table[_CGROUP_DEVICE_POLICY_MAX] = {
+        [CGROUP_DEVICE_POLICY_AUTO]   = "auto",
+        [CGROUP_DEVICE_POLICY_CLOSED] = "closed",
+        [CGROUP_DEVICE_POLICY_STRICT] = "strict",
+};
+
 DEFINE_STRING_TABLE_LOOKUP(cgroup_device_policy, CGroupDevicePolicy);
 
 static const char* const freezer_action_table[_FREEZER_ACTION_MAX] = {
index 9f225d934b88a26fbf758dd24467a04887151710..8183551420b494bbe9a4c4cfdadc989b6d763f97 100644 (file)
@@ -164,6 +164,7 @@ struct CGroupContext {
         ManagedOOMMode moom_swap;
         ManagedOOMMode moom_mem_pressure;
         uint32_t moom_mem_pressure_limit_permyriad;
+        ManagedOOMPreference moom_preference;
 };
 
 /* Used when querying IP accounting data */
@@ -204,6 +205,8 @@ void cgroup_context_free_blockio_device_bandwidth(CGroupContext *c, CGroupBlockI
 
 int cgroup_add_device_allow(CGroupContext *c, const char *dev, const char *mode);
 
+void cgroup_oomd_xattr_apply(Unit *u, const char *cgroup_path);
+
 CGroupMask unit_get_own_mask(Unit *u);
 CGroupMask unit_get_delegate_mask(Unit *u);
 CGroupMask unit_get_members_mask(Unit *u);
index a8b438cc82a34039a73429d3aa2fb5ea7fd08bda..2b8b833fe39306ee34b9e6a8067343f513fac8bd 100644 (file)
@@ -21,6 +21,7 @@ BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", TasksMax, tasks_max_res
 
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_cgroup_device_policy, cgroup_device_policy, CGroupDevicePolicy);
 static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_managed_oom_mode, managed_oom_mode, ManagedOOMMode);
+static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_managed_oom_preference, managed_oom_preference, ManagedOOMPreference);
 
 static int property_get_cgroup_mask(
                 sd_bus *bus,
@@ -395,6 +396,7 @@ const sd_bus_vtable bus_cgroup_vtable[] = {
         SD_BUS_PROPERTY("ManagedOOMSwap", "s", property_get_managed_oom_mode, offsetof(CGroupContext, moom_swap), 0),
         SD_BUS_PROPERTY("ManagedOOMMemoryPressure", "s", property_get_managed_oom_mode, offsetof(CGroupContext, moom_mem_pressure), 0),
         SD_BUS_PROPERTY("ManagedOOMMemoryPressureLimitPermyriad", "u", NULL, offsetof(CGroupContext, moom_mem_pressure_limit_permyriad), 0),
+        SD_BUS_PROPERTY("ManagedOOMPreference", "s", property_get_managed_oom_preference, offsetof(CGroupContext, moom_preference), 0),
         SD_BUS_VTABLE_END
 };
 
@@ -1720,6 +1722,26 @@ int bus_cgroup_set_property(
                 return 1;
         }
 
+        if (streq(name, "ManagedOOMPreference")) {
+                ManagedOOMPreference p;
+                const char *pref;
+
+                r = sd_bus_message_read(message, "s", &pref);
+                if (r < 0)
+                        return r;
+
+                p = managed_oom_preference_from_string(pref);
+                if (p < 0)
+                        return -EINVAL;
+
+                if (!UNIT_WRITE_FLAGS_NOOP(flags)) {
+                        c->moom_preference = p;
+                        unit_write_settingf(u, flags, name, "ManagedOOMPreference=%s", pref);
+                }
+
+                return 1;
+        }
+
         if (streq(name, "DisableControllers") || (u->transient && u->load_state == UNIT_STUB))
                 return bus_cgroup_set_transient_property(u, c, name, message, flags, error);
 
index d10a121b7ad34c3ba19a2cee9891f0e7e1a55eb4..859e35eee4244516aaf6a165d78587dd956a8ff6 100644 (file)
@@ -2462,7 +2462,8 @@ int bus_unit_validate_load_state(Unit *u, sd_bus_error *error) {
                 return sd_bus_error_setf(error, BUS_ERROR_BAD_UNIT_SETTING, "Unit %s has a bad unit file setting.", u->id);
 
         case UNIT_ERROR: /* Only show .load_error in UNIT_ERROR state */
-                return sd_bus_error_set_errnof(error, u->load_error, "Unit %s failed to load properly: %m.", u->id);
+                return sd_bus_error_set_errnof(error, u->load_error,
+                                               "Unit %s failed to load properly, please adjust/correct and reload service manager: %m", u->id);
 
         case UNIT_MASKED:
                 return sd_bus_error_setf(error, BUS_ERROR_UNIT_MASKED, "Unit %s is masked.", u->id);
index 4b4880218345baba89fbdc5d237776358bb46716..d14aec47d0e606dccb63198978c69834c518a200 100644 (file)
@@ -4706,6 +4706,10 @@ int exec_spawn(Unit *unit,
                         r = cg_create(SYSTEMD_CGROUP_CONTROLLER, subcgroup_path);
                         if (r < 0)
                                 return log_unit_error_errno(unit, r, "Failed to create control group '%s': %m", subcgroup_path);
+
+                        /* Normally we would not propagate the oomd xattrs to children but since we created this
+                         * sub-cgroup internally we should do it. */
+                        cgroup_oomd_xattr_apply(unit, subcgroup_path);
                 }
         }
 
index be07c7604cc7d2d2e53cbc04f4d687615679ff1b..b0460e27645ced213e33dc65b2a8c7814d346b46 100644 (file)
@@ -230,6 +230,7 @@ $1.IPEgressFilterPath,                   config_parse_ip_filter_bpf_progs,
 $1.ManagedOOMSwap,                       config_parse_managed_oom_mode,               0,                                  offsetof($1, cgroup_context.moom_swap)
 $1.ManagedOOMMemoryPressure,             config_parse_managed_oom_mode,               0,                                  offsetof($1, cgroup_context.moom_mem_pressure)
 $1.ManagedOOMMemoryPressureLimit,        config_parse_managed_oom_mem_pressure_limit, 0,                                  offsetof($1, cgroup_context.moom_mem_pressure_limit_permyriad)
+$1.ManagedOOMPreference,                 config_parse_managed_oom_preference,         0,                                  offsetof($1, cgroup_context.moom_preference)
 $1.NetClass,                             config_parse_warn_compat,                    DISABLED_LEGACY,                    0'
 )m4_dnl
 Unit.Description,                        config_parse_unit_string_printf,             0,                                  offsetof(Unit, description)
index 06b71aaf1575a10b5132eeefc4fd9660f031b76f..92ce62be4b163ee516143ce44c5a842de224d521 100644 (file)
@@ -133,6 +133,7 @@ DEFINE_CONFIG_PARSE_ENUM(config_parse_service_restart, service_restart, ServiceR
 DEFINE_CONFIG_PARSE_ENUM(config_parse_service_timeout_failure_mode, service_timeout_failure_mode, ServiceTimeoutFailureMode, "Failed to parse timeout failure mode");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_socket_bind, socket_address_bind_ipv6_only_or_bool, SocketAddressBindIPv6Only, "Failed to parse bind IPv6 only value");
 DEFINE_CONFIG_PARSE_ENUM(config_parse_oom_policy, oom_policy, OOMPolicy, "Failed to parse OOM policy");
+DEFINE_CONFIG_PARSE_ENUM(config_parse_managed_oom_preference, managed_oom_preference, ManagedOOMPreference, "Failed to parse ManagedOOMPreference=");
 DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_ip_tos, ip_tos, int, -1, "Failed to parse IP TOS value");
 DEFINE_CONFIG_PARSE_PTR(config_parse_blockio_weight, cg_blkio_weight_parse, uint64_t, "Invalid block IO weight");
 DEFINE_CONFIG_PARSE_PTR(config_parse_cg_weight, cg_weight_parse, uint64_t, "Invalid weight");
@@ -660,7 +661,7 @@ int config_parse_kill_mode(
 
         m = kill_mode_from_string(rvalue);
         if (m < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, m,
                            "Failed to parse kill mode specification, ignoring: %s", rvalue);
                 return 0;
         }
@@ -920,10 +921,7 @@ int config_parse_socket_bindtodevice(
                 return 0;
         }
 
-        if (free_and_strdup(&s->bind_to_device, rvalue) < 0)
-                return log_oom();
-
-        return 0;
+        return free_and_strdup_warn(&s->bind_to_device, rvalue);
 }
 
 int config_parse_exec_input(
@@ -990,7 +988,7 @@ int config_parse_exec_input(
         } else {
                 ei = exec_input_from_string(rvalue);
                 if (ei < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse input specifier, ignoring: %s", rvalue);
+                        log_syntax(unit, LOG_WARNING, filename, line, ei, "Failed to parse input specifier, ignoring: %s", rvalue);
                         return 0;
                 }
         }
@@ -1219,7 +1217,7 @@ int config_parse_exec_output(
         } else {
                 eo = exec_output_from_string(rvalue);
                 if (eo < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse output specifier, ignoring: %s", rvalue);
+                        log_syntax(unit, LOG_WARNING, filename, line, eo, "Failed to parse output specifier, ignoring: %s", rvalue);
                         return 0;
                 }
         }
@@ -1278,7 +1276,7 @@ int config_parse_exec_io_class(const char *unit,
 
         x = ioprio_class_from_string(rvalue);
         if (x < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse IO scheduling class, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, x, "Failed to parse IO scheduling class, ignoring: %s", rvalue);
                 return 0;
         }
 
@@ -1353,7 +1351,7 @@ int config_parse_exec_cpu_sched_policy(const char *unit,
 
         x = sched_policy_from_string(rvalue);
         if (x < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse CPU scheduling policy, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, x, "Failed to parse CPU scheduling policy, ignoring: %s", rvalue);
                 return 0;
         }
 
@@ -1527,7 +1525,8 @@ int config_parse_root_image_options(
 
                 partition_designator = partition_designator_from_string(partition);
                 if (partition_designator < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid partition name %s, ignoring", partition);
+                        log_syntax(unit, LOG_WARNING, filename, line, partition_designator,
+                                   "Invalid partition name %s, ignoring", partition);
                         continue;
                 }
                 r = unit_full_printf(u, mount_options, &mount_options_resolved);
@@ -2015,7 +2014,7 @@ int config_parse_trigger_unit(
 
         type = unit_name_to_type(p);
         if (type < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Unit type not valid, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, type, "Unit type not valid, ignoring: %s", rvalue);
                 return 0;
         }
         if (unit_has_name(u, p)) {
@@ -2062,7 +2061,7 @@ int config_parse_path_spec(const char *unit,
 
         b = path_type_from_string(lvalue);
         if (b < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse path type, ignoring: %s", lvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, b, "Failed to parse path type, ignoring: %s", lvalue);
                 return 0;
         }
 
@@ -3386,8 +3385,12 @@ int config_parse_syscall_errno(
         }
 
         e = parse_errno(rvalue);
-        if (e <= 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse error number, ignoring: %s", rvalue);
+        if (e < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, e, "Failed to parse error number, ignoring: %s", rvalue);
+                return 0;
+        }
+        if (e == 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid error number, ignoring: %s", rvalue);
                 return 0;
         }
 
@@ -3857,7 +3860,7 @@ int config_parse_managed_oom_mode(
 
         m = managed_oom_mode_from_string(rvalue);
         if (m < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid syntax, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, m, "Invalid syntax, ignoring: %s", rvalue);
                 return 0;
         }
         *mode = m;
@@ -4668,7 +4671,7 @@ int config_parse_set_status(
                 } else {
                         r = signal_from_string(word);
                         if (r < 0) {
-                                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                                log_syntax(unit, LOG_WARNING, filename, line, r,
                                            "Failed to parse value, ignoring: %s", word);
                                 continue;
                         }
@@ -5085,7 +5088,8 @@ int config_parse_mount_images(
 
                         partition_designator = partition_designator_from_string(partition);
                         if (partition_designator < 0) {
-                                log_syntax(unit, LOG_WARNING, filename, line, 0, "Invalid partition name %s, ignoring", partition);
+                                log_syntax(unit, LOG_WARNING, filename, line, partition_designator,
+                                           "Invalid partition name %s, ignoring", partition);
                                 continue;
                         }
                         r = unit_full_printf(u, mount_options, &mount_options_resolved);
@@ -5532,10 +5536,11 @@ int unit_load_fragment(Unit *u) {
                 }
         }
 
-        /* We do the merge dance here because for some unit types, the unit might have aliases which are not
+        /* Call merge_by_names with the name derived from the fragment path as the preferred name.
+         *
+         * We do the merge dance here because for some unit types, the unit might have aliases which are not
          * declared in the file system. In particular, this is true (and frequent) for device and swap units.
          */
-        Unit *merged;
         const char *id = u->id;
         _cleanup_free_ char *free_id = NULL;
 
@@ -5552,7 +5557,7 @@ int unit_load_fragment(Unit *u) {
                 }
         }
 
-        merged = u;
+        Unit *merged = u;
         r = merge_by_names(&merged, names, id);
         if (r < 0)
                 return r;
@@ -5774,7 +5779,7 @@ int config_parse_output_restricted(
         } else {
                 t = exec_output_from_string(rvalue);
                 if (t < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse output type, ignoring: %s", rvalue);
+                        log_syntax(unit, LOG_WARNING, filename, line, t, "Failed to parse output type, ignoring: %s", rvalue);
                         return 0;
                 }
 
index 6b2175cd2afe45d010430b2bed643cbef368e215..e4a5cb7986931f37689af612ea780d16e2474e0c 100644 (file)
@@ -78,6 +78,7 @@ CONFIG_PARSER_PROTOTYPE(config_parse_tasks_max);
 CONFIG_PARSER_PROTOTYPE(config_parse_delegate);
 CONFIG_PARSER_PROTOTYPE(config_parse_managed_oom_mode);
 CONFIG_PARSER_PROTOTYPE(config_parse_managed_oom_mem_pressure_limit);
+CONFIG_PARSER_PROTOTYPE(config_parse_managed_oom_preference);
 CONFIG_PARSER_PROTOTYPE(config_parse_device_policy);
 CONFIG_PARSER_PROTOTYPE(config_parse_device_allow);
 CONFIG_PARSER_PROTOTYPE(config_parse_io_device_latency);
index 85bf558e90f56ce99add9325ac6337a55b4be489..8c7bcc2d3d98c9ece854d224b5607ae42acef4c9 100644 (file)
@@ -58,6 +58,7 @@
 #include "mount-setup.h"
 #include "os-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -358,7 +359,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                         return 0;
 
                 if (path_is_absolute(value))
-                        (void) parse_path_argument_and_warn(value, false, &arg_early_core_pattern);
+                        (void) parse_path_argument(value, false, &arg_early_core_pattern);
                 else
                         log_warning("Specified core pattern '%s' is not an absolute path, ignoring.", value);
 
@@ -498,7 +499,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                (void) parse_path_argument_and_warn(value, false, &arg_watchdog_device);
+                (void) parse_path_argument(value, false, &arg_watchdog_device);
 
         } else if (proc_cmdline_key_streq(key, "systemd.clock_usec")) {
 
index ee28bf4e98fe8cc2f972b95913435138ea65725f..82ca4c2482662b85ccecdaba42160fb547346123 100644 (file)
@@ -3178,22 +3178,19 @@ static bool manager_timestamp_shall_serialize(ManagerTimestamp t) {
 #define DESTROY_IPC_FLAG (UINT32_C(1) << 31)
 
 static void manager_serialize_uid_refs_internal(
-                Manager *m,
                 FILE *f,
-                Hashmap **uid_refs,
+                Hashmap *uid_refs,
                 const char *field_name) {
 
         void *p, *k;
 
-        assert(m);
         assert(f);
-        assert(uid_refs);
         assert(field_name);
 
         /* Serialize the UID reference table. Or actually, just the IPC destruction flag of it, as
          * the actual counter of it is better rebuild after a reload/reexec. */
 
-        HASHMAP_FOREACH_KEY(p, k, *uid_refs) {
+        HASHMAP_FOREACH_KEY(p, k, uid_refs) {
                 uint32_t c;
                 uid_t uid;
 
@@ -3208,11 +3205,11 @@ static void manager_serialize_uid_refs_internal(
 }
 
 static void manager_serialize_uid_refs(Manager *m, FILE *f) {
-        manager_serialize_uid_refs_internal(m, f, &m->uid_refs, "destroy-ipc-uid");
+        manager_serialize_uid_refs_internal(f, m->uid_refs, "destroy-ipc-uid");
 }
 
 static void manager_serialize_gid_refs(Manager *m, FILE *f) {
-        manager_serialize_uid_refs_internal(m, f, &m->gid_refs, "destroy-ipc-gid");
+        manager_serialize_uid_refs_internal(f, m->gid_refs, "destroy-ipc-gid");
 }
 
 int manager_serialize(
@@ -3472,7 +3469,6 @@ void manager_retry_runtime_watchdog(Manager *m) {
 }
 
 static void manager_deserialize_uid_refs_one_internal(
-                Manager *m,
                 Hashmap** uid_refs,
                 const char *value) {
 
@@ -3480,18 +3476,16 @@ static void manager_deserialize_uid_refs_one_internal(
         uint32_t c;
         int r;
 
-        assert(m);
         assert(uid_refs);
         assert(value);
 
         r = parse_uid(value, &uid);
         if (r < 0 || uid == 0) {
-                log_debug("Unable to parse UID reference serialization: " UID_FMT, uid);
+                log_debug("Unable to parse UID/GID reference serialization: " UID_FMT, uid);
                 return;
         }
 
-        r = hashmap_ensure_allocated(uid_refs, &trivial_hash_ops);
-        if (r < 0) {
+        if (hashmap_ensure_allocated(uid_refs, &trivial_hash_ops) < 0) {
                 log_oom();
                 return;
         }
@@ -3504,17 +3498,17 @@ static void manager_deserialize_uid_refs_one_internal(
 
         r = hashmap_replace(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c));
         if (r < 0) {
-                log_debug_errno(r, "Failed to add UID reference entry: %m");
+                log_debug_errno(r, "Failed to add UID/GID reference entry: %m");
                 return;
         }
 }
 
 static void manager_deserialize_uid_refs_one(Manager *m, const char *value) {
-        manager_deserialize_uid_refs_one_internal(m, &m->uid_refs, value);
+        manager_deserialize_uid_refs_one_internal(&m->uid_refs, value);
 }
 
 static void manager_deserialize_gid_refs_one(Manager *m, const char *value) {
-        manager_deserialize_uid_refs_one_internal(m, &m->gid_refs, value);
+        manager_deserialize_uid_refs_one_internal(&m->gid_refs, value);
 }
 
 int manager_deserialize(Manager *m, FILE *f, FDSet *fds) {
@@ -4588,16 +4582,13 @@ ManagerState manager_state(Manager *m) {
 }
 
 static void manager_unref_uid_internal(
-                Manager *m,
-                Hashmap **uid_refs,
+                Hashmap *uid_refs,
                 uid_t uid,
                 bool destroy_now,
                 int (*_clean_ipc)(uid_t uid)) {
 
         uint32_t c, n;
 
-        assert(m);
-        assert(uid_refs);
         assert(uid_is_valid(uid));
         assert(_clean_ipc);
 
@@ -4615,14 +4606,14 @@ static void manager_unref_uid_internal(
         if (uid == 0) /* We don't keep track of root, and will never destroy it */
                 return;
 
-        c = PTR_TO_UINT32(hashmap_get(*uid_refs, UID_TO_PTR(uid)));
+        c = PTR_TO_UINT32(hashmap_get(uid_refs, UID_TO_PTR(uid)));
 
         n = c & ~DESTROY_IPC_FLAG;
         assert(n > 0);
         n--;
 
         if (destroy_now && n == 0) {
-                hashmap_remove(*uid_refs, UID_TO_PTR(uid));
+                hashmap_remove(uid_refs, UID_TO_PTR(uid));
 
                 if (c & DESTROY_IPC_FLAG) {
                         log_debug("%s " UID_FMT " is no longer referenced, cleaning up its IPC.",
@@ -4632,20 +4623,19 @@ static void manager_unref_uid_internal(
                 }
         } else {
                 c = n | (c & DESTROY_IPC_FLAG);
-                assert_se(hashmap_update(*uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c)) >= 0);
+                assert_se(hashmap_update(uid_refs, UID_TO_PTR(uid), UINT32_TO_PTR(c)) >= 0);
         }
 }
 
 void manager_unref_uid(Manager *m, uid_t uid, bool destroy_now) {
-        manager_unref_uid_internal(m, &m->uid_refs, uid, destroy_now, clean_ipc_by_uid);
+        manager_unref_uid_internal(m->uid_refs, uid, destroy_now, clean_ipc_by_uid);
 }
 
 void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now) {
-        manager_unref_uid_internal(m, &m->gid_refs, (uid_t) gid, destroy_now, clean_ipc_by_gid);
+        manager_unref_uid_internal(m->gid_refs, (uid_t) gid, destroy_now, clean_ipc_by_gid);
 }
 
 static int manager_ref_uid_internal(
-                Manager *m,
                 Hashmap **uid_refs,
                 uid_t uid,
                 bool clean_ipc) {
@@ -4653,7 +4643,6 @@ static int manager_ref_uid_internal(
         uint32_t c, n;
         int r;
 
-        assert(m);
         assert(uid_refs);
         assert(uid_is_valid(uid));
 
@@ -4684,25 +4673,22 @@ static int manager_ref_uid_internal(
 }
 
 int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc) {
-        return manager_ref_uid_internal(m, &m->uid_refs, uid, clean_ipc);
+        return manager_ref_uid_internal(&m->uid_refs, uid, clean_ipc);
 }
 
 int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc) {
-        return manager_ref_uid_internal(m, &m->gid_refs, (uid_t) gid, clean_ipc);
+        return manager_ref_uid_internal(&m->gid_refs, (uid_t) gid, clean_ipc);
 }
 
 static void manager_vacuum_uid_refs_internal(
-                Manager *m,
-                Hashmap **uid_refs,
+                Hashmap *uid_refs,
                 int (*_clean_ipc)(uid_t uid)) {
 
         void *p, *k;
 
-        assert(m);
-        assert(uid_refs);
         assert(_clean_ipc);
 
-        HASHMAP_FOREACH_KEY(p, k, *uid_refs) {
+        HASHMAP_FOREACH_KEY(p, k, uid_refs) {
                 uint32_t c, n;
                 uid_t uid;
 
@@ -4720,16 +4706,16 @@ static void manager_vacuum_uid_refs_internal(
                         (void) _clean_ipc(uid);
                 }
 
-                assert_se(hashmap_remove(*uid_refs, k) == p);
+                assert_se(hashmap_remove(uid_refs, k) == p);
         }
 }
 
 static void manager_vacuum_uid_refs(Manager *m) {
-        manager_vacuum_uid_refs_internal(m, &m->uid_refs, clean_ipc_by_uid);
+        manager_vacuum_uid_refs_internal(m->uid_refs, clean_ipc_by_uid);
 }
 
 static void manager_vacuum_gid_refs(Manager *m) {
-        manager_vacuum_uid_refs_internal(m, &m->gid_refs, clean_ipc_by_gid);
+        manager_vacuum_uid_refs_internal(m->gid_refs, clean_ipc_by_gid);
 }
 
 static void manager_vacuum(Manager *m) {
index cbd8018f04bc7487e46ad2df46e3a5288f9b31d1..f58982a36473d4947e41b01c74b5bcb9f59fa31b 100644 (file)
@@ -537,7 +537,7 @@ void manager_unref_uid(Manager *m, uid_t uid, bool destroy_now);
 int manager_ref_uid(Manager *m, uid_t uid, bool clean_ipc);
 
 void manager_unref_gid(Manager *m, gid_t gid, bool destroy_now);
-int manager_ref_gid(Manager *m, gid_t gid, bool destroy_now);
+int manager_ref_gid(Manager *m, gid_t gid, bool clean_ipc);
 
 char *manager_taint_string(Manager *m);
 
index 1ad80886cd0802ca8a5964895eae731120c2d695..23b558859c2fef6eb21dea7379b40104c1a235b2 100644 (file)
@@ -1249,8 +1249,9 @@ static int mount_deserialize_item(Unit *u, const char *key, const char *value, F
         if (streq(key, "state")) {
                 MountState state;
 
-                if ((state = mount_state_from_string(value)) < 0)
-                        log_unit_debug(u, "Failed to parse state value: %s", value);
+                state = mount_state_from_string(value);
+                if (state < 0)
+                        log_unit_debug_errno(u, state, "Failed to parse state value: %s", value);
                 else
                         m->deserialized_state = state;
 
@@ -1259,7 +1260,7 @@ static int mount_deserialize_item(Unit *u, const char *key, const char *value, F
 
                 f = mount_result_from_string(value);
                 if (f < 0)
-                        log_unit_debug(u, "Failed to parse result value: %s", value);
+                        log_unit_debug_errno(u, f, "Failed to parse result value: %s", value);
                 else if (f != MOUNT_SUCCESS)
                         m->result = f;
 
@@ -1268,7 +1269,7 @@ static int mount_deserialize_item(Unit *u, const char *key, const char *value, F
 
                 f = mount_result_from_string(value);
                 if (f < 0)
-                        log_unit_debug(u, "Failed to parse reload result value: %s", value);
+                        log_unit_debug_errno(u, f, "Failed to parse reload result value: %s", value);
                 else if (f != MOUNT_SUCCESS)
                         m->reload_result = f;
 
@@ -1276,19 +1277,20 @@ static int mount_deserialize_item(Unit *u, const char *key, const char *value, F
 
                 r = safe_atou(value, &m->n_retry_umount);
                 if (r < 0)
-                        log_unit_debug(u, "Failed to parse n-retry-umount value: %s", value);
+                        log_unit_debug_errno(u, r, "Failed to parse n-retry-umount value: %s", value);
 
         } else if (streq(key, "control-pid")) {
 
-                if (parse_pid(value, &m->control_pid) < 0)
-                        log_unit_debug(u, "Failed to parse control-pid value: %s", value);
+                r = parse_pid(value, &m->control_pid);
+                if (r < 0)
+                        log_unit_debug_errno(u, r, "Failed to parse control-pid value: %s", value);
 
         } else if (streq(key, "control-command")) {
                 MountExecCommand id;
 
                 id = mount_exec_command_from_string(value);
                 if (id < 0)
-                        log_unit_debug(u, "Failed to parse exec-command value: %s", value);
+                        log_unit_debug_errno(u, id, "Failed to parse exec-command value: %s", value);
                 else {
                         m->control_command_id = id;
                         m->control_command = m->exec_command + id;
index 9c7f3dcdc036aa78714267d252ededbe0a3b2c98..345271259074cc3476fa4a2f5d97dab4a98178fd 100644 (file)
@@ -5300,7 +5300,7 @@ void unit_log_success(Unit *u) {
                    "MESSAGE_ID=" SD_MESSAGE_UNIT_SUCCESS_STR,
                    LOG_UNIT_ID(u),
                    LOG_UNIT_INVOCATION_ID(u),
-                   LOG_UNIT_MESSAGE(u, "Succeeded."));
+                   LOG_UNIT_MESSAGE(u, "Deactivated successfully."));
 }
 
 void unit_log_failure(Unit *u, const char *result) {
index 46183451de07e02e191eac86d0e84829b4e6cf13..20cd90bd568ab140085242c89af456a8365dccd5 100644 (file)
@@ -25,6 +25,7 @@
 #include "macro.h"
 #include "main-func.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -320,7 +321,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_JSON:
-                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
                         if (r <= 0)
                                 return r;
 
index fa4dfb6ef21a1991fd705ac0130fab3bacd7e268..a137a41c9d7cfda6d75696671b48008c886e0b3c 100644 (file)
@@ -16,6 +16,7 @@
 #include "libfido2-util.h"
 #include "main-func.h"
 #include "memory-util.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pkcs11-util.h"
@@ -323,7 +324,7 @@ static int parse_argv(int argc, char *argv[]) {
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                        "Too many arguments, refusing.");
 
-        r = parse_path_argument_and_warn(argv[optind], false, &arg_node);
+        r = parse_path_argument(argv[optind], false, &arg_node);
         if (r < 0)
                 return r;
 
index 0ae8ab35aaf46c75eecdddf1b902f1e077f80e20..74f739b5139e8116833f940cb4cd6f39d5df4a1f 100644 (file)
@@ -667,7 +667,7 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
 
                 r = sscanf(value, "%m[0-9a-fA-F-]=%ms", &uuid, &uuid_value);
                 if (r != 2)
-                        return free_and_strdup(&arg_default_options, value) < 0 ? log_oom() : 0;
+                        return free_and_strdup_warn(&arg_default_options, value);
 
                 if (warn_uuid_invalid(uuid, key))
                         return 0;
@@ -691,11 +691,8 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                         return 0;
 
                 n = strspn(value, ALPHANUMERICAL "-");
-                if (value[n] != '=') {
-                        if (free_and_strdup(&arg_default_keyfile, value) < 0)
-                                 return log_oom();
-                        return 0;
-                }
+                if (value[n] != '=')
+                        return free_and_strdup_warn(&arg_default_keyfile, value);
 
                 uuid = strndup(value, n);
                 if (!uuid)
index c6e4d79e3a39ac31e5de14326dface02b9bd62ed..d9fccea5c90dd731ef45423b56348c754c48200d 100644 (file)
@@ -68,27 +68,21 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 else if (r > 0)
                         t = skip_dev_prefix(DEBUGTTY);
 
-                if (free_and_strdup(&arg_debug_shell, t) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_debug_shell, t);
 
         } else if (streq(key, "systemd.unit")) {
 
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                r = free_and_strdup(&arg_default_unit, value);
-                if (r < 0)
-                        return log_error_errno(r, "Failed to set default unit %s: %m", value);
+                return free_and_strdup_warn(&arg_default_unit, value);
 
         } else if (!value) {
                 const char *target;
 
                 target = runlevel_to_target(key);
-                if (target) {
-                        r = free_and_strdup(&arg_default_unit, target);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to set default unit %s: %m", target);
-                }
+                if (target)
+                        return free_and_strdup_warn(&arg_default_unit, target);
         }
 
         return 0;
index 0b83d79cc938a02023ed7ddd8a9813046768e56f..f8f34dcc4dd832e420b95cc74a33fd40688a2aad 100644 (file)
@@ -22,6 +22,7 @@
 #include "mkdir.h"
 #include "mount-util.h"
 #include "namespace-util.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -245,7 +246,7 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case ARG_VERITY_DATA:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_verity_settings.data_path);
+                        r = parse_path_argument(optarg, false, &arg_verity_settings.data_path);
                         if (r < 0)
                                 return r;
                         break;
@@ -259,7 +260,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_JSON:
-                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
                         if (r <= 0)
                                 return r;
 
index 904612ab4a61c39a9c49949805fe511a28b8db0d..40f0de28c290eeab0873382b53d9f133012029e4 100644 (file)
@@ -24,6 +24,7 @@
 #include "mkdir.h"
 #include "mount-util.h"
 #include "os-util.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -210,10 +211,7 @@ static int prompt_loop(const char *text, char **l, unsigned percentage, bool (*i
                         }
 
                         log_info("Selected '%s'.", l[u-1]);
-                        if (free_and_strdup(ret, l[u-1]) < 0)
-                                return log_oom();
-
-                        return 0;
+                        return free_and_strdup_warn(ret, l[u-1]);
                 }
 
                 if (!is_valid(p)) {
@@ -1049,13 +1047,13 @@ static int parse_argv(int argc, char *argv[]) {
                         return version();
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, true, &arg_root);
+                        r = parse_path_argument(optarg, true, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
 
                 case ARG_IMAGE:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_image);
+                        r = parse_path_argument(optarg, false, &arg_image);
                         if (r < 0)
                                 return r;
                         break;
@@ -1146,9 +1144,9 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_MACHINE_ID:
-                        if (sd_id128_from_string(optarg, &arg_machine_id) < 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Failed to parse machine id %s.", optarg);
+                        r = sd_id128_from_string(optarg, &arg_machine_id);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse machine id %s.", optarg);
 
                         break;
 
index cd012f0f3ae49dec94cb6ef68f663e0ab10ec3ae..584d441c9425a65fc49597f5dd3f17c3118b75d1 100644 (file)
@@ -172,7 +172,7 @@ static int process_progress(int fd, FILE* console) {
         }
 
         for (;;) {
-                int pass, m;
+                int pass;
                 unsigned long cur, max;
                 _cleanup_free_ char *device = NULL;
                 double p;
@@ -206,18 +206,17 @@ static int process_progress(int fd, FILE* console) {
                 last = t;
 
                 p = percent(pass, cur, max);
-                fprintf(console, "\r%s: fsck %3.1f%% complete...\r%n", device, p, &m);
-                fflush(console);
+                r = fprintf(console, "\r%s: fsck %3.1f%% complete...\r", device, p);
+                if (r < 0)
+                        return -EIO; /* No point in continuing if something happened to our output stream */
 
-                if (m > clear)
-                        clear = m;
+                fflush(console);
+                clear = MAX(clear, r);
         }
 
         if (clear > 0) {
-                unsigned j;
-
                 fputc('\r', console);
-                for (j = 0; j < (unsigned) clear; j++)
+                for (int j = 0; j < clear; j++)
                         fputc(' ', console);
                 fputc('\r', console);
                 fflush(console);
index b8862f0793dbc32def79d682a46fc8dbf01e6e02..a526d6e8fa8f6ce58940ad0082e7ce07037d5449 100644 (file)
@@ -827,16 +827,14 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_root_what, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_root_what, value);
 
         } else if (streq(key, "rootfstype")) {
 
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_root_fstype, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_root_fstype, value);
 
         } else if (streq(key, "rootflags")) {
 
@@ -851,24 +849,21 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_root_hash, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_root_hash, value);
 
         } else if (streq(key, "mount.usr")) {
 
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_usr_what, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_usr_what, value);
 
         } else if (streq(key, "mount.usrfstype")) {
 
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_usr_fstype, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_usr_fstype, value);
 
         } else if (streq(key, "mount.usrflags")) {
 
index bf35fa03f0d40c3a27c544530ab3a585caf779a9..83fc86efe358693ef89f9477332d148ec57347ac 100644 (file)
@@ -23,6 +23,7 @@
 #include "main-func.h"
 #include "memory-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pkcs11-util.h"
@@ -2260,7 +2261,7 @@ static int parse_argv(int argc, char *argv[]) {
                                 break;
                         }
 
-                        r = parse_path_argument_and_warn(optarg, false, &hd);
+                        r = parse_path_argument(optarg, false, &hd);
                         if (r < 0)
                                 return r;
 
@@ -2481,7 +2482,7 @@ static int parse_argv(int argc, char *argv[]) {
                                 break;
                         }
 
-                        r = parse_path_argument_and_warn(optarg, false, &v);
+                        r = parse_path_argument(optarg, false, &v);
                         if (r < 0)
                                 return r;
 
@@ -3233,7 +3234,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_JSON:
-                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
                         if (r <= 0)
                                 return r;
 
index b0b2d8029fb3517c5f61d51dde6eb76496a1ca1f..c6b34d28d402640c5e76719e52416ae05170393d 100644 (file)
@@ -518,7 +518,7 @@ static int luks_validate(
         blkid_loff_t offset = 0, size = 0;
         blkid_partlist pl;
         bool found = false;
-        int r, i, n;
+        int r, n;
 
         assert(fd >= 0);
         assert(label);
@@ -570,9 +570,9 @@ static int luks_validate(
         if (n < 0)
                 return errno > 0 ? -errno : -EIO;
 
-        for (i = 0; i < n; i++) {
+        for (int i = 0; i < n; i++) {
                 blkid_partition pp;
-                sd_id128_t id;
+                sd_id128_t id = SD_ID128_NULL;
                 const char *sid;
 
                 errno = 0;
@@ -681,12 +681,12 @@ static int luks_validate_home_record(
                 PasswordCache *cache,
                 UserRecord **ret_luks_home_record) {
 
-        int r, token;
+        int r;
 
         assert(cd);
         assert(h);
 
-        for (token = 0;; token++) {
+        for (int token = 0;; token++) {
                 _cleanup_(json_variant_unrefp) JsonVariant *v = NULL, *rr = NULL;
                 _cleanup_(EVP_CIPHER_CTX_freep) EVP_CIPHER_CTX *context = NULL;
                 _cleanup_(user_record_unrefp) UserRecord *lhr = NULL;
@@ -2423,7 +2423,7 @@ static int prepare_resize_partition(
         _cleanup_(fdisk_unref_contextp) struct fdisk_context *c = NULL;
         _cleanup_(fdisk_unref_tablep) struct fdisk_table *t = NULL;
         _cleanup_free_ char *path = NULL, *disk_uuid_as_string = NULL;
-        size_t n_partitions, i;
+        size_t n_partitions;
         sd_id128_t disk_uuid;
         bool found = false;
         int r;
@@ -2473,7 +2473,7 @@ static int prepare_resize_partition(
                 return log_error_errno(r, "Failed to acquire partition table: %m");
 
         n_partitions = fdisk_table_get_nents(t);
-        for (i = 0; i < n_partitions; i++)  {
+        for (size_t i = 0; i < n_partitions; i++)  {
                 struct fdisk_partition *p;
 
                 p = fdisk_table_get_partition(t, i);
@@ -2898,7 +2898,7 @@ int home_passwd_luks(
                 PasswordCache *cache,      /* the passwords acquired via PKCS#11/FIDO2 security tokens */
                 char **effective_passwords /* new passwords */) {
 
-        size_t volume_key_size, i, max_key_slots, n_effective;
+        size_t volume_key_size, max_key_slots, n_effective;
         _cleanup_(erase_and_freep) void *volume_key = NULL;
         struct crypt_pbkdf_type good_pbkdf, minimal_pbkdf;
         const char *type;
@@ -2943,7 +2943,7 @@ int home_passwd_luks(
         build_good_pbkdf(&good_pbkdf, h);
         build_minimal_pbkdf(&minimal_pbkdf, h);
 
-        for (i = 0; i < max_key_slots; i++) {
+        for (size_t i = 0; i < max_key_slots; i++) {
                 r = crypt_keyslot_destroy(setup->crypt_device, i);
                 if (r < 0 && !IN_SET(r, -ENOENT, -EINVAL)) /* Returns EINVAL or ENOENT if there's no key in this slot already */
                         return log_error_errno(r, "Failed to destroy LUKS password: %m");
index 20b75846435ffe074d23f1aa21f6b9fb79d4875f..a1b7bee2a3b218bbc4f29d692e654fef1ede8708 100644 (file)
@@ -55,6 +55,7 @@
 #include "mountpoint-util.h"
 #include "nulstr-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pcre2-dlopen.h"
@@ -719,13 +720,13 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ true, &arg_root);
+                        r = parse_path_argument(optarg, /* suppress_root= */ true, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
 
                 case ARG_IMAGE:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_image);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
                         if (r < 0)
                                 return r;
                         break;
index 4966db07b35d5dcf015845fdbbc3bf6dae070e27..dc6211bc978f608f33b1d968781db71d46bcc784 100644 (file)
@@ -75,6 +75,8 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_common_errors[] = {
         SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_LINK,                 ENXIO),
         SD_BUS_ERROR_MAP(BUS_ERROR_LINK_BUSY,                    EBUSY),
         SD_BUS_ERROR_MAP(BUS_ERROR_NETWORK_DOWN,                 ENETDOWN),
+        SD_BUS_ERROR_MAP(BUS_ERROR_NO_SOURCE,                    ESRCH),
+        SD_BUS_ERROR_MAP(BUS_ERROR_STUB_LOOP,                    ELOOP),
         SD_BUS_ERROR_MAP(BUS_ERROR_NO_SUCH_DNSSD_SERVICE,        ENOENT),
         SD_BUS_ERROR_MAP(BUS_ERROR_DNSSD_SERVICE_EXISTS,         EEXIST),
 
index 56eb5551ec6fef894146e54cf36d7f92de80630a..e56b5d139dea5a2396d1f2f5ef08e2fc002c62e6 100644 (file)
@@ -73,6 +73,8 @@
 #define BUS_ERROR_NO_SUCH_LINK                 "org.freedesktop.resolve1.NoSuchLink"
 #define BUS_ERROR_LINK_BUSY                    "org.freedesktop.resolve1.LinkBusy"
 #define BUS_ERROR_NETWORK_DOWN                 "org.freedesktop.resolve1.NetworkDown"
+#define BUS_ERROR_NO_SOURCE                    "org.freedesktop.resolve1.NoSource"
+#define BUS_ERROR_STUB_LOOP                    "org.freedesktop.resolve1.StubLoop"
 #define BUS_ERROR_NO_SUCH_DNSSD_SERVICE        "org.freedesktop.resolve1.NoSuchDnssdService"
 #define BUS_ERROR_DNSSD_SERVICE_EXISTS         "org.freedesktop.resolve1.DnssdServiceExists"
 #define _BUS_ERROR_DNS                         "org.freedesktop.resolve1.DnsError."
index aaf186ba69f4a64baf37db144b2eb1f773e0859b..429dbadb6c946453b2d9df82ca1b0005c0f62c0b 100644 (file)
@@ -664,10 +664,11 @@ int compress_stream_lz4(int fdf, int fdt, uint64_t max_bytes) {
                 offset += n;
                 total_out += n;
 
-                if (max_bytes != (uint64_t) -1 && total_out > (size_t) max_bytes)
-                        return log_debug_errno(SYNTHETIC_ERRNO(EFBIG),
-                                               "Compressed stream longer than %" PRIu64 " bytes",
-                                               max_bytes);
+                if (max_bytes != (uint64_t) -1 && total_out > (size_t) max_bytes) {
+                        r = log_debug_errno(SYNTHETIC_ERRNO(EFBIG),
+                                            "Compressed stream longer than %" PRIu64 " bytes", max_bytes);
+                        goto cleanup;
+                }
 
                 if (size - offset < frame_size + 4) {
                         k = loop_write(fdt, buf, offset, false);
index b433bd21dc02ab0eedf9fa4ca0dd7796e262be7e..fd7f07a6c1ff384092c493c13b611b1fd297b68d 100644 (file)
@@ -19,7 +19,7 @@
 struct reply_callback {
         sd_netlink_message_handler_t callback;
         usec_t timeout;
-        uint64_t serial;
+        uint32_t serial;
         unsigned prioq_idx;
 };
 
index db9fcd79dd050673d02d2eb834bdcfc38c00294e..f754d08ef44057706827e87484191cc15ceea382 100644 (file)
@@ -17,6 +17,9 @@
 #include "string-util.h"
 #include "util.h"
 
+/* Some really high limit, to catch programming errors */
+#define REPLY_CALLBACKS_MAX UINT16_MAX
+
 static int sd_netlink_new(sd_netlink **ret) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
 
@@ -33,11 +36,29 @@ static int sd_netlink_new(sd_netlink **ret) {
                 .original_pid = getpid_cached(),
                 .protocol = -1,
 
-                /* Change notification responses have sequence 0, so we must
-                 * start our request sequence numbers at 1, or we may confuse our
-                 * responses with notifications from the kernel */
-                .serial = 1,
-
+                /* Kernel change notification messages have sequence number 0. We want to avoid that with our
+                 * own serials, in order not to get confused when matching up kernel replies to our earlier
+                 * requests.
+                 *
+                 * Moreover, when using netlink socket activation (i.e. where PID 1 binds an AF_NETLINK
+                 * socket for us and passes it to us across execve()) and we get restarted multiple times
+                 * while the socket sticks around we might get confused by replies from earlier runs coming
+                 * in late â€” which is pretty likely if we'd start our sequence numbers always from 1. Hence,
+                 * let's start with a value based on the system clock. This should make collisions much less
+                 * likely (though still theoretically possible). We use a 32 bit Âµs counter starting at boot
+                 * for this (and explicitly exclude the zero, see above). This counter will wrap around after
+                 * a bit more than 1h, but that's hopefully OK as the kernel shouldn't take that long to
+                 * reply to our requests.
+                 *
+                 * We only pick the initial start value this way. For each message we simply increase the
+                 * sequence number by 1. This means we could enqueue 1 netlink message per Âµs without risking
+                 * collisions, which should be OK.
+                 *
+                 * Note this means the serials will be in the range 1…UINT32_MAX here.
+                 *
+                 * (In an ideal world we'd attach the current serial counter to the netlink socket itself
+                 * somehow, to avoid all this, but I couldn't come up with a nice way to do this) */
+                .serial = (uint32_t) (now(CLOCK_MONOTONIC) % UINT32_MAX) + 1,
         };
 
         /* We guarantee that the read buffer has at least space for
@@ -89,9 +110,7 @@ static bool rtnl_pid_changed(const sd_netlink *rtnl) {
 
 int sd_netlink_open_fd(sd_netlink **ret, int fd) {
         _cleanup_(sd_netlink_unrefp) sd_netlink *rtnl = NULL;
-        int r;
-        int protocol;
-        socklen_t l;
+        int r, protocol;
 
         assert_return(ret, -EINVAL);
         assert_return(fd >= 0, -EBADF);
@@ -100,8 +119,7 @@ int sd_netlink_open_fd(sd_netlink **ret, int fd) {
         if (r < 0)
                 return r;
 
-        l = sizeof(protocol);
-        r = getsockopt(fd, SOL_SOCKET, SO_PROTOCOL, &protocol, &l);
+        r = getsockopt_int(fd, SOL_SOCKET, SO_PROTOCOL, &protocol);
         if (r < 0)
                 return r;
 
@@ -190,18 +208,25 @@ static sd_netlink *netlink_free(sd_netlink *rtnl) {
 DEFINE_TRIVIAL_REF_UNREF_FUNC(sd_netlink, sd_netlink, netlink_free);
 
 static void rtnl_seal_message(sd_netlink *rtnl, sd_netlink_message *m) {
+        uint32_t picked;
+
         assert(rtnl);
         assert(!rtnl_pid_changed(rtnl));
         assert(m);
         assert(m->hdr);
 
-        /* don't use seq == 0, as that is used for broadcasts, so we
-           would get confused by replies to such messages */
-        m->hdr->nlmsg_seq = rtnl->serial++ ? : rtnl->serial++;
+        /* Avoid collisions with outstanding requests */
+        do {
+                picked = rtnl->serial;
 
-        rtnl_message_seal(m);
+                /* Don't use seq == 0, as that is used for broadcasts, so we would get confused by replies to
+                   such messages */
+                rtnl->serial = rtnl->serial == UINT32_MAX ? 1 : rtnl->serial + 1;
 
-        return;
+        } while (hashmap_contains(rtnl->reply_callbacks, UINT32_TO_PTR(picked)));
+
+        m->hdr->nlmsg_seq = picked;
+        rtnl_message_seal(m);
 }
 
 int sd_netlink_send(sd_netlink *nl,
@@ -339,7 +364,7 @@ static int process_timeout(sd_netlink *rtnl) {
 
         assert_se(prioq_pop(rtnl->reply_callbacks_prioq) == c);
         c->timeout = 0;
-        hashmap_remove(rtnl->reply_callbacks, &c->serial);
+        hashmap_remove(rtnl->reply_callbacks, UINT32_TO_PTR(c->serial));
 
         slot = container_of(c, sd_netlink_slot, reply_callback);
 
@@ -359,7 +384,7 @@ static int process_timeout(sd_netlink *rtnl) {
 static int process_reply(sd_netlink *rtnl, sd_netlink_message *m) {
         struct reply_callback *c;
         sd_netlink_slot *slot;
-        uint64_t serial;
+        uint32_t serial;
         uint16_t type;
         int r;
 
@@ -367,7 +392,7 @@ static int process_reply(sd_netlink *rtnl, sd_netlink_message *m) {
         assert(m);
 
         serial = rtnl_message_get_serial(m);
-        c = hashmap_remove(rtnl->reply_callbacks, &serial);
+        c = hashmap_remove(rtnl->reply_callbacks, UINT32_TO_PTR(serial));
         if (!c)
                 return 0;
 
@@ -412,20 +437,19 @@ static int process_match(sd_netlink *rtnl, sd_netlink_message *m) {
                 return r;
 
         LIST_FOREACH(match_callbacks, c, rtnl->match_callbacks) {
-                if (type == c->type) {
-                        slot = container_of(c, sd_netlink_slot, match_callback);
+                if (type != c->type)
+                        continue;
 
-                        r = c->callback(rtnl, m, slot->userdata);
-                        if (r != 0) {
-                                if (r < 0)
-                                        log_debug_errno(r, "sd-netlink: match callback %s%s%sfailed: %m",
-                                                        slot->description ? "'" : "",
-                                                        strempty(slot->description),
-                                                        slot->description ? "' " : "");
+                slot = container_of(c, sd_netlink_slot, match_callback);
 
-                                break;
-                        }
-                }
+                r = c->callback(rtnl, m, slot->userdata);
+                if (r < 0)
+                        log_debug_errno(r, "sd-netlink: match callback %s%s%sfailed: %m",
+                                        slot->description ? "'" : "",
+                                        strempty(slot->description),
+                                        slot->description ? "' " : "");
+                if (r != 0)
+                        break;
         }
 
         return 1;
@@ -568,7 +592,6 @@ int sd_netlink_call_async(
                 uint64_t usec,
                 const char *description) {
         _cleanup_free_ sd_netlink_slot *slot = NULL;
-        uint32_t s;
         int r, k;
 
         assert_return(nl, -EINVAL);
@@ -576,7 +599,10 @@ int sd_netlink_call_async(
         assert_return(callback, -EINVAL);
         assert_return(!rtnl_pid_changed(nl), -ECHILD);
 
-        r = hashmap_ensure_allocated(&nl->reply_callbacks, &uint64_hash_ops);
+        if (hashmap_size(nl->reply_callbacks) >= REPLY_CALLBACKS_MAX)
+                return -ERANGE;
+
+        r = hashmap_ensure_allocated(&nl->reply_callbacks, &trivial_hash_ops);
         if (r < 0)
                 return r;
 
@@ -593,20 +619,18 @@ int sd_netlink_call_async(
         slot->reply_callback.callback = callback;
         slot->reply_callback.timeout = calc_elapse(usec);
 
-        k = sd_netlink_send(nl, m, &s);
+        k = sd_netlink_send(nl, m, &slot->reply_callback.serial);
         if (k < 0)
                 return k;
 
-        slot->reply_callback.serial = s;
-
-        r = hashmap_put(nl->reply_callbacks, &slot->reply_callback.serial, &slot->reply_callback);
+        r = hashmap_put(nl->reply_callbacks, UINT32_TO_PTR(slot->reply_callback.serial), &slot->reply_callback);
         if (r < 0)
                 return r;
 
         if (slot->reply_callback.timeout != 0) {
                 r = prioq_put(nl->reply_callbacks_prioq, &slot->reply_callback, &slot->reply_callback.prioq_idx);
                 if (r < 0) {
-                        (void) hashmap_remove(nl->reply_callbacks, &slot->reply_callback.serial);
+                        (void) hashmap_remove(nl->reply_callbacks, UINT32_TO_PTR(slot->reply_callback.serial));
                         return r;
                 }
         }
index 918e05e1cdd98c4448bdd40ef7aa9efcc90d1c79..3e135858a83c5d0b311779eda85b4852fbfce3d4 100644 (file)
@@ -22,6 +22,7 @@
 #include "main-func.h"
 #include "memory-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
@@ -1395,14 +1396,9 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case 's':
-                        if (streq(optarg, "help")) {
-                                DUMP_STRING_TABLE(signal, int, _NSIG);
-                                return 0;
-                        }
-
-                        arg_signal = signal_from_string(optarg);
-                        if (arg_signal < 0)
-                                return log_error_errno(arg_signal, "Failed to parse signal string %s.", optarg);
+                        r = parse_signal_argument(optarg, &arg_signal);
+                        if (r <= 0)
+                                return r;
                         break;
 
                 case 'H':
index 6074b1b42eec4d2c874fb0b0262b7dc54a413d5d..69fb71cdc2d7f837e96f4ddaa1e3c738a8231ab0 100644 (file)
@@ -10,6 +10,7 @@
 #include "log.h"
 #include "machine-id-setup.h"
 #include "main-func.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "util.h"
@@ -76,7 +77,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return version();
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, true, &arg_root);
+                        r = parse_path_argument(optarg, true, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
index 3d6048eaff7c979faffc89cb043e8ea3534bd3ba..1ae10e5880a1d3ce6cc2a9d9a2db027c04094a3c 100644 (file)
@@ -39,6 +39,7 @@
 #include "mkdir.h"
 #include "nulstr-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -2715,15 +2716,9 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case 's':
-                        if (streq(optarg, "help")) {
-                                DUMP_STRING_TABLE(signal, int, _NSIG);
-                                return 0;
-                        }
-
-                        r = signal_from_string(optarg);
-                        if (r < 0)
-                                return log_error_errno(r, "Failed to parse signal string %s.", optarg);
-                        arg_signal = r;
+                        r = parse_signal_argument(optarg, &arg_signal);
+                        if (r <= 0)
+                                return r;
                         break;
 
                 case ARG_NO_ASK_PASSWORD:
index 39e67b57f8945544cbe093a4596a09e23ebb56a7..8b6fc520c5ebf4c7fb76059a31e2f6cfa16d2904 100644 (file)
@@ -241,13 +241,15 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case 't':
-                        if (free_and_strdup(&arg_mount_type, optarg) < 0)
-                                return log_oom();
+                        r = free_and_strdup_warn(&arg_mount_type, optarg);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case 'o':
-                        if (free_and_strdup(&arg_mount_options, optarg) < 0)
-                                return log_oom();
+                        r = free_and_strdup_warn(&arg_mount_options, optarg);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case ARG_OWNER: {
@@ -271,8 +273,9 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_DESCRIPTION:
-                        if (free_and_strdup(&arg_description, optarg) < 0)
-                                return log_oom();
+                        r = free_and_strdup_warn(&arg_description, optarg);
+                        if (r < 0)
+                                return r;
                         break;
 
                 case 'p':
index da23db947fe09be60bfcf232e9072fec6e7e8e12..e302a2cf3be2bb7759872123d305acdb9df547c3 100644 (file)
@@ -577,7 +577,7 @@ int config_parse_l2tp_session_l2spec(
 
         spec = l2tp_l2spec_type_from_string(rvalue);
         if (spec < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, spec,
                            "Failed to parse layer2 specific header type. Ignoring assignment: %s", rvalue);
                 return 0;
         }
index 81e8fd7cf14934910c128ea6b7a985eb581d8af6..b26064297b296c5ae7f1d138acbfe0859c2283bc 100644 (file)
@@ -139,7 +139,7 @@ int config_parse_netdev_kind(
 
         k = netdev_kind_from_string(rvalue);
         if (k < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse netdev kind, ignoring assignment: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, k, "Failed to parse netdev kind, ignoring assignment: %s", rvalue);
                 return 0;
         }
 
index 66e8868284829fcdb6ae0f39ac814c173d5bb477..fdaec488a2196c2a8cfc9a022468d04cd900f336 100644 (file)
@@ -581,7 +581,8 @@ int config_parse_tunnel_key(const char *unit,
         if (r < 0) {
                 r = safe_atou32(rvalue, &k);
                 if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse tunnel key ignoring assignment: %s", rvalue);
+                        log_syntax(unit, LOG_WARNING, filename, line, r,
+                                   "Failed to parse tunnel key ignoring assignment: %s", rvalue);
                         return 0;
                 }
         } else
index b52a5f2e26f5e136c6204bb36bce90d93cd2006f..095dde01200273ddd069e5bd9a8e0b0c69cd56dd 100644 (file)
@@ -326,6 +326,7 @@ static int address_add_foreign(Link *link, const Address *in, Address **ret) {
 }
 
 static int address_add(Link *link, const Address *in, Address **ret) {
+        bool is_new = false;
         Address *address;
         int r;
 
@@ -338,6 +339,7 @@ static int address_add(Link *link, const Address *in, Address **ret) {
                 r = address_add_internal(link, &link->addresses, in, &address);
                 if (r < 0)
                         return r;
+                is_new = true;
         } else if (r == 0) {
                 /* Take over a foreign address */
                 r = set_ensure_put(&link->addresses, &address_hash_ops, address);
@@ -353,8 +355,7 @@ static int address_add(Link *link, const Address *in, Address **ret) {
 
         if (ret)
                 *ret = address;
-
-        return 0;
+        return is_new;
 }
 
 static int address_update(Address *address, const Address *src) {
@@ -471,8 +472,8 @@ static void log_address_debug(const Address *address, const char *str, const Lin
 
         if (DEBUG_LOGGING) {
                 _cleanup_free_ char *addr = NULL, *peer = NULL;
-                char valid_buf[FORMAT_TIMESPAN_MAX];
-                const char *valid_str = NULL;
+                char valid_buf[FORMAT_TIMESPAN_MAX], preferred_buf[FORMAT_TIMESPAN_MAX];
+                const char *valid_str = NULL, *preferred_str = NULL;
                 bool has_peer;
 
                 (void) in_addr_to_string(address->family, &address->in_addr, &addr);
@@ -485,10 +486,16 @@ static void log_address_debug(const Address *address, const char *str, const Lin
                                                     address->cinfo.ifa_valid * USEC_PER_SEC,
                                                     USEC_PER_SEC);
 
-                log_link_debug(link, "%s address: %s%s%s/%u (valid %s%s)",
+                if (address->cinfo.ifa_prefered != CACHE_INFO_INFINITY_LIFE_TIME)
+                        preferred_str = format_timespan(preferred_buf, FORMAT_TIMESPAN_MAX,
+                                                        address->cinfo.ifa_prefered * USEC_PER_SEC,
+                                                        USEC_PER_SEC);
+
+                log_link_debug(link, "%s address: %s%s%s/%u (valid %s%s, preferred %s%s)",
                                str, strnull(addr), has_peer ? " peer " : "",
                                has_peer ? strnull(peer) : "", address->prefixlen,
-                               valid_str ? "for " : "forever", strempty(valid_str));
+                               valid_str ? "for " : "forever", strempty(valid_str),
+                               preferred_str ? "for " : "forever", strempty(preferred_str));
         }
 }
 
@@ -511,6 +518,37 @@ static int address_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, Link
         return 1;
 }
 
+static int address_set_netlink_message(const Address *address, sd_netlink_message *req, Link *link) {
+        int r;
+
+        assert(address);
+        assert(req);
+        assert(link);
+
+        r = sd_rtnl_message_addr_set_prefixlen(req, address->prefixlen);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Could not set prefixlen: %m");
+
+        /* On remove, only IFA_F_MANAGETEMPADDR flag for IPv6 addresses are used. But anyway, set all
+         * flags here unconditionally. Without setting the flag, the template addresses generated by
+         * kernel will not be removed automatically when the main address is removed. */
+        r = sd_rtnl_message_addr_set_flags(req, address->flags & 0xff);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Could not set flags: %m");
+
+        if ((address->flags & ~0xff) != 0) {
+                r = sd_netlink_message_append_u32(req, IFA_FLAGS, address->flags);
+                if (r < 0)
+                        return log_link_error_errno(link, r, "Could not set extended flags: %m");
+        }
+
+        r = netlink_message_append_in_addr_union(req, IFA_LOCAL, address->family, &address->in_addr);
+        if (r < 0)
+                return log_link_error_errno(link, r, "Could not append IFA_LOCAL attribute: %m");
+
+        return 0;
+}
+
 int address_remove(
                 const Address *address,
                 Link *link,
@@ -533,13 +571,9 @@ int address_remove(
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not allocate RTM_DELADDR message: %m");
 
-        r = sd_rtnl_message_addr_set_prefixlen(req, address->prefixlen);
+        r = address_set_netlink_message(address, req, link);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set prefixlen: %m");
-
-        r = netlink_message_append_in_addr_union(req, IFA_LOCAL, address->family, &address->in_addr);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFA_LOCAL attribute: %m");
+                return r;
 
         r = netlink_call_async(link->manager->rtnl, NULL, req,
                                callback ?: address_remove_handler,
@@ -799,13 +833,12 @@ int address_configure(
                 const Address *address,
                 Link *link,
                 link_netlink_message_handler_t callback,
-                bool update,
                 Address **ret) {
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
         Address *acquired_address, *a;
-        uint32_t flags;
-        int r;
+        bool update;
+        int r, k;
 
         assert(address);
         assert(IN_SET(address->family, AF_INET, AF_INET6));
@@ -827,6 +860,8 @@ int address_configure(
         if (acquired_address)
                 address = acquired_address;
 
+        update = address_get(link, address, NULL) >= 0;
+
         log_address_debug(address, update ? "Updating" : "Configuring", link);
 
         if (update)
@@ -838,29 +873,14 @@ int address_configure(
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not allocate RTM_NEWADDR message: %m");
 
-        r = sd_rtnl_message_addr_set_prefixlen(req, address->prefixlen);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not set prefixlen: %m");
-
-        flags = address->flags | IFA_F_PERMANENT;
-        r = sd_rtnl_message_addr_set_flags(req, flags & 0xff);
+        r = address_set_netlink_message(address, req, link);
         if (r < 0)
-                return log_link_error_errno(link, r, "Could not set flags: %m");
-
-        if (flags & ~0xff) {
-                r = sd_netlink_message_append_u32(req, IFA_FLAGS, flags);
-                if (r < 0)
-                        return log_link_error_errno(link, r, "Could not set extended flags: %m");
-        }
+                return r;
 
         r = sd_rtnl_message_addr_set_scope(req, address->scope);
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not set scope: %m");
 
-        r = netlink_message_append_in_addr_union(req, IFA_LOCAL, address->family, &address->in_addr);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not append IFA_LOCAL attribute: %m");
-
         if (in_addr_is_null(address->family, &address->in_addr_peer) == 0) {
                 r = netlink_message_append_in_addr_union(req, IFA_ADDRESS, address->family, &address->in_addr_peer);
                 if (r < 0)
@@ -881,9 +901,9 @@ int address_configure(
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not append IFA_CACHEINFO attribute: %m");
 
-        r = address_add(link, address, &a);
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not add address: %m");
+        k = address_add(link, address, &a);
+        if (k < 0)
+                return log_link_error_errno(link, k, "Could not add address: %m");
 
         r = address_set_masquerade(a, true);
         if (r < 0)
@@ -906,7 +926,7 @@ int address_configure(
         if (ret)
                 *ret = a;
 
-        return 1;
+        return k;
 }
 
 static int static_address_ready_callback(Address *address) {
@@ -988,14 +1008,14 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link)
         return 1;
 }
 
-static int static_address_configure(const Address *address, Link *link, bool update) {
+static int static_address_configure(const Address *address, Link *link) {
         Address *ret;
         int r;
 
         assert(address);
         assert(link);
 
-        r = address_configure(address, link, address_handler, update, &ret);
+        r = address_configure(address, link, address_handler, &ret);
         if (r < 0)
                 return log_link_warning_errno(link, r, "Could not configure static address: %m");
 
@@ -1030,10 +1050,7 @@ int link_set_addresses(Link *link) {
         }
 
         ORDERED_HASHMAP_FOREACH(ad, link->network->addresses_by_section) {
-                bool update;
-
-                update = address_get(link, ad, NULL) > 0;
-                r = static_address_configure(ad, link, update);
+                r = static_address_configure(ad, link);
                 if (r < 0)
                         return r;
         }
@@ -1057,7 +1074,7 @@ int link_set_addresses(Link *link) {
                         return log_link_warning_errno(link, r, "Could not generate EUI64 address: %m");
 
                 address->family = AF_INET6;
-                r = static_address_configure(address, link, true);
+                r = static_address_configure(address, link);
                 if (r < 0)
                         return r;
         }
index 4764766996f735b613a2dcf700b84c8bdd918929..7c2d0db3d07f6a0a1adc31176a2c54ed4056eb60 100644 (file)
@@ -49,7 +49,7 @@ typedef struct Address {
 int address_new(Address **ret);
 Address *address_free(Address *address);
 int address_get(Link *link, const Address *in, Address **ret);
-int address_configure(const Address *address, Link *link, link_netlink_message_handler_t callback, bool update, Address **ret);
+int address_configure(const Address *address, Link *link, link_netlink_message_handler_t callback, Address **ret);
 int address_remove(const Address *address, Link *link, link_netlink_message_handler_t callback);
 bool address_equal(const Address *a1, const Address *a2);
 bool address_is_ready(const Address *a);
index bf51624ec489984b3dd8a8428a2fd328d9c7a46a..c413f167394e811da0c9f308434fefa897b2e0f3 100644 (file)
@@ -93,7 +93,7 @@ int config_parse_duid_type(
 
         type = duid_type_from_string(type_string);
         if (type < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, type,
                            "Failed to parse DUID type '%s', ignoring.", type_string);
                 return 0;
         }
index cec7bb6369996efcbb48b4c483ef50b650b6fa70..6bac720200103d7cfbd29c0ccd9a51f5f970295d 100644 (file)
@@ -283,16 +283,9 @@ int config_parse_dhcp(
                 /* Previously, we had a slightly different enum here,
                  * support its values for compatibility. */
 
-                if (streq(rvalue, "none"))
-                        s = ADDRESS_FAMILY_NO;
-                else if (streq(rvalue, "v4"))
-                        s = ADDRESS_FAMILY_IPV4;
-                else if (streq(rvalue, "v6"))
-                        s = ADDRESS_FAMILY_IPV6;
-                else if (streq(rvalue, "both"))
-                        s = ADDRESS_FAMILY_YES;
-                else {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                s = dhcp_deprecated_address_family_from_string(rvalue);
+                if (s < 0) {
+                        log_syntax(unit, LOG_WARNING, filename, line, s,
                                    "Failed to parse DHCP option, ignoring: %s", rvalue);
                         return 0;
                 }
@@ -671,7 +664,7 @@ int config_parse_dhcp_send_option(
 
         type = dhcp_option_data_type_from_string(word);
         if (type < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, type,
                            "Invalid DHCP option data type, ignoring assignment: %s", p);
                 return 0;
         }
index bbdd31a93d99616dfe0c4205d436220003c1b86e..1559e0cfd850aa34b50bce96ae6330e195f047c2 100644 (file)
@@ -870,7 +870,7 @@ static int dhcp4_update_address(Link *link, bool announce) {
 
         /* allow reusing an existing address and simply update its lifetime
          * in case it already exists */
-        r = address_configure(addr, link, dhcp4_address_handler, true, &ret);
+        r = address_configure(addr, link, dhcp4_address_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv4 address: %m");
 
index 85a533b32fc94994d75f491d1d062376ec1dae8e..326c9f3fcf356a85a197251262c3810c53221199 100644 (file)
@@ -11,6 +11,7 @@
 
 #include "escape.h"
 #include "hashmap.h"
+#include "hostname-setup.h"
 #include "hostname-util.h"
 #include "missing_network.h"
 #include "networkd-address.h"
@@ -136,7 +137,7 @@ static int dhcp6_pd_remove_old(Link *link, bool force) {
         assert(link);
         assert(link->manager);
 
-        if (!force && (link->dhcp6_pd_address_messages != 0 || link->dhcp6_pd_route_configured != 0))
+        if (!force && (link->dhcp6_pd_address_messages != 0 || link->dhcp6_pd_route_messages != 0))
                 return 0;
 
         if (set_isempty(link->dhcp6_pd_addresses_old) && set_isempty(link->dhcp6_pd_routes_old))
@@ -280,6 +281,8 @@ static int dhcp6_set_pd_route(Link *link, const union in_addr_union *prefix, con
         r = route_configure(route, link, dhcp6_pd_route_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv6 prefix route: %m");
+        if (r > 0)
+                link->dhcp6_pd_route_configured = false;
 
         link->dhcp6_pd_route_messages++;
 
@@ -390,9 +393,11 @@ static int dhcp6_set_pd_address(
         address->cinfo.ifa_valid = lifetime_valid;
         SET_FLAG(address->flags, IFA_F_MANAGETEMPADDR, link->network->dhcp6_pd_manage_temporary_address);
 
-        r = address_configure(address, link, dhcp6_pd_address_handler, true, &ret);
+        r = address_configure(address, link, dhcp6_pd_address_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv6 delegated prefix address: %m");
+        if (r > 0)
+                link->dhcp6_pd_address_configured = false;
 
         link->dhcp6_pd_address_messages++;
 
@@ -575,8 +580,6 @@ static int dhcp6_pd_prepare(Link *link) {
         if (!link_dhcp6_pd_is_enabled(link))
                 return 0;
 
-        link->dhcp6_pd_address_configured = false;
-        link->dhcp6_pd_route_configured = false;
         link->dhcp6_pd_prefixes_assigned = true;
 
         while ((address = set_steal_first(link->dhcp6_pd_addresses))) {
@@ -815,6 +818,8 @@ static int dhcp6_set_unreachable_route(Link *link, const union in_addr_union *ad
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set unreachable route for DHCPv6 delegated subnet %s/%u: %m",
                                             strna(buf), prefixlen);
+        if (r > 0)
+                link->dhcp6_route_configured = false;
 
         link->dhcp6_route_messages++;
 
@@ -1033,10 +1038,12 @@ static int dhcp6_update_address(
 
         log_dhcp6_address(link, addr, &buffer);
 
-        r = address_configure(addr, link, dhcp6_address_handler, true, &ret);
+        r = address_configure(addr, link, dhcp6_address_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set DHCPv6 address %s/%u: %m",
                                             strnull(buffer), addr->prefixlen);
+        if (r > 0)
+                link->dhcp6_address_configured = false;
 
         link->dhcp6_address_messages++;
 
@@ -1073,6 +1080,25 @@ static int dhcp6_address_acquired(Link *link) {
                         return r;
         }
 
+        if (link->network->dhcp6_use_fqdn) {
+                const char *dhcpname = NULL;
+                _cleanup_free_ char *hostname = NULL;
+                (void) sd_dhcp6_lease_get_fqdn(link->dhcp6_lease, &dhcpname);
+
+                if (dhcpname) {
+                        r = shorten_overlong(dhcpname, &hostname);
+                        if (r < 0)
+                                log_link_warning_errno(link, r, "Unable to shorten overlong DHCP hostname '%s', ignoring: %m", dhcpname);
+                        if (r == 1)
+                                log_link_notice(link, "Overlong DHCP hostname received, shortened from '%s' to '%s'", dhcpname, hostname);
+                }
+                if (hostname) {
+                        r = manager_set_hostname(link->manager, hostname);
+                        if (r < 0)
+                                log_link_error_errno(link, r, "Failed to set transient hostname to '%s': %m", hostname);
+                }
+        }
+
         return 0;
 }
 
@@ -1083,9 +1109,6 @@ static int dhcp6_lease_ip_acquired(sd_dhcp6_client *client, Link *link) {
         Route *rt;
         int r;
 
-        link->dhcp6_address_configured = false;
-        link->dhcp6_route_configured = false;
-
         while ((a = set_steal_first(link->dhcp6_addresses))) {
                 r = set_ensure_put(&link->dhcp6_addresses_old, &address_hash_ops, a);
                 if (r < 0)
index 7e1c1ac16eae6c558c81a7f506573688563676d5..65266633e3b01f40da887c9cbfd8bff900daae87 100644 (file)
@@ -92,7 +92,7 @@ static int ipv4ll_address_claimed(sd_ipv4ll *ll, Link *link) {
         ll_addr->broadcast.s_addr = ll_addr->in_addr.in.s_addr | htobe32(0xfffffffflu >> ll_addr->prefixlen);
         ll_addr->scope = RT_SCOPE_LINK;
 
-        r = address_configure(ll_addr, link, ipv4ll_address_handler, false, NULL);
+        r = address_configure(ll_addr, link, ipv4ll_address_handler, NULL);
         if (r < 0)
                 return r;
 
index 4df31df4a20c22e9333fc6ba24c41f52c52aa347..3ffe587a862f485feddee2dbf317e4eb1d9b6a7c 100644 (file)
@@ -686,21 +686,81 @@ const sd_bus_vtable link_vtable[] = {
         SD_BUS_PROPERTY("AdministrativeState", "s", property_get_administrative_state, offsetof(Link, state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("BitRates", "(tt)", property_get_bit_rates, 0, 0),
 
-        SD_BUS_METHOD("SetNTP", "as", NULL, bus_link_method_set_ntp_servers, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDNS", "a(iay)", NULL, bus_link_method_set_dns_servers, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDNSEx", "a(iayqs)", NULL, bus_link_method_set_dns_servers_ex, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDomains", "a(sb)", NULL, bus_link_method_set_domains, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDefaultRoute", "b", NULL, bus_link_method_set_default_route, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLLMNR", "s", NULL, bus_link_method_set_llmnr, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetMulticastDNS", "s", NULL, bus_link_method_set_mdns, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDNSOverTLS", "s", NULL, bus_link_method_set_dns_over_tls, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDNSSEC", "s", NULL, bus_link_method_set_dnssec, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetDNSSECNegativeTrustAnchors", "as", NULL, bus_link_method_set_dnssec_negative_trust_anchors, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("RevertNTP", NULL, NULL, bus_link_method_revert_ntp, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("RevertDNS", NULL, NULL, bus_link_method_revert_dns, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("Renew", NULL, NULL, bus_link_method_renew, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("ForceRenew", NULL, NULL, bus_link_method_force_renew, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("Reconfigure", NULL, NULL, bus_link_method_reconfigure, SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetNTP",
+                                SD_BUS_ARGS("as", servers),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_ntp_servers,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDNS",
+                                SD_BUS_ARGS("a(iay)", addresses),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_dns_servers,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDNSEx",
+                                SD_BUS_ARGS("a(iayqs)", addresses),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_dns_servers_ex,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDomains",
+                                SD_BUS_ARGS("a(sb)", domains),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_domains,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDefaultRoute",
+                                SD_BUS_ARGS("b", enable),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_default_route,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLLMNR",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_llmnr,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetMulticastDNS",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_mdns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDNSOverTLS",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_dns_over_tls,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDNSSEC",
+                                SD_BUS_ARGS("s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_dnssec,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetDNSSECNegativeTrustAnchors",
+                                SD_BUS_ARGS("as", names),
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_set_dnssec_negative_trust_anchors,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RevertNTP",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_revert_ntp,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RevertDNS",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_revert_dns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Renew",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_renew,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ForceRenew",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_force_renew,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Reconfigure",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_NO_RESULT,
+                                bus_link_method_reconfigure,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         SD_BUS_VTABLE_END
 };
index b03d948bd89565496c77aaac6ba736340754fabd..1b97e6584e2235226bfce52314a9dd201d3ea7e4 100644 (file)
@@ -17,6 +17,7 @@
 #include "parse-util.h"
 #include "random-util.h"
 #include "socket-util.h"
+#include "string-table.h"
 #include "string-util.h"
 #include "strv.h"
 #include "unaligned.h"
@@ -415,46 +416,6 @@ void link_lldp_emit_stop(Link *link) {
         link->lldp_emit_event_source = sd_event_source_unref(link->lldp_emit_event_source);
 }
 
-int config_parse_lldp_emit(
-                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) {
-
-        LLDPEmit *emit = data;
-        int r;
-
-        assert(filename);
-        assert(lvalue);
-        assert(rvalue);
-
-        if (isempty(rvalue))
-                *emit = LLDP_EMIT_NO;
-        else if (streq(rvalue, "nearest-bridge"))
-                *emit = LLDP_EMIT_NEAREST_BRIDGE;
-        else if (streq(rvalue, "non-tpmr-bridge"))
-                *emit = LLDP_EMIT_NON_TPMR_BRIDGE;
-        else if (streq(rvalue, "customer-bridge"))
-                *emit = LLDP_EMIT_CUSTOMER_BRIDGE;
-        else {
-                r = parse_boolean(rvalue);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse LLDP emission setting, ignoring: %s", rvalue);
-                        return 0;
-                }
-
-                *emit = r ? LLDP_EMIT_NEAREST_BRIDGE : LLDP_EMIT_NO;
-        }
-
-        return 0;
-}
-
 int config_parse_lldp_mud(
                 const char *unit,
                 const char *filename,
@@ -491,3 +452,13 @@ int config_parse_lldp_mud(
 
         return free_and_replace(n->lldp_mud, unescaped);
 }
+
+static const char * const lldp_emit_table[_LLDP_EMIT_MAX] = {
+        [LLDP_EMIT_NO]              = "no",
+        [LLDP_EMIT_NEAREST_BRIDGE]  = "nearest-bridge",
+        [LLDP_EMIT_NON_TPMR_BRIDGE] = "non-tpmr-bridge",
+        [LLDP_EMIT_CUSTOMER_BRIDGE] = "customer-bridge",
+};
+
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_WITH_BOOLEAN(lldp_emit, LLDPEmit, LLDP_EMIT_NEAREST_BRIDGE);
+DEFINE_CONFIG_PARSE_ENUM_WITH_DEFAULT(config_parse_lldp_emit, lldp_emit, LLDPEmit, LLDP_EMIT_NO, "Failed to parse LLDP emission setting");
index aae30cba0f97e2e38d00127aa30ab4cb32c4a01c..b8917f9de8cb9aca9c3e6b54a68608e10cdc7311 100644 (file)
@@ -13,6 +13,7 @@ typedef enum LLDPEmit {
         LLDP_EMIT_NON_TPMR_BRIDGE,
         LLDP_EMIT_CUSTOMER_BRIDGE,
         _LLDP_EMIT_MAX,
+        _LLDP_EMIT_INVALID = -EINVAL,
 } LLDPEmit;
 
 bool link_lldp_emit_enabled(Link *link);
index a0ac8b51fbf50ffa13fe2add0d7b922a3e823d8a..fce10a7e7dcfaeb20f80713b093fec735c35fcf7 100644 (file)
@@ -236,25 +236,101 @@ const sd_bus_vtable manager_vtable[] = {
         SD_BUS_PROPERTY("CarrierState", "s", property_get_carrier_state, offsetof(Manager, carrier_state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
         SD_BUS_PROPERTY("AddressState", "s", property_get_address_state, offsetof(Manager, address_state), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
 
-        SD_BUS_METHOD("ListLinks", NULL, "a(iso)", method_list_links, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("GetLinkByName", "s", "io", method_get_link_by_name, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("GetLinkByIndex", "i", "so", method_get_link_by_index, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkNTP", "ias", NULL, bus_method_set_link_ntp_servers, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDNS", "ia(iay)", NULL, bus_method_set_link_dns_servers, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDNSEx", "ia(iayqs)", NULL, bus_method_set_link_dns_servers_ex, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDomains", "ia(sb)", NULL, bus_method_set_link_domains, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDefaultRoute", "ib", NULL, bus_method_set_link_default_route, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkLLMNR", "is", NULL, bus_method_set_link_llmnr, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkMulticastDNS", "is", NULL, bus_method_set_link_mdns, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDNSOverTLS", "is", NULL, bus_method_set_link_dns_over_tls, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDNSSEC", "is", NULL, bus_method_set_link_dnssec, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("SetLinkDNSSECNegativeTrustAnchors", "ias", NULL, bus_method_set_link_dnssec_negative_trust_anchors, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("RevertLinkNTP", "i", NULL, bus_method_revert_link_ntp, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("RevertLinkDNS", "i", NULL, bus_method_revert_link_dns, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("RenewLink", "i", NULL, bus_method_renew_link, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("ForceRenewLink", "i", NULL, bus_method_force_renew_link, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("ReconfigureLink", "i", NULL, bus_method_reconfigure_link, SD_BUS_VTABLE_UNPRIVILEGED),
-        SD_BUS_METHOD("Reload", NULL, NULL, bus_method_reload, SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ListLinks",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_RESULT("a(iso)", links),
+                                method_list_links,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetLinkByName",
+                                SD_BUS_ARGS("s", name),
+                                SD_BUS_RESULT("i", ifindex, "o", path),
+                                method_get_link_by_name,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("GetLinkByIndex",
+                                SD_BUS_ARGS("i", ifindex),
+                                SD_BUS_RESULT("s", name, "o", path),
+                                method_get_link_by_index,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkNTP",
+                                SD_BUS_ARGS("i", ifindex, "as", servers),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_ntp_servers,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDNS",
+                                SD_BUS_ARGS("i", ifindex, "a(iay)", addresses),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_dns_servers,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDNSEx",
+                                SD_BUS_ARGS("i", ifindex, "a(iayqs)", addresses),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_dns_servers_ex,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDomains",
+                                SD_BUS_ARGS("i", ifindex, "a(sb)", domains),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_domains,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDefaultRoute",
+                                SD_BUS_ARGS("i", ifindex, "b", enable),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_default_route,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkLLMNR",
+                                SD_BUS_ARGS("i", ifindex, "s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_llmnr,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkMulticastDNS",
+                                SD_BUS_ARGS("i", ifindex, "s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_mdns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDNSOverTLS",
+                                SD_BUS_ARGS("i", ifindex, "s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_dns_over_tls,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDNSSEC",
+                                SD_BUS_ARGS("i", ifindex, "s", mode),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_dnssec,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("SetLinkDNSSECNegativeTrustAnchors",
+                                SD_BUS_ARGS("i", ifindex, "as", names),
+                                SD_BUS_NO_RESULT,
+                                bus_method_set_link_dnssec_negative_trust_anchors,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RevertLinkNTP",
+                                SD_BUS_ARGS("i", ifindex),
+                                SD_BUS_NO_RESULT,
+                                bus_method_revert_link_ntp,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RevertLinkDNS",
+                                SD_BUS_ARGS("i", ifindex),
+                                SD_BUS_NO_RESULT,
+                                bus_method_revert_link_dns,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("RenewLink",
+                                SD_BUS_ARGS("i", ifindex),
+                                SD_BUS_NO_RESULT,
+                                bus_method_renew_link,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ForceRenewLink",
+                                SD_BUS_ARGS("i", ifindex),
+                                SD_BUS_NO_RESULT,
+                                bus_method_force_renew_link,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("ReconfigureLink",
+                                SD_BUS_ARGS("i", ifindex),
+                                SD_BUS_NO_RESULT,
+                                bus_method_reconfigure_link,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD_WITH_ARGS("Reload",
+                                SD_BUS_NO_ARGS,
+                                SD_BUS_NO_RESULT,
+                                bus_method_reload,
+                                SD_BUS_VTABLE_UNPRIVILEGED),
 
         SD_BUS_VTABLE_END
 };
index 0e00cde87a18a28be11914ff009c886d973f3333..d7e0662453e85d99ce57de74b19b936cdd114ca4 100644 (file)
@@ -1178,8 +1178,9 @@ int manager_set_hostname(Manager *m, const char *hostname) {
 
         log_debug("Setting transient hostname: '%s'", strna(hostname));
 
-        if (free_and_strdup(&m->dynamic_hostname, hostname) < 0)
-                return log_oom();
+        r = free_and_strdup_warn(&m->dynamic_hostname, hostname);
+        if (r < 0)
+                return r;
 
         if (!m->bus || sd_bus_is_ready(m->bus) <= 0) {
                 log_debug("Not connected to system bus, setting hostname later.");
@@ -1227,8 +1228,9 @@ int manager_set_timezone(Manager *m, const char *tz) {
         assert(tz);
 
         log_debug("Setting system timezone: '%s'", tz);
-        if (free_and_strdup(&m->dynamic_timezone, tz) < 0)
-                return log_oom();
+        r = free_and_strdup_warn(&m->dynamic_timezone, tz);
+        if (r < 0)
+                return r;
 
         if (!m->bus || sd_bus_is_ready(m->bus) <= 0) {
                 log_debug("Not connected to system bus, setting timezone later.");
index bcde253909edc947e2e6a4302d51a370a8d35a0d..4b9485b6b270cd29df0973e2e8b241af2e337082 100644 (file)
@@ -343,6 +343,8 @@ static int ndisc_route_configure(Route *route, Link *link, sd_ndisc_router *rt)
         r = route_configure(route, link, ndisc_route_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set NDisc route: %m");
+        if (r > 0)
+                link->ndisc_routes_configured = false;
 
         link->ndisc_routes_messages++;
 
@@ -434,9 +436,11 @@ static int ndisc_address_configure(Address *address, Link *link, sd_ndisc_router
         assert(link);
         assert(rt);
 
-        r = address_configure(address, link, ndisc_address_handler, true, &ret);
+        r = address_configure(address, link, ndisc_address_handler, &ret);
         if (r < 0)
                 return log_link_error_errno(link, r, "Failed to set NDisc SLAAC address: %m");
+        if (r > 0)
+                link->ndisc_addresses_configured = false;
 
         link->ndisc_addresses_messages++;
 
@@ -1213,9 +1217,6 @@ static int ndisc_router_handler(Link *link, sd_ndisc_router *rt) {
                 return 0;
         }
 
-        link->ndisc_addresses_configured = false;
-        link->ndisc_routes_configured = false;
-
         SET_FOREACH(na, link->ndisc_addresses)
                 if (IN6_ARE_ADDR_EQUAL(&na->router, &router.in6))
                         na->marked = true;
index 22b716b14ae935fff9f2fd13d68d7bca2db7f779..f54a2f9c99f458744c9da432abb87b384b142e03 100644 (file)
@@ -170,6 +170,7 @@ static int neighbor_add_internal(Link *link, Set **neighbors, const Neighbor *in
 }
 
 static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
+        bool is_new = false;
         Neighbor *neighbor;
         int r;
 
@@ -179,6 +180,7 @@ static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
                 r = neighbor_add_internal(link, &link->neighbors, in, &neighbor);
                 if (r < 0)
                         return r;
+                is_new = true;
         } else if (r == 0) {
                 /* Neighbor is foreign, claim it as recognized */
                 r = set_ensure_put(&link->neighbors, &neighbor_hash_ops, neighbor);
@@ -188,12 +190,13 @@ static int neighbor_add(Link *link, const Neighbor *in, Neighbor **ret) {
                 set_remove(link->neighbors_foreign, neighbor);
         } else if (r == 1) {
                 /* Neighbor already exists */
+                ;
         } else
                 return r;
 
         if (ret)
                 *ret = neighbor;
-        return 0;
+        return is_new;
 }
 
 static int neighbor_add_foreign(Link *link, const Neighbor *in, Neighbor **ret) {
@@ -279,7 +282,7 @@ static int neighbor_configure(Neighbor *neighbor, Link *link) {
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not add neighbor: %m");
 
-        return 0;
+        return r;
 }
 
 int link_set_neighbors(Link *link) {
index 7f0de7660c31a040dd54dff2c240f02fe35bde84..ad261406f0a765b39847e18879de21c2305b06ed 100644 (file)
@@ -223,6 +223,7 @@ DHCPv4.RouteMTUBytes,                        config_parse_mtu,
 DHCPv4.FallbackLeaseLifetimeSec,             config_parse_dhcp_fallback_lease_lifetime,                0,                             0
 DHCPv6.UseAddress,                           config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_address)
 DHCPv6.UseDNS,                               config_parse_dhcp_use_dns,                                0,                             0
+DHCPv6.UseFQDN,                              config_parse_bool,                                        0,                             offsetof(Network, dhcp6_use_fqdn)
 DHCPv6.UseNTP,                               config_parse_dhcp_use_ntp,                                0,                             0
 DHCPv6.RapidCommit,                          config_parse_bool,                                        0,                             offsetof(Network, dhcp6_rapid_commit)
 DHCPv6.MUDURL,                               config_parse_dhcp6_mud_url,                               0,                             0
index 84ab1d5e18d673981ddcef3c7b7fc150ad293874..69cf95fedee7275ee6636027c9d0b1f0d5622c32 100644 (file)
@@ -374,6 +374,7 @@ int network_load_one(Manager *manager, OrderedHashmap **networks, const char *fi
 
                 .dhcp6_use_address = true,
                 .dhcp6_use_dns = true,
+                .dhcp6_use_fqdn = true,
                 .dhcp6_use_ntp = true,
                 .dhcp6_rapid_commit = true,
                 .dhcp6_route_metric = DHCP_ROUTE_METRIC,
index 288248dfa686987c910b0eab6c3b25f779025f9a..899b86eec91e077b94a99e9f5a8daad144b39c52 100644 (file)
@@ -159,6 +159,7 @@ struct Network {
         bool dhcp6_use_address;
         bool dhcp6_use_dns;
         bool dhcp6_use_dns_set;
+        bool dhcp6_use_fqdn;
         bool dhcp6_use_ntp;
         bool dhcp6_use_ntp_set;
         bool dhcp6_rapid_commit;
index ea9c252cc7e6a9b4008386a0ae17014a54eb7fd7..ab0562e9e810e2656160666fb25177e9db32c2c0 100644 (file)
@@ -188,6 +188,7 @@ static int nexthop_add_foreign(Link *link, NextHop *in, NextHop **ret) {
 }
 
 static int nexthop_add(Link *link, NextHop *in, NextHop **ret) {
+        bool is_new = false;
         NextHop *nexthop;
         int r;
 
@@ -197,6 +198,7 @@ static int nexthop_add(Link *link, NextHop *in, NextHop **ret) {
                 r = nexthop_add_internal(link, &link->nexthops, in, &nexthop);
                 if (r < 0)
                         return r;
+                is_new = true;
         } else if (r == 0) {
                 /* Take over a foreign nexthop */
                 r = set_ensure_put(&link->nexthops, &nexthop_hash_ops, nexthop);
@@ -212,8 +214,7 @@ static int nexthop_add(Link *link, NextHop *in, NextHop **ret) {
 
         if (ret)
                 *ret = nexthop;
-
-        return 0;
+        return is_new;
 }
 
 static int nexthop_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
@@ -297,7 +298,7 @@ static int nexthop_configure(NextHop *nexthop, Link *link) {
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not add nexthop: %m");
 
-        return 1;
+        return r;
 }
 
 int link_set_nexthop(Link *link) {
index 35bf68cd7e0b09f7eba9921b75eae101d7335a00..39246498e4c21045478e92cec8f8dddbc2a8532f 100644 (file)
@@ -948,7 +948,7 @@ int config_parse_router_prefix_delegation(
         /* For backward compatibility */
         val = radv_prefix_delegation_from_string(rvalue);
         if (val < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, val,
                            "Invalid %s= setting, ignoring assignment: %s", lvalue, rvalue);
                 return 0;
         }
index a98394c1caee37c2f8ce0dbecb0466efe68cf793..6ab5941343f8d01455f3e385ac347001be17fa81 100644 (file)
@@ -65,21 +65,8 @@ static const char * const route_scope_table[] = {
         [RT_SCOPE_NOWHERE]  = "nowhere",
 };
 
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP(route_scope, int);
-
-#define ROUTE_SCOPE_STR_MAX CONST_MAX(DECIMAL_STR_MAX(int), STRLEN("nowhere") + 1)
-static const char *format_route_scope(int scope, char *buf, size_t size) {
-        const char *s;
-        char *p = buf;
-
-        s = route_scope_to_string(scope);
-        if (s)
-                strpcpy(&p, size, s);
-        else
-                strpcpyf(&p, size, "%d", scope);
-
-        return buf;
-}
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(route_scope, int);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING_FALLBACK(route_scope, int, UINT8_MAX);
 
 static const char * const route_table_table[] = {
         [RT_TABLE_DEFAULT] = "default",
@@ -157,7 +144,7 @@ static const char * const route_protocol_table[] = {
         [RTPROT_STATIC] = "static",
 };
 
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING(route_protocol, int);
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_FROM_STRING_FALLBACK(route_protocol, int, UINT8_MAX);
 
 static const char * const route_protocol_full_table[] = {
         [RTPROT_REDIRECT] = "redirect",
@@ -182,21 +169,7 @@ static const char * const route_protocol_full_table[] = {
         [RTPROT_EIGRP]    = "eigrp",
 };
 
-DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING(route_protocol_full, int);
-
-#define ROUTE_PROTOCOL_STR_MAX CONST_MAX(DECIMAL_STR_MAX(int), STRLEN("redirect") + 1)
-static const char *format_route_protocol(int protocol, char *buf, size_t size) {
-        const char *s;
-        char *p = buf;
-
-        s = route_protocol_full_to_string(protocol);
-        if (s)
-                strpcpy(&p, size, s);
-        else
-                strpcpyf(&p, size, "%d", protocol);
-
-        return buf;
-}
+DEFINE_PRIVATE_STRING_TABLE_LOOKUP_TO_STRING_FALLBACK(route_protocol_full, int, UINT8_MAX);
 
 static unsigned routes_max(void) {
         static thread_local unsigned cached = 0;
@@ -576,6 +549,7 @@ static int route_add_foreign(Manager *manager, Link *link, const Route *in, Rout
 
 static int route_add(Manager *manager, Link *link, const Route *in, const MultipathRoute *m, Route **ret) {
         _cleanup_(route_freep) Route *tmp = NULL;
+        bool is_new = false;
         Route *route;
         int r;
 
@@ -599,6 +573,7 @@ static int route_add(Manager *manager, Link *link, const Route *in, const Multip
                 r = route_add_internal(manager, link, link ? &link->routes : &manager->routes, in, &route);
                 if (r < 0)
                         return r;
+                is_new = true;
         } else if (r == 0) {
                 /* Take over a foreign route */
                 if (link) {
@@ -622,8 +597,7 @@ static int route_add(Manager *manager, Link *link, const Route *in, const Multip
 
         if (ret)
                 *ret = route;
-
-        return 0;
+        return is_new;
 }
 
 static bool route_type_is_reject(const Route *route) {
@@ -640,8 +614,8 @@ static void log_route_debug(const Route *route, const char *str, const Link *lin
         /* link may be NULL. */
 
         if (DEBUG_LOGGING) {
-                _cleanup_free_ char *dst = NULL, *dst_prefixlen = NULL, *src = NULL, *gw = NULL, *prefsrc = NULL, *table = NULL;
-                char scope[ROUTE_SCOPE_STR_MAX], protocol[ROUTE_PROTOCOL_STR_MAX];
+                _cleanup_free_ char *dst = NULL, *dst_prefixlen = NULL, *src = NULL, *gw = NULL,
+                        *prefsrc = NULL, *table = NULL, *scope = NULL, *proto = NULL;
 
                 if (!in_addr_is_null(route->family, &route->dst)) {
                         (void) in_addr_to_string(route->family, &route->dst, &dst);
@@ -653,14 +627,14 @@ static void log_route_debug(const Route *route, const char *str, const Link *lin
                         (void) in_addr_to_string(route->gw_family, &route->gw, &gw);
                 if (!in_addr_is_null(route->family, &route->prefsrc))
                         (void) in_addr_to_string(route->family, &route->prefsrc, &prefsrc);
+                (void) route_scope_to_string_alloc(route->scope, &scope);
                 (void) manager_get_route_table_to_string(m, route->table, &table);
+                (void) route_protocol_full_to_string_alloc(route->protocol, &proto);
 
                 log_link_debug(link,
                                "%s route: dst: %s%s, src: %s, gw: %s, prefsrc: %s, scope: %s, table: %s, proto: %s, type: %s",
                                str, strna(dst), strempty(dst_prefixlen), strna(src), strna(gw), strna(prefsrc),
-                               format_route_scope(route->scope, scope, sizeof(scope)),
-                               strna(table),
-                               format_route_protocol(route->protocol, protocol, sizeof(protocol)),
+                               strna(scope), strna(table), strna(proto),
                                strna(route_type_to_string(route->type)));
         }
 }
@@ -865,15 +839,15 @@ static int manager_drop_routes_internal(Manager *manager, bool foreign, const Li
 
         routes = foreign ? manager->routes_foreign : manager->routes;
         SET_FOREACH(route, routes) {
-                /* Do not touch routes managed by the kernel */
+                /* Do not touch routes managed by the kernel. */
                 if (route->protocol == RTPROT_KERNEL)
                         continue;
 
-                /* The route will be configured later, or already configured by a link */
+                /* The route will be configured later, or already configured by a link. */
                 if (links_have_route(manager, route, except))
                         continue;
 
-                /* The existing links do not have the route. Let's drop this now. It may by
+                /* The existing links do not have the route. Let's drop this now. It may be
                  * re-configured later. */
                 k = route_remove(route, manager, NULL, NULL);
                 if (k < 0 && r >= 0)
@@ -976,15 +950,15 @@ static int route_expire_handler(sd_event_source *s, uint64_t usec, void *userdat
 static int route_add_and_setup_timer(Link *link, const Route *route, const MultipathRoute *m, Route **ret) {
         _cleanup_(sd_event_source_unrefp) sd_event_source *expire = NULL;
         Route *nr;
-        int r;
+        int r, k;
 
         assert(link);
         assert(route);
 
         if (route_type_is_reject(route))
-                r = route_add(link->manager, NULL, route, NULL, &nr);
+                k = route_add(link->manager, NULL, route, NULL, &nr);
         else if (!m || m->ifindex == 0 || m->ifindex == link->ifindex)
-                r = route_add(NULL, link, route, m, &nr);
+                k = route_add(NULL, link, route, m, &nr);
         else {
                 Link *link_gw;
 
@@ -992,10 +966,10 @@ static int route_add_and_setup_timer(Link *link, const Route *route, const Multi
                 if (r < 0)
                         return log_link_error_errno(link, r, "Failed to get link with ifindex %d: %m", m->ifindex);
 
-                r = route_add(NULL, link_gw, route, m, &nr);
+                k = route_add(NULL, link_gw, route, m, &nr);
         }
-        if (r < 0)
-                return log_link_error_errno(link, r, "Could not add route: %m");
+        if (k < 0)
+                return log_link_error_errno(link, k, "Could not add route: %m");
 
         /* TODO: drop expiration handling once it can be pushed into the kernel */
         if (nr->lifetime != USEC_INFINITY && !kernel_route_expiration_supported()) {
@@ -1011,7 +985,7 @@ static int route_add_and_setup_timer(Link *link, const Route *route, const Multi
         if (ret)
                 *ret = nr;
 
-        return 0;
+        return k;
 }
 
 static int append_nexthop_one(const Route *route, const MultipathRoute *m, struct rtattr **rta, size_t offset) {
@@ -1102,7 +1076,8 @@ int route_configure(
                 Route **ret) {
 
         _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
-        int r;
+        int r, k = 0;
+        Route *nr;
 
         assert(link);
         assert(link->manager);
@@ -1190,14 +1165,9 @@ int route_configure(
                 return log_link_error_errno(link, r, "Could not append RTA_MULTIPATH attribute: %m");
 
         if (ordered_set_isempty(route->multipath_routes)) {
-                Route *nr;
-
-                r = route_add_and_setup_timer(link, route, NULL, &nr);
-                if (r < 0)
-                        return r;
-
-                if (ret)
-                        *ret = nr;
+                k = route_add_and_setup_timer(link, route, NULL, &nr);
+                if (k < 0)
+                        return k;
         } else {
                 MultipathRoute *m;
 
@@ -1207,6 +1177,8 @@ int route_configure(
                         r = route_add_and_setup_timer(link, route, m, NULL);
                         if (r < 0)
                                 return r;
+                        if (r > 0)
+                                k = 1;
                 }
         }
 
@@ -1217,7 +1189,10 @@ int route_configure(
 
         link_ref(link);
 
-        return 0;
+        if (ret)
+                *ret = nr;
+
+        return k;
 }
 
 static int route_handler(sd_netlink *rtnl, sd_netlink_message *m, Link *link) {
@@ -1909,7 +1884,7 @@ int config_parse_route_scope(
 
         r = route_scope_from_string(rvalue);
         if (r < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Unknown route scope: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Unknown route scope: %s", rvalue);
                 return 0;
         }
 
@@ -2082,17 +2057,14 @@ int config_parse_route_protocol(
         }
 
         r = route_protocol_from_string(rvalue);
-        if (r >= 0)
-                n->protocol = r;
-        else {
-                r = safe_atou8(rvalue , &n->protocol);
-                if (r < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, r,
-                                   "Could not parse route protocol \"%s\", ignoring assignment: %m", rvalue);
-                        return 0;
-                }
+        if (r < 0) {
+                log_syntax(unit, LOG_WARNING, filename, line, r,
+                           "Failed to parse route protocol \"%s\", ignoring assignment: %m", rvalue);
+                return 0;
         }
 
+        n->protocol = r;
+
         TAKE_PTR(n);
         return 0;
 }
@@ -2124,7 +2096,7 @@ int config_parse_route_type(
 
         t = route_type_from_string(rvalue);
         if (t < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, r,
                            "Could not parse route type \"%s\", ignoring assignment: %m", rvalue);
                 return 0;
         }
index da8778dd1e80b0f2d245e4a581be7449851f1b7f..ed966f3c1731a3535a09f9a744075fbbeb579c6e 100644 (file)
@@ -326,6 +326,7 @@ static int routing_policy_rule_get(Manager *m, const RoutingPolicyRule *rule, Ro
 static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, int family, RoutingPolicyRule **ret) {
         _cleanup_(routing_policy_rule_freep) RoutingPolicyRule *rule = NULL;
         RoutingPolicyRule *existing;
+        bool is_new = false;
         int r;
 
         assert(m);
@@ -353,6 +354,7 @@ static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, int
 
                 rule->manager = m;
                 existing = TAKE_PTR(rule);
+                is_new = true;
         } else if (r == 0) {
                 /* Take over a foreign rule. */
                 r = set_ensure_put(&m->rules, &routing_policy_rule_hash_ops, existing);
@@ -369,8 +371,7 @@ static int routing_policy_rule_add(Manager *m, const RoutingPolicyRule *in, int
 
         if (ret)
                 *ret = existing;
-
-        return 0;
+        return is_new;
 }
 
 static int routing_policy_rule_consume_foreign(Manager *m, RoutingPolicyRule *rule) {
@@ -635,7 +636,7 @@ static int routing_policy_rule_configure_internal(const RoutingPolicyRule *rule,
         if (r < 0)
                 return log_link_error_errno(link, r, "Could not add rule: %m");
 
-        return 1;
+        return r;
 }
 
 static int routing_policy_rule_configure(const RoutingPolicyRule *rule, Link *link) {
@@ -1422,7 +1423,7 @@ int config_parse_routing_policy_rule_family(
 
         a = routing_policy_rule_address_family_from_string(rvalue);
         if (a < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, a,
                            "Invalid address family '%s', ignoring.", rvalue);
                 return 0;
         }
@@ -1547,7 +1548,7 @@ int config_parse_routing_policy_rule_type(
 
         t = fr_act_type_from_string(rvalue);
         if (t < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0,
+                log_syntax(unit, LOG_WARNING, filename, line, t,
                            "Could not parse FIB rule type \"%s\", ignoring assignment: %m", rvalue);
                 return 0;
         }
index 83b38b2b0538d75fd9c1e92f2b2a03473d4d07d3..b41148d2c69335f78cc1e483d72ac0af94c922cf 100644 (file)
@@ -28,6 +28,13 @@ static const char* const duplicate_address_detection_address_family_table[_ADDRE
         [ADDRESS_FAMILY_IPV6]          = "ipv6",
 };
 
+static const char* const dhcp_deprecated_address_family_table[_ADDRESS_FAMILY_MAX] = {
+        [ADDRESS_FAMILY_NO]            = "none",
+        [ADDRESS_FAMILY_YES]           = "both",
+        [ADDRESS_FAMILY_IPV4]          = "v4",
+        [ADDRESS_FAMILY_IPV6]          = "v6",
+};
+
 static const char* const dhcp_lease_server_type_table[_SD_DHCP_LEASE_SERVER_TYPE_MAX] = {
         [SD_DHCP_LEASE_DNS]  = "DNS servers",
         [SD_DHCP_LEASE_NTP]  = "NTP servers",
@@ -51,6 +58,7 @@ DEFINE_STRING_TABLE_LOOKUP(routing_policy_rule_address_family, AddressFamily);
 DEFINE_STRING_TABLE_LOOKUP(duplicate_address_detection_address_family, AddressFamily);
 DEFINE_CONFIG_PARSE_ENUM(config_parse_link_local_address_family, link_local_address_family,
                          AddressFamily, "Failed to parse option");
+DEFINE_STRING_TABLE_LOOKUP_FROM_STRING(dhcp_deprecated_address_family, AddressFamily);
 DEFINE_STRING_TABLE_LOOKUP(dhcp_lease_server_type, sd_dhcp_lease_server_type);
 
 int config_parse_address_family_with_kernel(
index cc5ee35558c554de5c523fe71ba12b502a84e5fe..0cfb009890d51116374959f81c1c7fcf2e5dca16 100644 (file)
@@ -40,6 +40,8 @@ AddressFamily routing_policy_rule_address_family_from_string(const char *s) _pur
 const char *duplicate_address_detection_address_family_to_string(AddressFamily b) _const_;
 AddressFamily duplicate_address_detection_address_family_from_string(const char *s) _pure_;
 
+AddressFamily dhcp_deprecated_address_family_from_string(const char *s) _pure_;
+
 const char *dhcp_lease_server_type_to_string(sd_dhcp_lease_server_type t) _const_;
 sd_dhcp_lease_server_type dhcp_lease_server_type_from_string(const char *s) _pure_;
 
index b43d61468ea0b16a85ebf6e69a9e72d33355a8ae..74a00c52754da587925e2463668468b7c0d35b9b 100644 (file)
@@ -706,10 +706,7 @@ int config_parse_hostname(
                 return 0;
         }
 
-        if (free_and_strdup(s, empty_to_null(rvalue)) < 0)
-                return log_oom();
-
-        return 0;
+        return free_and_strdup_warn(s, empty_to_null(rvalue));
 }
 
 int config_parse_oom_score_adjust(
index e1c55d0542749a2f578e0fb499df10e6e5bc309e..19734f1c4544517fa37648e94d3ccb295a8e33ef 100644 (file)
@@ -78,6 +78,7 @@
 #include "nulstr-util.h"
 #include "os-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -791,7 +792,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return version();
 
                 case 'D':
-                        r = parse_path_argument_and_warn(optarg, false, &arg_directory);
+                        r = parse_path_argument(optarg, false, &arg_directory);
                         if (r < 0)
                                 return r;
 
@@ -799,7 +800,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_TEMPLATE:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_template);
+                        r = parse_path_argument(optarg, false, &arg_template);
                         if (r < 0)
                                 return r;
 
@@ -807,7 +808,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case 'i':
-                        r = parse_path_argument_and_warn(optarg, false, &arg_image);
+                        r = parse_path_argument(optarg, false, &arg_image);
                         if (r < 0)
                                 return r;
 
@@ -815,7 +816,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_OCI_BUNDLE:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_oci_bundle);
+                        r = parse_path_argument(optarg, false, &arg_oci_bundle);
                         if (r < 0)
                                 return r;
 
@@ -934,7 +935,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_NETWORK_NAMESPACE_PATH:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_network_namespace_path);
+                        r = parse_path_argument(optarg, false, &arg_network_namespace_path);
                         if (r < 0)
                                 return r;
 
@@ -1386,7 +1387,7 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case ARG_VERITY_DATA:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_verity_settings.data_path);
+                        r = parse_path_argument(optarg, false, &arg_verity_settings.data_path);
                         if (r < 0)
                                 return r;
                         break;
index fb1d61fea98d95d8ea23a1cc86674aa7250e247c..5fcd39ee0a27fc4f6b923132450f7340d71c6af5 100644 (file)
@@ -8,6 +8,7 @@
 #include <sys/types.h>
 #include <unistd.h>
 
+#include "env-util.h"
 #include "errno-util.h"
 #include "in-addr-util.h"
 #include "macro.h"
@@ -184,6 +185,21 @@ static const JsonDispatch address_parameters_dispatch_table[] = {
         {}
 };
 
+static uint64_t query_flags(void) {
+        uint64_t f = 0;
+        int r;
+
+        /* Allow callers to turn off validation, when we resolve via nss-resolve */
+
+        r = getenv_bool_secure("SYSTEMD_NSS_RESOLVE_VALIDATE");
+        if (r < 0 && r != -ENXIO)
+                log_debug_errno(r, "Failed to parse $SYSTEMD_NSS_RESOLVE_VALIDATE value, ignoring.");
+        else if (r == 0)
+                f |= SD_RESOLVED_NO_VALIDATE;
+
+        return f;
+}
+
 enum nss_status _nss_resolve_gethostbyname4_r(
                 const char *name,
                 struct gaih_addrtuple **pat,
@@ -215,7 +231,8 @@ enum nss_status _nss_resolve_gethostbyname4_r(
                 goto fail;
 
         r = json_build(&cparams, JSON_BUILD_OBJECT(
-                                       JSON_BUILD_PAIR("name", JSON_BUILD_STRING(name))));
+                                       JSON_BUILD_PAIR("name", JSON_BUILD_STRING(name)),
+                                       JSON_BUILD_PAIR("flags", JSON_BUILD_UNSIGNED(query_flags()))));
         if (r < 0)
                 goto fail;
 
@@ -367,7 +384,8 @@ enum nss_status _nss_resolve_gethostbyname3_r(
                 goto fail;
 
         r = json_build(&cparams, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("name", JSON_BUILD_STRING(name)),
-                                                   JSON_BUILD_PAIR("family", JSON_BUILD_INTEGER(af))));
+                                                   JSON_BUILD_PAIR("family", JSON_BUILD_INTEGER(af)),
+                                                   JSON_BUILD_PAIR("flags", JSON_BUILD_UNSIGNED(query_flags()))));
         if (r < 0)
                 goto fail;
 
@@ -571,7 +589,8 @@ enum nss_status _nss_resolve_gethostbyaddr2_r(
                 goto fail;
 
         r = json_build(&cparams, JSON_BUILD_OBJECT(JSON_BUILD_PAIR("address", JSON_BUILD_BYTE_ARRAY(addr, len)),
-                                                   JSON_BUILD_PAIR("family", JSON_BUILD_INTEGER(af))));
+                                                   JSON_BUILD_PAIR("family", JSON_BUILD_INTEGER(af)),
+                                                   JSON_BUILD_PAIR("flags", JSON_BUILD_UNSIGNED(query_flags()))));
         if (r < 0)
                 goto fail;
 
index 52158a66e57d6f5eaa29b1b38de2617f38d0a04b..94b17dd07b871c1bdfedc8671e3439ff5034bbb9 100644 (file)
@@ -93,7 +93,7 @@ static int process_managed_oom_reply(
                                 m->monitored_swap_cgroup_contexts : m->monitored_mem_pressure_cgroup_contexts;
 
                 if (reply.mode == MANAGED_OOM_AUTO) {
-                        (void) oomd_cgroup_context_free(hashmap_remove(monitor_hm, reply.path));
+                        (void) oomd_cgroup_context_free(hashmap_remove(monitor_hm, empty_to_root(reply.path)));
                         continue;
                 }
 
@@ -109,7 +109,7 @@ static int process_managed_oom_reply(
                         }
                 }
 
-                ret = oomd_insert_cgroup_context(NULL, monitor_hm, reply.path);
+                ret = oomd_insert_cgroup_context(NULL, monitor_hm, empty_to_root(reply.path));
                 if (ret == -ENOMEM) {
                         r = ret;
                         goto finish;
@@ -117,7 +117,7 @@ static int process_managed_oom_reply(
 
                 /* Always update the limit in case it was changed. For non-memory pressure detection the value is
                  * ignored so always updating it here is not a problem. */
-                ctx = hashmap_get(monitor_hm, reply.path);
+                ctx = hashmap_get(monitor_hm, empty_to_root(reply.path));
                 if (ctx)
                         ctx->mem_pressure_limit = limit;
         }
index fcccddb92eae3ff7d35ecd7306412ed79cc84395..9dd9b17c6d3864e4bbcae5b09ac483c575e3e7dc 100644 (file)
@@ -3,7 +3,6 @@
 #include <sys/xattr.h>
 #include <unistd.h>
 
-#include "cgroup-util.h"
 #include "fd-util.h"
 #include "format-util.h"
 #include "oomd-util.h"
@@ -159,7 +158,8 @@ int oomd_sort_cgroup_contexts(Hashmap *h, oomd_compare_t compare_func, const cha
                 return -ENOMEM;
 
         HASHMAP_FOREACH(item, h) {
-                if (item->path && prefix && !path_startswith(item->path, prefix))
+                /* Skip over cgroups that are not valid candidates or are explicitly marked for omission */
+                if ((item->path && prefix && !path_startswith(item->path, prefix)) || item->preference == MANAGED_OOM_PREFERENCE_OMIT)
                         continue;
 
                 sorted[k++] = item;
@@ -201,9 +201,9 @@ int oomd_cgroup_kill(const char *path, bool recurse, bool dry_run) {
         if (r < 0)
                 return r;
 
-        r = increment_oomd_xattr(path, "user.systemd_oomd_kill", set_size(pids_killed));
+        r = increment_oomd_xattr(path, "user.oomd_kill", set_size(pids_killed));
         if (r < 0)
-                log_debug_errno(r, "Failed to set user.systemd_oomd_kill on kill: %m");
+                log_debug_errno(r, "Failed to set user.oomd_kill on kill: %m");
 
         return set_size(pids_killed) != 0;
 }
@@ -214,13 +214,15 @@ int oomd_kill_by_pgscan(Hashmap *h, const char *prefix, bool dry_run) {
 
         assert(h);
 
-        r = oomd_sort_cgroup_contexts(h, compare_pgscan, prefix, &sorted);
+        r = oomd_sort_cgroup_contexts(h, compare_pgscan_and_memory_usage, prefix, &sorted);
         if (r < 0)
                 return r;
 
         for (int i = 0; i < r; i++) {
-                if (sorted[i]->pgscan == 0)
-                        break;
+                /* Skip cgroups with no reclaim and memory usage; it won't alleviate pressure. */
+                /* Don't break since there might be "avoid" cgroups at the end. */
+                if (sorted[i]->pgscan == 0 && sorted[i]->current_memory_usage == 0)
+                        continue;
 
                 r = oomd_cgroup_kill(sorted[i]->path, true, dry_run);
                 if (r > 0 || r == -ENOMEM)
@@ -243,8 +245,10 @@ int oomd_kill_by_swap_usage(Hashmap *h, bool dry_run) {
         /* Try to kill cgroups with non-zero swap usage until we either succeed in
          * killing or we get to a cgroup with no swap usage. */
         for (int i = 0; i < r; i++) {
+                /* Skip over cgroups with no resource usage. Don't break since there might be "avoid"
+                 * cgroups at the end. */
                 if (sorted[i]->swap_usage == 0)
-                        break;
+                        continue;
 
                 r = oomd_cgroup_kill(sorted[i]->path, true, dry_run);
                 if (r > 0 || r == -ENOMEM)
@@ -258,6 +262,7 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) {
         _cleanup_(oomd_cgroup_context_freep) OomdCGroupContext *ctx = NULL;
         _cleanup_free_ char *p = NULL, *val = NULL;
         bool is_root;
+        uid_t uid;
         int r;
 
         assert(path);
@@ -268,6 +273,7 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) {
                 return -ENOMEM;
 
         is_root = empty_or_root(path);
+        ctx->preference = MANAGED_OOM_PREFERENCE_NONE;
 
         r = cg_get_path(SYSTEMD_CGROUP_CONTROLLER, path, "memory.pressure", &p);
         if (r < 0)
@@ -277,6 +283,23 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) {
         if (r < 0)
                 return log_debug_errno(r, "Error parsing memory pressure from %s: %m", p);
 
+        r = cg_get_owner(SYSTEMD_CGROUP_CONTROLLER, path, &uid);
+        if (r < 0)
+                log_debug_errno(r, "Failed to get owner/group from %s: %m", path);
+        else if (uid == 0) {
+                /* Ignore most errors when reading the xattr since it is usually unset and cgroup xattrs are only used
+                 * as an optional feature of systemd-oomd (and the system might not even support them). */
+                r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, path, "user.oomd_avoid");
+                if (r == -ENOMEM)
+                        return r;
+                ctx->preference = r == 1 ? MANAGED_OOM_PREFERENCE_AVOID : ctx->preference;
+
+                r = cg_get_xattr_bool(SYSTEMD_CGROUP_CONTROLLER, path, "user.oomd_omit");
+                if (r == -ENOMEM)
+                        return r;
+                ctx->preference = r == 1 ? MANAGED_OOM_PREFERENCE_OMIT : ctx->preference;
+        }
+
         if (is_root) {
                 r = procfs_memory_get_used(&ctx->current_memory_usage);
                 if (r < 0)
index d7a9890e7a2d6566372d298effa2a474251ac3f5..bffccf75da7d8918cb328a6c168fbb444c613e68 100644 (file)
@@ -3,6 +3,7 @@
 
 #include <stdbool.h>
 
+#include "cgroup-util.h"
 #include "hashmap.h"
 #include "psi-util.h"
 
@@ -29,6 +30,8 @@ struct OomdCGroupContext {
         uint64_t last_pgscan;
         uint64_t pgscan;
 
+        ManagedOOMPreference preference;
+
         /* These are only used by oomd_pressure_above for acting on high memory pressure. */
         loadavg_t mem_pressure_limit;
         usec_t mem_pressure_duration_usec;
@@ -61,17 +64,35 @@ bool oomd_memory_reclaim(Hashmap *h);
 /* Returns true if the amount of swap free is below the percentage of swap specified by `threshold_percent`. */
 bool oomd_swap_free_below(const OomdSystemContext *ctx, uint64_t threshold_percent);
 
-static inline int compare_pgscan(OomdCGroupContext * const *c1, OomdCGroupContext * const *c2) {
+/* The compare functions will sort from largest to smallest, putting all the contexts with "avoid" at the end
+ * (after the smallest values). */
+static inline int compare_pgscan_and_memory_usage(OomdCGroupContext * const *c1, OomdCGroupContext * const *c2) {
+        int r;
+
         assert(c1);
         assert(c2);
 
-        return CMP((*c2)->pgscan, (*c1)->pgscan);
+        r = CMP((*c1)->preference, (*c2)->preference);
+        if (r != 0)
+                return r;
+
+        r = CMP((*c2)->pgscan, (*c1)->pgscan);
+        if (r != 0)
+                return r;
+
+        return CMP((*c2)->current_memory_usage, (*c1)->current_memory_usage);
 }
 
 static inline int compare_swap_usage(OomdCGroupContext * const *c1, OomdCGroupContext * const *c2) {
+        int r;
+
         assert(c1);
         assert(c2);
 
+        r = CMP((*c1)->preference, (*c2)->preference);
+        if (r != 0)
+                return r;
+
         return CMP((*c2)->swap_usage, (*c1)->swap_usage);
 }
 
index 54fe2a03d14138a0345dc7f3c25f8e0b1f64a240..49a02f9424672b8fc01f5fda1d6c4123588d89ad 100644 (file)
@@ -79,7 +79,7 @@ static void test_oomd_cgroup_kill(void) {
                 sleep(2);
                 assert_se(cg_is_empty(SYSTEMD_CGROUP_CONTROLLER, cgroup) == true);
 
-                assert_se(cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.systemd_oomd_kill", &v) >= 0);
+                assert_se(cg_get_xattr_malloc(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_kill", &v) >= 0);
                 assert_se(memcmp(v, i == 0 ? "2" : "4", 2) == 0);
         }
 }
@@ -89,6 +89,8 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
         _cleanup_(oomd_cgroup_context_freep) OomdCGroupContext *ctx = NULL;
         _cleanup_free_ char *cgroup = NULL;
         OomdCGroupContext *c1, *c2;
+        bool test_xattrs;
+        int r;
 
         if (geteuid() != 0)
                 return (void) log_tests_skipped("not root");
@@ -101,6 +103,16 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
 
         assert_se(cg_pid_get_path(NULL, 0, &cgroup) >= 0);
 
+        /* If we don't have permissions to set xattrs we're likely in a userns or missing capabilities
+         * so skip the xattr portions of the test. */
+        r = cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_test", "1", 1, 0);
+        test_xattrs = !ERRNO_IS_PRIVILEGE(r) && !ERRNO_IS_NOT_SUPPORTED(r);
+
+        if (test_xattrs) {
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_omit", "1", 1, 0) >= 0);
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_avoid", "1", 1, 0) >= 0);
+        }
+
         assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
 
         assert_se(streq(ctx->path, cgroup));
@@ -110,12 +122,28 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
         assert_se(ctx->swap_usage == 0);
         assert_se(ctx->last_pgscan == 0);
         assert_se(ctx->pgscan == 0);
+        /* omit takes precedence over avoid when both are set to true */
+        if (test_xattrs)
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_OMIT);
+        else
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
+        ctx = oomd_cgroup_context_free(ctx);
+
+        /* also check when only avoid is set to true */
+        if (test_xattrs) {
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_omit", "0", 1, 0) >= 0);
+                assert_se(cg_set_xattr(SYSTEMD_CGROUP_CONTROLLER, cgroup, "user.oomd_avoid", "1", 1, 0) >= 0);
+        }
+        assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
+        if (test_xattrs)
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_AVOID);
         ctx = oomd_cgroup_context_free(ctx);
 
         /* Test the root cgroup */
         assert_se(oomd_cgroup_context_acquire("", &ctx) == 0);
         assert_se(streq(ctx->path, "/"));
         assert_se(ctx->current_memory_usage > 0);
+        assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
 
         /* Test hashmap inserts */
         assert_se(h1 = hashmap_new(&oomd_cgroup_ctx_hash_ops));
@@ -137,6 +165,14 @@ static void test_oomd_cgroup_context_acquire_and_insert(void) {
         assert_se(c2->last_pgscan == 5555);
         assert_se(c2->mem_pressure_limit == 6789);
         assert_se(c2->last_hit_mem_pressure_limit == 42);
+
+        /* Assert that avoid/omit are not set if the cgroup is not owned by root */
+        if (test_xattrs) {
+                ctx = oomd_cgroup_context_free(ctx);
+                assert_se(cg_set_access(SYSTEMD_CGROUP_CONTROLLER, cgroup, 65534, 0) >= 0);
+                assert_se(oomd_cgroup_context_acquire(cgroup, &ctx) == 0);
+                assert_se(ctx->preference == MANAGED_OOM_PREFERENCE_NONE);
+        }
 }
 
 static void test_oomd_system_context_acquire(void) {
@@ -287,21 +323,35 @@ static void test_oomd_sort_cgroups(void) {
         char **paths = STRV_MAKE("/herp.slice",
                                  "/herp.slice/derp.scope",
                                  "/herp.slice/derp.scope/sheep.service",
-                                 "/zupa.slice");
+                                 "/zupa.slice",
+                                 "/omitted.slice",
+                                 "/avoid.slice");
 
-        OomdCGroupContext ctx[4] = {
+        OomdCGroupContext ctx[6] = {
                 { .path = paths[0],
                   .swap_usage = 20,
-                  .pgscan = 60 },
+                  .pgscan = 60,
+                  .current_memory_usage = 10 },
                 { .path = paths[1],
                   .swap_usage = 60,
-                  .pgscan = 40 },
+                  .pgscan = 40,
+                  .current_memory_usage = 20 },
                 { .path = paths[2],
                   .swap_usage = 40,
-                  .pgscan = 20 },
+                  .pgscan = 40,
+                  .current_memory_usage = 40 },
                 { .path = paths[3],
                   .swap_usage = 10,
-                  .pgscan = 80 },
+                  .pgscan = 80,
+                  .current_memory_usage = 10 },
+                { .path = paths[4],
+                  .swap_usage = 90,
+                  .pgscan = 100,
+                  .preference = MANAGED_OOM_PREFERENCE_OMIT },
+                { .path = paths[5],
+                  .swap_usage = 99,
+                  .pgscan = 200,
+                  .preference = MANAGED_OOM_PREFERENCE_AVOID },
         };
 
         assert_se(h = hashmap_new(&string_hash_ops));
@@ -310,26 +360,32 @@ static void test_oomd_sort_cgroups(void) {
         assert_se(hashmap_put(h, "/herp.slice/derp.scope", &ctx[1]) >= 0);
         assert_se(hashmap_put(h, "/herp.slice/derp.scope/sheep.service", &ctx[2]) >= 0);
         assert_se(hashmap_put(h, "/zupa.slice", &ctx[3]) >= 0);
+        assert_se(hashmap_put(h, "/omitted.slice", &ctx[4]) >= 0);
+        assert_se(hashmap_put(h, "/avoid.slice", &ctx[5]) >= 0);
 
-        assert_se(oomd_sort_cgroup_contexts(h, compare_swap_usage, NULL, &sorted_cgroups) == 4);
+        assert_se(oomd_sort_cgroup_contexts(h, compare_swap_usage, NULL, &sorted_cgroups) == 5);
         assert_se(sorted_cgroups[0] == &ctx[1]);
         assert_se(sorted_cgroups[1] == &ctx[2]);
         assert_se(sorted_cgroups[2] == &ctx[0]);
         assert_se(sorted_cgroups[3] == &ctx[3]);
+        assert_se(sorted_cgroups[4] == &ctx[5]);
         sorted_cgroups = mfree(sorted_cgroups);
 
-        assert_se(oomd_sort_cgroup_contexts(h, compare_pgscan, NULL, &sorted_cgroups) == 4);
+        assert_se(oomd_sort_cgroup_contexts(h, compare_pgscan_and_memory_usage, NULL, &sorted_cgroups) == 5);
         assert_se(sorted_cgroups[0] == &ctx[3]);
         assert_se(sorted_cgroups[1] == &ctx[0]);
-        assert_se(sorted_cgroups[2] == &ctx[1]);
-        assert_se(sorted_cgroups[3] == &ctx[2]);
+        assert_se(sorted_cgroups[2] == &ctx[2]);
+        assert_se(sorted_cgroups[3] == &ctx[1]);
+        assert_se(sorted_cgroups[4] == &ctx[5]);
         sorted_cgroups = mfree(sorted_cgroups);
 
-        assert_se(oomd_sort_cgroup_contexts(h, compare_pgscan, "/herp.slice/derp.scope", &sorted_cgroups) == 2);
-        assert_se(sorted_cgroups[0] == &ctx[1]);
-        assert_se(sorted_cgroups[1] == &ctx[2]);
+        assert_se(oomd_sort_cgroup_contexts(h, compare_pgscan_and_memory_usage, "/herp.slice/derp.scope", &sorted_cgroups) == 2);
+        assert_se(sorted_cgroups[0] == &ctx[2]);
+        assert_se(sorted_cgroups[1] == &ctx[1]);
         assert_se(sorted_cgroups[2] == 0);
         assert_se(sorted_cgroups[3] == 0);
+        assert_se(sorted_cgroups[4] == 0);
+        assert_se(sorted_cgroups[5] == 0);
         sorted_cgroups = mfree(sorted_cgroups);
 }
 
index 2236c6927f50cb661fcc64a26c3a2b3ee3737038..78c31187ea4142e0d47dba879bb3390ada9bc6ff 100644 (file)
@@ -45,6 +45,7 @@
 #include "mkfs-util.h"
 #include "mount-util.h"
 #include "parse-util.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "proc-cmdline.h"
@@ -3623,7 +3624,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_root);
+                        r = parse_path_argument(optarg, false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -3653,7 +3654,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_DEFINITIONS:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_definitions);
+                        r = parse_path_argument(optarg, false, &arg_definitions);
                         if (r < 0)
                                 return r;
                         break;
@@ -3687,7 +3688,7 @@ static int parse_argv(int argc, char *argv[]) {
                 }
 
                 case ARG_JSON:
-                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
                         if (r <= 0)
                                 return r;
 
index 1343e1d544426c46d4713509f0fe05fb8de75cca..5a09f5c2d94c22066fd7d169618d0c4692c8a022 100644 (file)
                        send_interface="org.freedesktop.portable1.Manager"
                        send_member="DetachImage"/>
 
+                <allow send_destination="org.freedesktop.portable1"
+                       send_interface="org.freedesktop.portable1.Manager"
+                       send_member="ReattachImage"/>
+
                 <allow send_destination="org.freedesktop.portable1"
                        send_interface="org.freedesktop.portable1.Manager"
                        send_member="RemoveImage"/>
                        send_interface="org.freedesktop.portable1.Image"
                        send_member="Detach"/>
 
+                <allow send_destination="org.freedesktop.portable1"
+                       send_interface="org.freedesktop.portable1.Image"
+                       send_member="Reattach"/>
+
                 <allow send_destination="org.freedesktop.portable1"
                        send_interface="org.freedesktop.portable1.Image"
                        send_member="Remove"/>
index d18e03afd4fd1adf20cd94e196bc0ba788269c78..0a3b1e8fde63d299306adb65fc8fa8da2ff29720 100644 (file)
@@ -1003,13 +1003,13 @@ int portable_attach(
                 r = unit_file_exists(UNIT_FILE_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 (r > 0)
+                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
                         return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' exists on the host already, refusing.", item->name);
 
                 r = unit_file_is_active(bus, item->name, error);
                 if (r < 0)
                         return r;
-                if (r > 0)
+                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
                         return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active already, refusing.", item->name);
         }
 
@@ -1035,10 +1035,14 @@ static bool marker_matches_image(const char *marker, const char *name_or_path) {
         a = last_path_component(marker);
 
         if (image_name_is_valid(name_or_path)) {
-                const char *e;
+                const char *e, *underscore;
 
                 /* We shall match against an image name. In that case let's compare the last component, and optionally
-                 * allow either a suffix of ".raw" or a series of "/". */
+                 * allow either a suffix of ".raw" or a series of "/".
+                 * But allow matching on a different version of the same image, when a "_" is used as a separator. */
+                underscore = strchr(name_or_path, '_');
+                if (underscore)
+                        return strneq(a, name_or_path, underscore - name_or_path);
 
                 e = startswith(a, name_or_path);
                 if (!e)
@@ -1048,7 +1052,7 @@ static bool marker_matches_image(const char *marker, const char *name_or_path) {
                         e[strspn(e, "/")] == 0 ||
                         streq(e, ".raw");
         } else {
-                const char *b;
+                const char *b, *underscore;
                 size_t l;
 
                 /* We shall match against a path. Let's ignore any prefix here though, as often there are many ways to
@@ -1060,7 +1064,11 @@ static bool marker_matches_image(const char *marker, const char *name_or_path) {
                 if (strcspn(b, "/") != l)
                         return false;
 
-                return memcmp(a, b, l) == 0;
+                underscore = strchr(b, '_');
+                if (underscore)
+                        l = underscore - b;
+
+                return strneq(a, b, l);
         }
 }
 
@@ -1185,7 +1193,7 @@ int portable_detach(
                 r = unit_file_is_active(bus, de->d_name, error);
                 if (r < 0)
                         return r;
-                if (r > 0)
+                if (!FLAGS_SET(flags, PORTABLE_REATTACH) && r > 0)
                         return sd_bus_error_setf(error, BUS_ERROR_UNIT_EXISTS, "Unit file '%s' is active, can't detach.", de->d_name);
 
                 r = set_put_strdup(&unit_files, de->d_name);
index 00ff80c38adf34da550f6a8b4eded460f3779740..724634feb8508d297bb7d9b01914cb9412308248 100644 (file)
@@ -21,6 +21,7 @@ typedef enum PortableFlags {
         PORTABLE_PREFER_COPY    = 1 << 0,
         PORTABLE_PREFER_SYMLINK = 1 << 1,
         PORTABLE_RUNTIME        = 1 << 2,
+        PORTABLE_REATTACH       = 1 << 3,
 } PortableFlags;
 
 typedef enum PortableChangeType {
index edfd74d540d8f3f21d406d81a27e027fb27210cc..278dae0e1b56a8ae34ad3d5e9fadc2e802f1ded6 100644 (file)
@@ -45,6 +45,10 @@ static bool arg_enable = false;
 static bool arg_now = false;
 static bool arg_no_block = false;
 
+static bool is_portable_managed(const char *unit) {
+        return ENDSWITH_SET(unit, ".service", ".target", ".socket", ".path", ".timer");
+}
+
 static int determine_image(const char *image, bool permit_non_existing, char **ret) {
         int r;
 
@@ -436,12 +440,14 @@ static int maybe_enable_disable(sd_bus *bus, const char *path, bool enable) {
         return 0;
 }
 
-static int maybe_start_stop(sd_bus *bus, const char *path, bool start, BusWaitForJobs *wait) {
+static int maybe_start_stop_restart(sd_bus *bus, const char *path, const char *method, BusWaitForJobs *wait) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         char *name = (char *)basename(path), *job = NULL;
         int r;
 
+        assert(STR_IN_SET(method, "StartUnit", "StopUnit", "RestartUnit"));
+
         if (!arg_now)
                 return 0;
 
@@ -450,13 +456,13 @@ static int maybe_start_stop(sd_bus *bus, const char *path, bool start, BusWaitFo
                         "org.freedesktop.systemd1",
                         "/org/freedesktop/systemd1",
                         "org.freedesktop.systemd1.Manager",
-                        start ? "StartUnit" : "StopUnit",
+                        method,
                         &error,
                         &reply,
                         "ss", name, "replace");
         if (r < 0)
-                return log_error_errno(r, "Failed to %s the portable service %s: %s",
-                                       start ? "start" : "stop",
+                return log_error_errno(r, "Failed to call %s on the portable service %s: %s",
+                                       method,
                                        path,
                                        bus_error_message(&error, r));
 
@@ -465,13 +471,13 @@ static int maybe_start_stop(sd_bus *bus, const char *path, bool start, BusWaitFo
                 return bus_log_parse_error(r);
 
         if (!arg_quiet)
-                log_info("Queued %s to %s portable service %s.", job, start ? "start" : "stop", name);
+                log_info("Queued %s to call %s on portable service %s.", job, method, name);
 
         if (wait) {
                 r = bus_wait_for_jobs_add(wait, job);
                 if (r < 0)
-                        return log_error_errno(r, "Failed to watch %s job for %s %s: %m",
-                                               job, start ? "starting" : "stopping", name);
+                        return log_error_errno(r, "Failed to watch %s job to call %s on %s: %m",
+                                               job, method, name);
         }
 
         return 0;
@@ -506,9 +512,83 @@ static int maybe_enable_start(sd_bus *bus, sd_bus_message *reply) {
                 if (r == 0)
                         break;
 
-                if (STR_IN_SET(type, "symlink", "copy") && ENDSWITH_SET(path, ".service", ".target", ".socket")) {
+                if (STR_IN_SET(type, "symlink", "copy") && is_portable_managed(path)) {
+                        (void) maybe_enable_disable(bus, path, true);
+                        (void) maybe_start_stop_restart(bus, path, "StartUnit", wait);
+                }
+        }
+
+        r = sd_bus_message_exit_container(reply);
+        if (r < 0)
+                return r;
+
+        if (!arg_no_block) {
+                r = bus_wait_for_jobs(wait, arg_quiet, NULL);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
+static int maybe_stop_enable_restart(sd_bus *bus, sd_bus_message *reply) {
+        _cleanup_(bus_wait_for_jobs_freep) BusWaitForJobs *wait = NULL;
+        int r;
+
+        if (!arg_enable && !arg_now)
+                return 0;
+
+        if (!arg_no_block) {
+                r = bus_wait_for_jobs_new(bus, &wait);
+                if (r < 0)
+                        return log_error_errno(r, "Could not watch jobs: %m");
+        }
+
+        r = sd_bus_message_rewind(reply, true);
+        if (r < 0)
+                return r;
+
+        /* First we get a list of units that were definitely removed, not just re-attached,
+         * so we can also stop them if the user asked us to. */
+        r = sd_bus_message_enter_container(reply, 'a', "(sss)");
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        for (;;) {
+                char *type, *path, *source;
+
+                r = sd_bus_message_read(reply, "(sss)", &type, &path, &source);
+                if (r < 0)
+                        return bus_log_parse_error(r);
+                if (r == 0)
+                        break;
+
+                if (streq(type, "unlink") && is_portable_managed(path))
+                        (void) maybe_start_stop_restart(bus, path, "StopUnit", wait);
+        }
+
+        r = sd_bus_message_exit_container(reply);
+        if (r < 0)
+                return r;
+
+        /* Then we get a list of units that were either added or changed, so that we can
+         * enable them and/or restart them if the user asked us to. */
+        r = sd_bus_message_enter_container(reply, 'a', "(sss)");
+        if (r < 0)
+                return bus_log_parse_error(r);
+
+        for (;;) {
+                char *type, *path, *source;
+
+                r = sd_bus_message_read(reply, "(sss)", &type, &path, &source);
+                if (r < 0)
+                        return bus_log_parse_error(r);
+                if (r == 0)
+                        break;
+
+                if (STR_IN_SET(type, "symlink", "copy") && is_portable_managed(path)) {
                         (void) maybe_enable_disable(bus, path, true);
-                        (void) maybe_start_stop(bus, path, true, wait);
+                        (void) maybe_start_stop_restart(bus, path, "RestartUnit", wait);
                 }
         }
 
@@ -588,7 +668,7 @@ static int maybe_stop_disable(sd_bus *bus, char *image, char *argv[]) {
                 if (r < 0)
                         return bus_log_parse_error(r);
 
-                (void) maybe_start_stop(bus, name, false, wait);
+                (void) maybe_start_stop_restart(bus, name, "StopUnit", wait);
                 (void) maybe_enable_disable(bus, name, false);
         }
 
@@ -604,7 +684,7 @@ static int maybe_stop_disable(sd_bus *bus, char *image, char *argv[]) {
         return 0;
 }
 
-static int attach_image(int argc, char *argv[], void *userdata) {
+static int attach_reattach_image(int argc, char *argv[], const char *method) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL, *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
         _cleanup_(sd_bus_flush_close_unrefp) sd_bus *bus = NULL;
@@ -612,6 +692,9 @@ static int attach_image(int argc, char *argv[], void *userdata) {
         _cleanup_free_ char *image = NULL;
         int r;
 
+        assert(method);
+        assert(STR_IN_SET(method, "AttachImage", "ReattachImage"));
+
         r = determine_image(argv[1], false, &image);
         if (r < 0)
                 return r;
@@ -626,7 +709,7 @@ static int attach_image(int argc, char *argv[], void *userdata) {
 
         (void) polkit_agent_open_if_enabled(arg_transport, arg_ask_password);
 
-        r = bus_message_new_method_call(bus, &m, bus_portable_mgr, "AttachImage");
+        r = bus_message_new_method_call(bus, &m, bus_portable_mgr, method);
         if (r < 0)
                 return bus_log_create_error(r);
 
@@ -644,17 +727,31 @@ static int attach_image(int argc, char *argv[], void *userdata) {
 
         r = sd_bus_call(bus, m, 0, &error, &reply);
         if (r < 0)
-                return log_error_errno(r, "Failed to attach image: %s", bus_error_message(&error, r));
+                return log_error_errno(r, "%s failed: %s", method, bus_error_message(&error, r));
 
         (void) maybe_reload(&bus);
 
         print_changes(reply);
 
-        (void) maybe_enable_start(bus, reply);
+        if (streq(method, "AttachImage"))
+                (void) maybe_enable_start(bus, reply);
+        else {
+                /* ReattachImage returns 2 lists - removed units first, and changed/added second */
+                print_changes(reply);
+                (void) maybe_stop_enable_restart(bus, reply);
+        }
 
         return 0;
 }
 
+static int attach_image(int argc, char *argv[], void *userdata) {
+        return attach_reattach_image(argc, argv, "AttachImage");
+}
+
+static int reattach_image(int argc, char *argv[], void *userdata) {
+        return attach_reattach_image(argc, argv, "ReattachImage");
+}
+
 static int detach_image(int argc, char *argv[], void *userdata) {
         _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
         _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
@@ -920,6 +1017,8 @@ static int help(int argc, char *argv[], void *userdata) {
                "                              Attach the specified portable service image\n"
                "  detach NAME|PATH [PREFIX...]\n"
                "                              Detach the specified portable service image\n"
+               "  reattach NAME|PATH [PREFIX...]\n"
+               "                              Reattach the specified portable service image\n"
                "  inspect NAME|PATH [PREFIX...]\n"
                "                              Show details of specified portable service image\n"
                "  is-attached NAME|PATH       Query if portable service image is attached\n"
@@ -1108,6 +1207,7 @@ static int run(int argc, char *argv[]) {
                 { "read-only",   2,        3,        0,            read_only_image   },
                 { "remove",      2,        VERB_ANY, 0,            remove_image      },
                 { "set-limit",   3,        3,        0,            set_limit         },
+                { "reattach",    2,        VERB_ANY, 0,            reattach_image    },
                 {}
         };
 
index 20a33dc6716c0931a11b19208389cf5ccad68f59..c31ab092b47361ca8f17263cb65edb7f55c59819 100644 (file)
@@ -299,6 +299,10 @@ finish:
         return r;
 }
 
+static int method_reattach_image(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        return redirect_method_to_image(userdata, message, error, bus_image_common_reattach);
+}
+
 static int method_remove_image(sd_bus_message *message, void *userdata, sd_bus_error *error) {
         return redirect_method_to_image(userdata, message, error, bus_image_common_remove);
 }
@@ -362,6 +366,7 @@ const sd_bus_vtable manager_vtable[] = {
         SD_BUS_METHOD("GetImageState", "s", "s", method_get_image_state, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("AttachImage", "sassbs", "a(sss)", method_attach_image, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("DetachImage", "sb", "a(sss)", method_detach_image, SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD("ReattachImage", "sassbs", "a(sss)a(sss)", method_reattach_image, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("RemoveImage", "s", NULL, method_remove_image, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("MarkImageReadOnly", "sb", NULL, method_mark_image_read_only, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("SetImageLimit", "st", NULL, method_set_image_limit, SD_BUS_VTABLE_UNPRIVILEGED),
@@ -369,18 +374,13 @@ const sd_bus_vtable manager_vtable[] = {
         SD_BUS_VTABLE_END
 };
 
-int reply_portable_changes(sd_bus_message *m, const PortableChange *changes, size_t n_changes) {
-        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+static int reply_portable_compose_message(sd_bus_message *reply, const PortableChange *changes, size_t n_changes) {
         size_t i;
         int r;
 
-        assert(m);
+        assert(reply);
         assert(changes || n_changes == 0);
 
-        r = sd_bus_message_new_method_return(m, &reply);
-        if (r < 0)
-                return r;
-
         r = sd_bus_message_open_container(reply, 'a', "(sss)");
         if (r < 0)
                 return r;
@@ -398,5 +398,49 @@ int reply_portable_changes(sd_bus_message *m, const PortableChange *changes, siz
         if (r < 0)
                 return r;
 
+        return 0;
+}
+
+int reply_portable_changes(sd_bus_message *m, const PortableChange *changes, size_t n_changes) {
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        int r;
+
+        assert(m);
+
+        r = sd_bus_message_new_method_return(m, &reply);
+        if (r < 0)
+                return r;
+
+        r = reply_portable_compose_message(reply, changes, n_changes);
+        if (r < 0)
+                return r;
+
+        return sd_bus_send(NULL, reply, NULL);
+}
+
+int reply_portable_changes_pair(
+                sd_bus_message *m,
+                const PortableChange *changes_first,
+                size_t n_changes_first,
+                const PortableChange *changes_second,
+                size_t n_changes_second) {
+
+        _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+        int r;
+
+        assert(m);
+
+        r = sd_bus_message_new_method_return(m, &reply);
+        if (r < 0)
+                return r;
+
+        r = reply_portable_compose_message(reply, changes_first, n_changes_first);
+        if (r < 0)
+                return r;
+
+        r = reply_portable_compose_message(reply, changes_second, n_changes_second);
+        if (r < 0)
+                return r;
+
         return sd_bus_send(NULL, reply, NULL);
 }
index e8e4c3a60085867408f649b13a5218a36fdd60fb..7da366c1c38bef8f9869582b4b5eeca9934459eb 100644 (file)
@@ -8,3 +8,4 @@
 extern const sd_bus_vtable manager_vtable[];
 
 int reply_portable_changes(sd_bus_message *m, const PortableChange *changes, size_t n_changes);
+int reply_portable_changes_pair(sd_bus_message *m, const PortableChange *changes_first, size_t n_changes_first, const PortableChange *changes_second, size_t n_changes_second);
index babdf4197fa51383d6d333ba0bfff2bc997b6a1d..630648ba3c23399109a4e6c68854ffe365a2f233 100644 (file)
@@ -422,6 +422,186 @@ static int bus_image_method_remove(sd_bus_message *message, void *userdata, sd_b
         return bus_image_common_remove(NULL, message, NULL, userdata, error);
 }
 
+/* Given two PortableChange arrays, return a new array that has all elements of the first that are
+ * not also present in the second, comparing the basename of the path values. */
+static int normalize_portable_changes(
+                const PortableChange *changes_attached,
+                size_t n_changes_attached,
+                const PortableChange *changes_detached,
+                size_t n_changes_detached,
+                PortableChange **ret_changes,
+                size_t *ret_n_changes) {
+
+        PortableChange *changes = NULL;
+        size_t n_changes = 0;
+        int r = 0;
+
+        assert(ret_n_changes);
+        assert(ret_changes);
+
+        if (n_changes_detached == 0)
+                return 0; /* Nothing to do */
+
+        changes = new0(PortableChange, n_changes_attached + n_changes_detached);
+        if (!changes)
+                return -ENOMEM;
+
+        /* Corner case: only detached, nothing attached */
+        if (n_changes_attached == 0) {
+                memcpy(changes, changes_detached, sizeof(PortableChange) * n_changes_detached);
+                *ret_changes = TAKE_PTR(changes);
+                *ret_n_changes = n_changes_detached;
+
+                return 0;
+        }
+
+        for (size_t i = 0; i < n_changes_detached; ++i) {
+                bool found = false;
+
+                for (size_t j = 0; j < n_changes_attached; ++j)
+                        if (streq(basename(changes_detached[i].path), basename(changes_attached[j].path))) {
+                                found = true;
+                                break;
+                        }
+
+                if (!found) {
+                        _cleanup_free_ char *path = NULL, *source = NULL;
+
+                        path = strdup(changes_detached[i].path);
+                        if (!path) {
+                                r = -ENOMEM;
+                                goto fail;
+                        }
+
+                        if (changes_detached[i].source) {
+                                source = strdup(changes_detached[i].source);
+                                if (!source) {
+                                        r = -ENOMEM;
+                                        goto fail;
+                                }
+                        }
+
+                        changes[n_changes++] = (PortableChange) {
+                                .type = changes_detached[i].type,
+                                .path = TAKE_PTR(path),
+                                .source = TAKE_PTR(source),
+                        };
+                }
+        }
+
+        *ret_n_changes = n_changes;
+        *ret_changes = TAKE_PTR(changes);
+
+        return 0;
+
+fail:
+        portable_changes_free(changes, n_changes);
+        return r;
+}
+
+int bus_image_common_reattach(
+                Manager *m,
+                sd_bus_message *message,
+                const char *name_or_path,
+                Image *image,
+                sd_bus_error *error) {
+
+        PortableChange *changes_detached = NULL, *changes_attached = NULL, *changes_gone = NULL;
+        size_t n_changes_detached = 0, n_changes_attached = 0, n_changes_gone = 0;
+        _cleanup_strv_free_ char **matches = NULL;
+        PortableFlags flags = PORTABLE_REATTACH;
+        const char *profile, *copy_mode;
+        int runtime, r;
+
+        assert(message);
+        assert(name_or_path || image);
+
+        if (!m) {
+                assert(image);
+                m = image->userdata;
+        }
+
+        r = sd_bus_message_read_strv(message, &matches);
+        if (r < 0)
+                return r;
+
+        r = sd_bus_message_read(message, "sbs", &profile, &runtime, &copy_mode);
+        if (r < 0)
+                return r;
+
+        if (streq(copy_mode, "symlink"))
+                flags |= PORTABLE_PREFER_SYMLINK;
+        else if (streq(copy_mode, "copy"))
+                flags |= PORTABLE_PREFER_COPY;
+        else if (!isempty(copy_mode))
+                return sd_bus_reply_method_errorf(message, SD_BUS_ERROR_INVALID_ARGS, "Unknown copy mode '%s'", copy_mode);
+
+        if (runtime)
+                flags |= PORTABLE_RUNTIME;
+
+        r = bus_image_acquire(m,
+                              message,
+                              name_or_path,
+                              image,
+                              BUS_IMAGE_AUTHENTICATE_ALL,
+                              "org.freedesktop.portable1.attach-images",
+                              &image,
+                              error);
+        if (r < 0)
+                return r;
+        if (r == 0) /* Will call us back */
+                return 1;
+
+        r = portable_detach(
+                        sd_bus_message_get_bus(message),
+                        image->path,
+                        flags,
+                        &changes_detached,
+                        &n_changes_detached,
+                        error);
+        if (r < 0)
+                goto finish;
+
+        r = portable_attach(
+                        sd_bus_message_get_bus(message),
+                        image->path,
+                        matches,
+                        profile,
+                        flags,
+                        &changes_attached,
+                        &n_changes_attached,
+                        error);
+        if (r < 0)
+                goto finish;
+
+        /* We want to return the list of units really removed by the detach,
+         * and not added again by the attach */
+        r = normalize_portable_changes(changes_attached, n_changes_attached,
+                                       changes_detached, n_changes_detached,
+                                       &changes_gone, &n_changes_gone);
+        if (r < 0)
+                goto finish;
+
+        /* First, return the units that are gone (so that the caller can stop them)
+         * Then, return the units that are changed/added (so that the caller can
+         * start/restart/enable them) */
+        r = reply_portable_changes_pair(message,
+                                        changes_gone, n_changes_gone,
+                                        changes_attached, n_changes_attached);
+        if (r < 0)
+                goto finish;
+
+finish:
+        portable_changes_free(changes_detached, n_changes_detached);
+        portable_changes_free(changes_attached, n_changes_attached);
+        portable_changes_free(changes_gone, n_changes_gone);
+        return r;
+}
+
+static int bus_image_method_reattach(sd_bus_message *message, void *userdata, sd_bus_error *error) {
+        return bus_image_common_reattach(NULL, message, NULL, userdata, error);
+}
+
 int bus_image_common_mark_read_only(
                 Manager *m,
                 sd_bus_message *message,
@@ -532,6 +712,7 @@ const sd_bus_vtable image_vtable[] = {
         SD_BUS_METHOD("GetState", NULL, "s", bus_image_method_get_state, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("Attach", "assbs", "a(sss)", bus_image_method_attach, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("Detach", "b", "a(sss)", bus_image_method_detach, SD_BUS_VTABLE_UNPRIVILEGED),
+        SD_BUS_METHOD("Reattach", "assbs", "a(sss)a(sss)", bus_image_method_reattach, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("Remove", NULL, NULL, bus_image_method_remove, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("MarkReadOnly", "b", NULL, bus_image_method_mark_read_only, SD_BUS_VTABLE_UNPRIVILEGED),
         SD_BUS_METHOD("SetLimit", "t", NULL, bus_image_method_set_limit, SD_BUS_VTABLE_UNPRIVILEGED),
index 50f1d935b1377327dbc7bf25294107edf3f88b04..e5faf43d907213e0cdb6aa28dd42f368592ea8df 100644 (file)
@@ -10,6 +10,7 @@ int bus_image_common_get_os_release(Manager *m, sd_bus_message *message, const c
 int bus_image_common_get_metadata(Manager *m, sd_bus_message *message, const char *name_or_path, Image *image, sd_bus_error *error);
 int bus_image_common_attach(Manager *m, sd_bus_message *message, const char *name_or_path, Image *image, sd_bus_error *error);
 int bus_image_common_remove(Manager *m, sd_bus_message *message, const char *name_or_path, Image *image, sd_bus_error *error);
+int bus_image_common_reattach(Manager *m, sd_bus_message *message, const char *name_or_path, Image *image, sd_bus_error *error);
 int bus_image_common_mark_read_only(Manager *m, sd_bus_message *message, const char *name_or_path, Image *image, sd_bus_error *error);
 int bus_image_common_set_limit(Manager *m, sd_bus_message *message, const char *name_or_path, Image *image, sd_bus_error *error);
 
index 71854245025db27d97a2e69bf0d6725a42aa99b9..e7ee7354287630ee71121bd00f1c441725e4f3c2 100644 (file)
@@ -2620,8 +2620,14 @@ static int native_help(void) {
                "     --service-address=BOOL    Resolve address for services (default: yes)\n"
                "     --service-txt=BOOL        Resolve TXT records for services (default: yes)\n"
                "     --cname=BOOL              Follow CNAME redirects (default: yes)\n"
-               "     --search=BOOL             Use search domains for single-label names\n"
-               "                                                              (default: yes)\n"
+               "     --validate=BOOL           Allow DNSSEC validation (default: yes)\n"
+               "     --synthesize=BOOL         Allow synthetic response (default: yes)\n"
+               "     --cache=BOOL              Allow response from cache (default: yes)\n"
+               "     --zone=BOOL               Allow response from locally registered mDNS/LLMNR\n"
+               "                               records (default: yes)\n"
+               "     --trust-anchor=BOOL       Allow response from local trust anchor (default: yes)\n"
+               "     --network=BOOL            Allow response from network (default: yes)\n"
+               "     --search=BOOL             Use search domains for single-label names (default: yes)\n"
                "     --raw[=payload|packet]    Dump the answer as binary data\n"
                "     --legend=BOOL             Print headers and additional info (default: yes)\n"
                "\nSee the %s for details.\n",
@@ -2961,6 +2967,12 @@ static int native_parse_argv(int argc, char *argv[]) {
                 ARG_VERSION = 0x100,
                 ARG_LEGEND,
                 ARG_CNAME,
+                ARG_VALIDATE,
+                ARG_SYNTHESIZE,
+                ARG_CACHE,
+                ARG_ZONE,
+                ARG_TRUST_ANCHOR,
+                ARG_NETWORK,
                 ARG_SERVICE_ADDRESS,
                 ARG_SERVICE_TXT,
                 ARG_RAW,
@@ -2977,6 +2989,12 @@ static int native_parse_argv(int argc, char *argv[]) {
                 { "interface",             required_argument, NULL, 'i'                       },
                 { "protocol",              required_argument, NULL, 'p'                       },
                 { "cname",                 required_argument, NULL, ARG_CNAME                 },
+                { "validate",              required_argument, NULL, ARG_VALIDATE              },
+                { "synthesize",            required_argument, NULL, ARG_SYNTHESIZE            },
+                { "cache",                 required_argument, NULL, ARG_CACHE                 },
+                { "zone",                  required_argument, NULL, ARG_ZONE                  },
+                { "trust-anchor",          required_argument, NULL, ARG_TRUST_ANCHOR          },
+                { "network",               required_argument, NULL, ARG_NETWORK               },
                 { "service-address",       required_argument, NULL, ARG_SERVICE_ADDRESS       },
                 { "service-txt",           required_argument, NULL, ARG_SERVICE_TXT           },
                 { "raw",                   optional_argument, NULL, ARG_RAW                   },
@@ -3100,6 +3118,48 @@ static int native_parse_argv(int argc, char *argv[]) {
                         SET_FLAG(arg_flags, SD_RESOLVED_NO_CNAME, r == 0);
                         break;
 
+                case ARG_VALIDATE:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --validate= argument.");
+                        SET_FLAG(arg_flags, SD_RESOLVED_NO_VALIDATE, r == 0);
+                        break;
+
+                case ARG_SYNTHESIZE:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --synthesize= argument.");
+                        SET_FLAG(arg_flags, SD_RESOLVED_NO_SYNTHESIZE, r == 0);
+                        break;
+
+                case ARG_CACHE:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --cache= argument.");
+                        SET_FLAG(arg_flags, SD_RESOLVED_NO_CACHE, r == 0);
+                        break;
+
+                case ARG_ZONE:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --zone= argument.");
+                        SET_FLAG(arg_flags, SD_RESOLVED_NO_ZONE, r == 0);
+                        break;
+
+                case ARG_TRUST_ANCHOR:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --trust-anchor= argument.");
+                        SET_FLAG(arg_flags, SD_RESOLVED_NO_TRUST_ANCHOR, r == 0);
+                        break;
+
+                case ARG_NETWORK:
+                        r = parse_boolean(optarg);
+                        if (r < 0)
+                                return log_error_errno(r, "Failed to parse --network= argument.");
+                        SET_FLAG(arg_flags, SD_RESOLVED_NO_NETWORK, r == 0);
+                        break;
+
                 case ARG_SERVICE_ADDRESS:
                         r = parse_boolean(optarg);
                         if (r < 0)
index dd27c50b498289b82c593efcf49c8ecc2cbd21f4..0c1124f7ddd8e89e935ce77ba9faa4e361fbc6b9 100644 (file)
@@ -101,6 +101,12 @@ static int reply_query_state(DnsQuery *q) {
                  * thus quickly know that we cannot resolve an in-addr.arpa or ip6.arpa address. */
                 return sd_bus_reply_method_errorf(q->bus_request, _BUS_ERROR_DNS "NXDOMAIN", "'%s' not found", dns_query_string(q));
 
+        case DNS_TRANSACTION_NO_SOURCE:
+                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_NO_SOURCE, "All suitable resolution sources turned off");
+
+        case DNS_TRANSACTION_STUB_LOOP:
+                return sd_bus_reply_method_errorf(q->bus_request, BUS_ERROR_STUB_LOOP, "Configured DNS server loops back to us");
+
         case DNS_TRANSACTION_RCODE_FAILURE: {
                 _cleanup_(sd_bus_error_free) sd_bus_error error = SD_BUS_ERROR_NULL;
 
@@ -274,8 +280,8 @@ static int validate_and_mangle_flags(
          *
          * 1. Checks that the interface index is either 0 (meaning *all* interfaces) or positive
          *
-         * 2. Only the protocols flags and the NO_CNAME flag are set, at most. Plus additional flags specific
-         *    to our method, passed in the "ok" parameter.
+         * 2. Only the protocols flags and a bunch of NO_XYZ flags are set, at most. Plus additional flags
+         *    specific to our method, passed in the "ok" parameter.
          *
          * 3. If zero protocol flags are specified it is automatically turned into *all* protocols. This way
          *    clients can simply pass 0 as flags and all will work as it should. They can also use this so
@@ -283,7 +289,15 @@ static int validate_and_mangle_flags(
          *    to mean "all supported protocols".
          */
 
-        if (*flags & ~(SD_RESOLVED_PROTOCOLS_ALL|SD_RESOLVED_NO_CNAME|ok))
+        if (*flags & ~(SD_RESOLVED_PROTOCOLS_ALL|
+                       SD_RESOLVED_NO_CNAME|
+                       SD_RESOLVED_NO_VALIDATE|
+                       SD_RESOLVED_NO_SYNTHESIZE|
+                       SD_RESOLVED_NO_CACHE|
+                       SD_RESOLVED_NO_ZONE|
+                       SD_RESOLVED_NO_TRUST_ANCHOR|
+                       SD_RESOLVED_NO_NETWORK|
+                       ok))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid flags parameter");
 
         if ((*flags & SD_RESOLVED_PROTOCOLS_ALL) == 0) /* If no protocol is enabled, enable all */
@@ -406,7 +420,7 @@ static int bus_method_resolve_hostname(sd_bus_message *message, void *userdata,
         if (r < 0 && r != -EALREADY)
                 return r;
 
-        r = dns_query_new(m, &q, question_utf8, question_idna ?: question_utf8, ifindex, flags);
+        r = dns_query_new(m, &q, question_utf8, question_idna ?: question_utf8, NULL, ifindex, flags);
         if (r < 0)
                 return r;
 
@@ -548,7 +562,7 @@ static int bus_method_resolve_address(sd_bus_message *message, void *userdata, s
         if (r < 0)
                 return r;
 
-        r = dns_query_new(m, &q, question, question, ifindex, flags|SD_RESOLVED_NO_SEARCH);
+        r = dns_query_new(m, &q, question, question, NULL, ifindex, flags|SD_RESOLVED_NO_SEARCH);
         if (r < 0)
                 return r;
 
@@ -724,14 +738,12 @@ static int bus_method_resolve_record(sd_bus_message *message, void *userdata, sd
         if (r < 0)
                 return r;
 
-        r = dns_query_new(m, &q, question, question, ifindex, flags|SD_RESOLVED_NO_SEARCH);
+        /* Setting SD_RESOLVED_CLAMP_TTL: let's request that the TTL is fixed up for locally cached entries,
+         * after all we return it in the wire format blob. */
+        r = dns_query_new(m, &q, question, question, NULL, ifindex, flags|SD_RESOLVED_NO_SEARCH|SD_RESOLVED_CLAMP_TTL);
         if (r < 0)
                 return r;
 
-        /* Let's request that the TTL is fixed up for locally cached entries, after all we return it in the wire format
-         * blob */
-        q->clamp_ttl = true;
-
         q->bus_request = sd_bus_message_ref(message);
         q->complete = bus_method_resolve_record_complete;
 
@@ -1088,7 +1100,7 @@ static int resolve_service_hostname(DnsQuery *q, DnsResourceRecord *rr, int ifin
         if (r < 0)
                 return r;
 
-        r = dns_query_new(q->manager, &aux, question, question, ifindex, q->flags|SD_RESOLVED_NO_SEARCH);
+        r = dns_query_new(q->manager, &aux, question, question, NULL, ifindex, q->flags|SD_RESOLVED_NO_SEARCH);
         if (r < 0)
                 return r;
 
@@ -1258,7 +1270,7 @@ static int bus_method_resolve_service(sd_bus_message *message, void *userdata, s
         if (r < 0)
                 return r;
 
-        r = dns_query_new(m, &q, question_utf8, question_idna, ifindex, flags|SD_RESOLVED_NO_SEARCH);
+        r = dns_query_new(m, &q, question_utf8, question_idna, NULL, ifindex, flags|SD_RESOLVED_NO_SEARCH);
         if (r < 0)
                 return r;
 
index 21eb6994e62302755ae39ab9330d178aff1655e4..133cf0556f69047a721df702c300554b3eb8c26d 100644 (file)
 /* Output: Result is authenticated */
 #define SD_RESOLVED_AUTHENTICATED   (UINT64_C(1) << 9)
 
+/* Input: Don't DNSSEC validate request */
+#define SD_RESOLVED_NO_VALIDATE     (UINT64_C(1) << 10)
+
+/* Input: Don't answer request from locally synthesized records (which includes /etc/hosts) */
+#define SD_RESOLVED_NO_SYNTHESIZE   (UINT64_C(1) << 11)
+
+/* Input: Don't answer request from cache */
+#define SD_RESOLVED_NO_CACHE        (UINT64_C(1) << 12)
+
+/* Input: Don't answer request from locally registered public LLMNR/mDNS RRs */
+#define SD_RESOLVED_NO_ZONE         (UINT64_C(1) << 13)
+
+/* Input: Don't answer request from locally registered public LLMNR/mDNS RRs */
+#define SD_RESOLVED_NO_TRUST_ANCHOR (UINT64_C(1) << 14)
+
+/* Input: Don't go to network for this request */
+#define SD_RESOLVED_NO_NETWORK      (UINT64_C(1) << 15)
+
+/* Input: Require that request is answered from a "primary" answer, i.e. not from RRs acquired as
+ * side-effect of a previous transaction */
+#define SD_RESOLVED_REQUIRE_PRIMARY (UINT64_C(1) << 16)
+
+/* Input: If reply is answered from cache, the TTLs will be adjusted by age of cache entry */
+#define SD_RESOLVED_CLAMP_TTL       (UINT64_C(1) << 17)
+
 #define SD_RESOLVED_LLMNR           (SD_RESOLVED_LLMNR_IPV4|SD_RESOLVED_LLMNR_IPV6)
 #define SD_RESOLVED_MDNS            (SD_RESOLVED_MDNS_IPV4|SD_RESOLVED_MDNS_IPV6)
 #define SD_RESOLVED_PROTOCOLS_ALL   (SD_RESOLVED_MDNS|SD_RESOLVED_LLMNR|SD_RESOLVED_DNS)
index a2878ec2bb87127eb4d665468addedc2bb7748cd..aac34575d4fa551d73bc0fd359e5595d6ae5076b 100644 (file)
@@ -4,6 +4,7 @@
 
 #include "alloc-util.h"
 #include "dns-domain.h"
+#include "random-util.h"
 #include "resolved-dns-answer.h"
 #include "resolved-dns-dnssec.h"
 #include "string-util.h"
@@ -55,20 +56,21 @@ DnsAnswer *dns_answer_new(size_t n) {
         a->n_ref = 1;
         a->n_allocated = n;
         a->set_items = TAKE_PTR(s);
-
         return a;
 }
 
 static void dns_answer_flush(DnsAnswer *a) {
-        DnsResourceRecord *rr;
+        DnsAnswerItem *item;
 
         if (!a)
                 return;
 
         a->set_items = set_free(a->set_items);
 
-        DNS_ANSWER_FOREACH(rr, a)
-                dns_resource_record_unref(rr);
+        DNS_ANSWER_FOREACH_ITEM(item, a) {
+                dns_resource_record_unref(item->rr);
+                dns_resource_record_unref(item->rrsig);
+        }
 
         a->n_rrs = 0;
 }
@@ -82,7 +84,13 @@ static DnsAnswer *dns_answer_free(DnsAnswer *a) {
 
 DEFINE_TRIVIAL_REF_UNREF_FUNC(DnsAnswer, dns_answer, dns_answer_free);
 
-static int dns_answer_add_raw(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags) {
+static int dns_answer_add_raw(
+                DnsAnswer *a,
+                DnsResourceRecord *rr,
+                int ifindex,
+                DnsAnswerFlags flags,
+                DnsResourceRecord *rrsig) {
+
         int r;
 
         assert(rr);
@@ -97,6 +105,7 @@ static int dns_answer_add_raw(DnsAnswer *a, DnsResourceRecord *rr, int ifindex,
                 .rr = rr,
                 .ifindex = ifindex,
                 .flags = flags,
+                .rrsig = dns_resource_record_ref(rrsig),
         };
 
         r = set_put(a->set_items, &a->items[a->n_rrs]);
@@ -112,12 +121,16 @@ static int dns_answer_add_raw(DnsAnswer *a, DnsResourceRecord *rr, int ifindex,
 }
 
 static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) {
-        DnsResourceRecord *rr;
-        DnsAnswerFlags flags;
-        int ifindex, r;
+        DnsAnswerItem *item;
+        int r;
 
-        DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, source) {
-                r = dns_answer_add_raw(a, rr, ifindex, flags);
+        DNS_ANSWER_FOREACH_ITEM(item, source) {
+                r = dns_answer_add_raw(
+                                a,
+                                item->rr,
+                                item->ifindex,
+                                item->flags,
+                                item->rrsig);
                 if (r < 0)
                         return r;
         }
@@ -125,7 +138,13 @@ static int dns_answer_add_raw_all(DnsAnswer *a, DnsAnswer *source) {
         return 0;
 }
 
-int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags) {
+int dns_answer_add(
+                DnsAnswer *a,
+                DnsResourceRecord *rr,
+                int ifindex,
+                DnsAnswerFlags flags,
+                DnsResourceRecord *rrsig) {
+
         DnsAnswerItem tmp, *exist;
 
         assert(rr);
@@ -152,22 +171,28 @@ int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFl
                 if (rr->ttl > exist->rr->ttl) {
                         dns_resource_record_unref(exist->rr);
                         exist->rr = dns_resource_record_ref(rr);
+
+                        /* Update RRSIG and RR at the same time */
+                        if (rrsig) {
+                                dns_resource_record_ref(rrsig);
+                                dns_resource_record_unref(exist->rrsig);
+                                exist->rrsig = rrsig;
+                        }
                 }
 
                 exist->flags |= flags;
                 return 0;
         }
 
-        return dns_answer_add_raw(a, rr, ifindex, flags);
+        return dns_answer_add_raw(a, rr, ifindex, flags, rrsig);
 }
 
 static int dns_answer_add_all(DnsAnswer *a, DnsAnswer *b) {
-        DnsResourceRecord *rr;
-        DnsAnswerFlags flags;
-        int ifindex, r;
+        DnsAnswerItem *item;
+        int r;
 
-        DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, b) {
-                r = dns_answer_add(a, rr, ifindex, flags);
+        DNS_ANSWER_FOREACH_ITEM(item, b) {
+                r = dns_answer_add(a, item->rr, item->ifindex, item->flags, item->rrsig);
                 if (r < 0)
                         return r;
         }
@@ -175,7 +200,13 @@ static int dns_answer_add_all(DnsAnswer *a, DnsAnswer *b) {
         return 0;
 }
 
-int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags) {
+int dns_answer_add_extend(
+                DnsAnswer **a,
+                DnsResourceRecord *rr,
+                int ifindex,
+                DnsAnswerFlags flags,
+                DnsResourceRecord *rrsig) {
+
         int r;
 
         assert(a);
@@ -185,7 +216,7 @@ int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, Dns
         if (r < 0)
                 return r;
 
-        return dns_answer_add(*a, rr, ifindex, flags);
+        return dns_answer_add(*a, rr, ifindex, flags, rrsig);
 }
 
 int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex) {
@@ -211,7 +242,7 @@ int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex
         soa->soa.expire = 1;
         soa->soa.minimum = ttl;
 
-        return dns_answer_add(a, soa, ifindex, DNS_ANSWER_AUTHENTICATED);
+        return dns_answer_add(a, soa, ifindex, DNS_ANSWER_AUTHENTICATED, NULL);
 }
 
 int dns_answer_match_key(DnsAnswer *a, const DnsResourceKey *key, DnsAnswerFlags *ret_flags) {
@@ -249,10 +280,9 @@ int dns_answer_match_key(DnsAnswer *a, const DnsResourceKey *key, DnsAnswerFlags
 int dns_answer_contains_nsec_or_nsec3(DnsAnswer *a) {
         DnsResourceRecord *i;
 
-        DNS_ANSWER_FOREACH(i, a) {
+        DNS_ANSWER_FOREACH(i, a)
                 if (IN_SET(i->key->type, DNS_TYPE_NSEC, DNS_TYPE_NSEC3))
                         return true;
-        }
 
         return false;
 }
@@ -284,7 +314,22 @@ int dns_answer_contains_zone_nsec3(DnsAnswer *answer, const char *zone) {
         return false;
 }
 
-int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret, DnsAnswerFlags *flags) {
+int dns_answer_contains(DnsAnswer *answer, DnsResourceRecord *rr) {
+        DnsResourceRecord *i;
+
+        DNS_ANSWER_FOREACH(i, answer)
+                if (dns_resource_record_equal(i, rr))
+                        return true;
+
+        return false;
+}
+
+int dns_answer_find_soa(
+                DnsAnswer *a,
+                const DnsResourceKey *key,
+                DnsResourceRecord **ret,
+                DnsAnswerFlags *ret_flags) {
+
         DnsResourceRecord *rr, *soa = NULL;
         DnsAnswerFlags rr_flags, soa_flags = 0;
         int r;
@@ -293,7 +338,7 @@ int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceReco
 
         /* For a SOA record we can never find a matching SOA record */
         if (key->type == DNS_TYPE_SOA)
-                return 0;
+                goto not_found;
 
         DNS_ANSWER_FOREACH_FLAGS(rr, rr_flags, a) {
                 r = dns_resource_key_match_soa(key, rr->key);
@@ -315,17 +360,30 @@ int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceReco
         }
 
         if (!soa)
-                return 0;
+                goto not_found;
 
         if (ret)
                 *ret = soa;
-        if (flags)
-                *flags = soa_flags;
+        if (ret_flags)
+                *ret_flags = soa_flags;
 
         return 1;
+
+not_found:
+        if (ret)
+                *ret = NULL;
+        if (ret_flags)
+                *ret_flags = 0;
+
+        return 0;
 }
 
-int dns_answer_find_cname_or_dname(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret, DnsAnswerFlags *flags) {
+int dns_answer_find_cname_or_dname(
+                DnsAnswer *a,
+                const DnsResourceKey *key,
+                DnsResourceRecord **ret,
+                DnsAnswerFlags *ret_flags) {
+
         DnsResourceRecord *rr;
         DnsAnswerFlags rr_flags;
         int r;
@@ -343,12 +401,17 @@ int dns_answer_find_cname_or_dname(DnsAnswer *a, const DnsResourceKey *key, DnsR
                 if (r > 0) {
                         if (ret)
                                 *ret = rr;
-                        if (flags)
-                                *flags = rr_flags;
+                        if (ret_flags)
+                                *ret_flags = rr_flags;
                         return 1;
                 }
         }
 
+        if (ret)
+                *ret = NULL;
+        if (ret_flags)
+                *ret_flags = 0;
+
         return 0;
 }
 
@@ -440,21 +503,20 @@ int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key) {
 
         if ((*a)->n_ref > 1) {
                 _cleanup_(dns_answer_unrefp) DnsAnswer *copy = NULL;
-                DnsAnswerFlags flags;
-                int ifindex;
+                DnsAnswerItem *item;
 
                 copy = dns_answer_new((*a)->n_rrs);
                 if (!copy)
                         return -ENOMEM;
 
-                DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, *a) {
-                        r = dns_resource_key_equal(rr->key, key);
+                DNS_ANSWER_FOREACH_ITEM(item, *a) {
+                        r = dns_resource_key_equal(item->rr->key, key);
                         if (r < 0)
                                 return r;
                         if (r > 0)
                                 continue;
 
-                        r = dns_answer_add_raw(copy, rr, ifindex, flags);
+                        r = dns_answer_add_raw(copy, item->rr, item->ifindex, item->flags, item->rrsig);
                         if (r < 0)
                                 return r;
                 }
@@ -479,6 +541,8 @@ int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key) {
                         /* Kill this entry */
 
                         dns_resource_record_unref((*a)->items[i].rr);
+                        dns_resource_record_unref((*a)->items[i].rrsig);
+
                         memmove((*a)->items + i, (*a)->items + i + 1, sizeof(DnsAnswerItem) * ((*a)->n_rrs - i - 1));
                         (*a)->n_rrs--;
                         continue;
@@ -525,21 +589,20 @@ int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rm) {
 
         if ((*a)->n_ref > 1) {
                 _cleanup_(dns_answer_unrefp) DnsAnswer *copy = NULL;
-                DnsAnswerFlags flags;
-                int ifindex;
+                DnsAnswerItem *item;
 
                 copy = dns_answer_new((*a)->n_rrs);
                 if (!copy)
                         return -ENOMEM;
 
-                DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, *a) {
-                        r = dns_resource_record_equal(rr, rm);
+                DNS_ANSWER_FOREACH_ITEM(item, *a) {
+                        r = dns_resource_record_equal(item->rr, rm);
                         if (r < 0)
                                 return r;
                         if (r > 0)
                                 continue;
 
-                        r = dns_answer_add_raw(copy, rr, ifindex, flags);
+                        r = dns_answer_add_raw(copy, item->rr, item->ifindex, item->flags, item->rrsig);
                         if (r < 0)
                                 return r;
                 }
@@ -564,6 +627,7 @@ int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rm) {
                         /* Kill this entry */
 
                         dns_resource_record_unref((*a)->items[i].rr);
+                        dns_resource_record_unref((*a)->items[i].rrsig);
                         memmove((*a)->items + i, (*a)->items + i + 1, sizeof(DnsAnswerItem) * ((*a)->n_rrs - i - 1));
                         (*a)->n_rrs--;
                         continue;
@@ -576,19 +640,24 @@ int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rm) {
         return 1;
 }
 
-int dns_answer_copy_by_key(DnsAnswer **a, DnsAnswer *source, const DnsResourceKey *key, DnsAnswerFlags or_flags) {
-        DnsResourceRecord *rr_source;
-        int ifindex_source, r;
-        DnsAnswerFlags flags_source;
+int dns_answer_copy_by_key(
+                DnsAnswer **a,
+                DnsAnswer *source,
+                const DnsResourceKey *key,
+                DnsAnswerFlags or_flags,
+                DnsResourceRecord *rrsig) {
+
+        DnsAnswerItem *item;
+        int r;
 
         assert(a);
         assert(key);
 
         /* Copy all RRs matching the specified key from source into *a */
 
-        DNS_ANSWER_FOREACH_FULL(rr_source, ifindex_source, flags_source, source) {
+        DNS_ANSWER_FOREACH_ITEM(item, source) {
 
-                r = dns_resource_key_equal(rr_source->key, key);
+                r = dns_resource_key_equal(item->rr->key, key);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -599,7 +668,7 @@ int dns_answer_copy_by_key(DnsAnswer **a, DnsAnswer *source, const DnsResourceKe
                 if (r < 0)
                         return r;
 
-                r = dns_answer_add(*a, rr_source, ifindex_source, flags_source|or_flags);
+                r = dns_answer_add(*a, item->rr, item->ifindex, item->flags|or_flags, item->rrsig);
                 if (r < 0)
                         return r;
         }
@@ -607,14 +676,19 @@ int dns_answer_copy_by_key(DnsAnswer **a, DnsAnswer *source, const DnsResourceKe
         return 0;
 }
 
-int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKey *key, DnsAnswerFlags or_flags) {
+int dns_answer_move_by_key(
+                DnsAnswer **to,
+                DnsAnswer **from,
+                const DnsResourceKey *key,
+                DnsAnswerFlags or_flags,
+                DnsResourceRecord *rrsig) {
         int r;
 
         assert(to);
         assert(from);
         assert(key);
 
-        r = dns_answer_copy_by_key(to, *from, key, or_flags);
+        r = dns_answer_copy_by_key(to, *from, key, or_flags, rrsig);
         if (r < 0)
                 return r;
 
@@ -639,10 +713,7 @@ void dns_answer_order_by_scope(DnsAnswer *a, bool prefer_link_local) {
 
         items = newa(DnsAnswerItem, a->n_rrs);
         for (i = 0; i < a->n_rrs; i++) {
-
-                if (a->items[i].rr->key->class == DNS_CLASS_IN &&
-                    ((a->items[i].rr->key->type == DNS_TYPE_A && in_addr_is_link_local(AF_INET, (union in_addr_union*) &a->items[i].rr->a.in_addr) != prefer_link_local) ||
-                     (a->items[i].rr->key->type == DNS_TYPE_AAAA && in_addr_is_link_local(AF_INET6, (union in_addr_union*) &a->items[i].rr->aaaa.in6_addr) != prefer_link_local)))
+                if (dns_resource_record_is_link_local_address(a->items[i].rr) != prefer_link_local)
                         /* Order address records that are not preferred to the end of the array */
                         items[end--] = a->items[i];
                 else
@@ -669,16 +740,21 @@ int dns_answer_reserve(DnsAnswer **a, size_t n_free) {
                 if ((*a)->n_ref > 1)
                         return -EBUSY;
 
-                ns = (*a)->n_rrs + n_free;
-                if (ns > UINT16_MAX) /* Maximum number of RRs we can stick into a DNS packet section */
+                ns = (*a)->n_rrs;
+                assert(ns <= UINT16_MAX); /* Maximum number of RRs we can stick into a DNS packet section */
+
+                if (n_free > UINT16_MAX - ns) /* overflow check */
                         ns = UINT16_MAX;
+                else
+                        ns += n_free;
 
                 if ((*a)->n_allocated >= ns)
                         return 0;
 
-                /* Allocate more than we need */
-                ns *= 2;
-                if (ns > UINT16_MAX)
+                /* Allocate more than we need, but not more than UINT16_MAX */
+                if (ns <= UINT16_MAX/2)
+                        ns *= 2;
+                else
                         ns = UINT16_MAX;
 
                 /* This must be done before realloc() below. Otherwise, the original DnsAnswer object
@@ -709,33 +785,50 @@ int dns_answer_reserve(DnsAnswer **a, size_t n_free) {
 }
 
 int dns_answer_reserve_or_clone(DnsAnswer **a, size_t n_free) {
-        _cleanup_(dns_answer_unrefp) DnsAnswer *n = NULL;
         int r;
 
         assert(a);
 
-        /* Tries to extend the DnsAnswer object. And if that's not
-         * possible, since we are not the sole owner, then allocate a
-         * new, appropriately sized one. Either way, after this call
-         * the object will only have a single reference, and has room
-         * for at least the specified number of RRs. */
+        /* Tries to extend the DnsAnswer object. And if that's not possible, since we are not the sole owner,
+         * then allocate a new, appropriately sized one. Either way, after this call the object will only
+         * have a single reference, and has room for at least the specified number of RRs. */
 
-        r = dns_answer_reserve(a, n_free);
-        if (r != -EBUSY)
-                return r;
+        if (*a && (*a)->n_ref > 1) {
+                _cleanup_(dns_answer_unrefp) DnsAnswer *n = NULL;
+                size_t ns;
 
-        assert(*a);
+                ns = (*a)->n_rrs;
+                assert(ns <= UINT16_MAX); /* Maximum number of RRs we can stick into a DNS packet section */
 
-        n = dns_answer_new(((*a)->n_rrs + n_free) * 2);
-        if (!n)
-                return -ENOMEM;
+                if (n_free > UINT16_MAX - ns) /* overflow check */
+                        ns = UINT16_MAX;
+                else if (n_free > 0) { /* Increase size and double the result, just in case â€” except if the
+                                        * increase is specified as 0, in which case we just allocate the
+                                        * exact amount as before, under the assumption this is just a request
+                                        * to copy the answer. */
+                        ns += n_free;
+
+                        if (ns <= UINT16_MAX/2) /* overflow check */
+                                ns *= 2;
+                        else
+                                ns = UINT16_MAX;
+                }
 
-        r = dns_answer_add_raw_all(n, *a);
-        if (r < 0)
-                return r;
+                n = dns_answer_new(ns);
+                if (!n)
+                        return -ENOMEM;
 
-        dns_answer_unref(*a);
-        *a = TAKE_PTR(n);
+                r = dns_answer_add_raw_all(n, *a);
+                if (r < 0)
+                        return r;
+
+                dns_answer_unref(*a);
+                assert_se(*a = TAKE_PTR(n));
+        } else if (n_free > 0) {
+                r = dns_answer_reserve(a, n_free);
+                if (r < 0)
+                        return r;
+        }
 
         return 0;
 }
@@ -744,19 +837,17 @@ int dns_answer_reserve_or_clone(DnsAnswer **a, size_t n_free) {
  * This function is not used in the code base, but is useful when debugging. Do not delete.
  */
 void dns_answer_dump(DnsAnswer *answer, FILE *f) {
-        DnsResourceRecord *rr;
-        DnsAnswerFlags flags;
-        int ifindex;
+        DnsAnswerItem *item;
 
         if (!f)
                 f = stdout;
 
-        DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, answer) {
+        DNS_ANSWER_FOREACH_ITEM(item, answer) {
                 const char *t;
 
                 fputc('\t', f);
 
-                t = dns_resource_record_to_string(rr);
+                t = dns_resource_record_to_string(item->rr);
                 if (!t) {
                         log_oom();
                         continue;
@@ -764,21 +855,29 @@ void dns_answer_dump(DnsAnswer *answer, FILE *f) {
 
                 fputs(t, f);
 
-                if (ifindex != 0 || flags != 0)
+                if (item->ifindex != 0 || item->rrsig || item->flags != 0)
                         fputs("\t;", f);
 
-                if (ifindex != 0)
-                        fprintf(f, " ifindex=%i", ifindex);
-                if (flags & DNS_ANSWER_AUTHENTICATED)
+                if (item->ifindex != 0)
+                        fprintf(f, " ifindex=%i", item->ifindex);
+                if (item->rrsig)
+                        fputs(" rrsig", f);
+                if (item->flags & DNS_ANSWER_AUTHENTICATED)
                         fputs(" authenticated", f);
-                if (flags & DNS_ANSWER_CACHEABLE)
+                if (item->flags & DNS_ANSWER_CACHEABLE)
                         fputs(" cacheable", f);
-                if (flags & DNS_ANSWER_SHARED_OWNER)
+                if (item->flags & DNS_ANSWER_SHARED_OWNER)
                         fputs(" shared-owner", f);
-                if (flags & DNS_ANSWER_CACHE_FLUSH)
+                if (item->flags & DNS_ANSWER_CACHE_FLUSH)
                         fputs(" cache-flush", f);
-                if (flags & DNS_ANSWER_GOODBYE)
+                if (item->flags & DNS_ANSWER_GOODBYE)
                         fputs(" goodbye", f);
+                if (item->flags & DNS_ANSWER_SECTION_ANSWER)
+                        fputs(" section-answer", f);
+                if (item->flags & DNS_ANSWER_SECTION_AUTHORITY)
+                        fputs(" section-authority", f);
+                if (item->flags & DNS_ANSWER_SECTION_ADDITIONAL)
+                        fputs(" section-additional", f);
 
                 fputc('\n', f);
         }
@@ -819,3 +918,23 @@ int dns_answer_has_dname_for_cname(DnsAnswer *a, DnsResourceRecord *cname) {
 
         return 0;
 }
+
+void dns_answer_randomize(DnsAnswer *a) {
+        size_t n;
+
+        /* Permutes the answer list randomly (Knuth shuffle) */
+
+        n = dns_answer_size(a);
+        if (n <= 1)
+                return;
+
+        for (size_t i = 0; i < n; i++) {
+                size_t k;
+
+                k = random_u64_range(n);
+                if (k == i)
+                        continue;
+
+                SWAP_TWO(a->items[i], a->items[k]);
+        }
+}
index d73525cedd211b47b7975e5d2fe295b34bfbdbb6..f90ca6701946d27fbbb938d365fbd7edbd20ee4b 100644 (file)
@@ -8,23 +8,25 @@ typedef struct DnsAnswerItem DnsAnswerItem;
 #include "resolved-dns-rr.h"
 #include "set.h"
 
-/* A simple array of resource records. We keep track of the
- * originating ifindex for each RR where that makes sense, so that we
- * can qualify A and AAAA RRs referring to a local link with the
- * right ifindex.
+/* A simple array of resource records. We keep track of the originating ifindex for each RR where that makes
+ * sense, so that we can qualify A and AAAA RRs referring to a local link with the right ifindex.
  *
  * Note that we usually encode the empty DnsAnswer object as a simple NULL. */
 
 typedef enum DnsAnswerFlags {
-        DNS_ANSWER_AUTHENTICATED = 1 << 0, /* Item has been authenticated */
-        DNS_ANSWER_CACHEABLE     = 1 << 1, /* Item is subject to caching */
-        DNS_ANSWER_SHARED_OWNER  = 1 << 2, /* For mDNS: RRset may be owner by multiple peers */
-        DNS_ANSWER_CACHE_FLUSH   = 1 << 3, /* For mDNS: sets cache-flush bit in the rrclass of response records */
-        DNS_ANSWER_GOODBYE       = 1 << 4, /* For mDNS: item is subject to disappear */
+        DNS_ANSWER_AUTHENTICATED      = 1 << 0, /* Item has been authenticated */
+        DNS_ANSWER_CACHEABLE          = 1 << 1, /* Item is subject to caching */
+        DNS_ANSWER_SHARED_OWNER       = 1 << 2, /* For mDNS: RRset may be owner by multiple peers */
+        DNS_ANSWER_CACHE_FLUSH        = 1 << 3, /* For mDNS: sets cache-flush bit in the rrclass of response records */
+        DNS_ANSWER_GOODBYE            = 1 << 4, /* For mDNS: item is subject to disappear */
+        DNS_ANSWER_SECTION_ANSWER     = 1 << 5, /* When parsing: RR originates from answer section */
+        DNS_ANSWER_SECTION_AUTHORITY  = 1 << 6, /* When parsing: RR originates from authority section */
+        DNS_ANSWER_SECTION_ADDITIONAL = 1 << 7, /* When parsing: RR originates from additional section */
 } DnsAnswerFlags;
 
 struct DnsAnswerItem {
         DnsResourceRecord *rr;
+        DnsResourceRecord *rrsig; /* Optionally, also store RRSIG RR that successfully validates this item */
         int ifindex;
         DnsAnswerFlags flags;
 };
@@ -40,16 +42,17 @@ DnsAnswer *dns_answer_new(size_t n);
 DnsAnswer *dns_answer_ref(DnsAnswer *a);
 DnsAnswer *dns_answer_unref(DnsAnswer *a);
 
-int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags);
-int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags);
+int dns_answer_add(DnsAnswer *a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
+int dns_answer_add_extend(DnsAnswer **a, DnsResourceRecord *rr, int ifindex, DnsAnswerFlags flags, DnsResourceRecord *rrsig);
 int dns_answer_add_soa(DnsAnswer *a, const char *name, uint32_t ttl, int ifindex);
 
 int dns_answer_match_key(DnsAnswer *a, const DnsResourceKey *key, DnsAnswerFlags *combined_flags);
 int dns_answer_contains_nsec_or_nsec3(DnsAnswer *a);
 int dns_answer_contains_zone_nsec3(DnsAnswer *answer, const char *zone);
+int dns_answer_contains(DnsAnswer *answer, DnsResourceRecord *rr);
 
-int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret, DnsAnswerFlags *flags);
-int dns_answer_find_cname_or_dname(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret, DnsAnswerFlags *flags);
+int dns_answer_find_soa(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret, DnsAnswerFlags *ret_flags);
+int dns_answer_find_cname_or_dname(DnsAnswer *a, const DnsResourceKey *key, DnsResourceRecord **ret, DnsAnswerFlags *ret_flags);
 
 int dns_answer_merge(DnsAnswer *a, DnsAnswer *b, DnsAnswer **ret);
 int dns_answer_extend(DnsAnswer **a, DnsAnswer *b);
@@ -62,8 +65,8 @@ int dns_answer_reserve_or_clone(DnsAnswer **a, size_t n_free);
 int dns_answer_remove_by_key(DnsAnswer **a, const DnsResourceKey *key);
 int dns_answer_remove_by_rr(DnsAnswer **a, DnsResourceRecord *rr);
 
-int dns_answer_copy_by_key(DnsAnswer **a, DnsAnswer *source, const DnsResourceKey *key, DnsAnswerFlags or_flags);
-int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKey *key, DnsAnswerFlags or_flags);
+int dns_answer_copy_by_key(DnsAnswer **a, DnsAnswer *source, const DnsResourceKey *key, DnsAnswerFlags or_flags, DnsResourceRecord *rrsig);
+int dns_answer_move_by_key(DnsAnswer **to, DnsAnswer **from, const DnsResourceKey *key, DnsAnswerFlags or_flags, DnsResourceRecord *rrsig);
 
 int dns_answer_has_dname_for_cname(DnsAnswer *a, DnsResourceRecord *cname);
 
@@ -77,6 +80,8 @@ static inline bool dns_answer_isempty(DnsAnswer *a) {
 
 void dns_answer_dump(DnsAnswer *answer, FILE *f);
 
+void dns_answer_randomize(DnsAnswer *a);
+
 DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref);
 
 #define _DNS_ANSWER_FOREACH(q, kk, a)                                   \
@@ -115,17 +120,13 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DnsAnswer*, dns_answer_unref);
 
 #define DNS_ANSWER_FOREACH_FLAGS(kk, flags, a) _DNS_ANSWER_FOREACH_FLAGS(UNIQ, kk, flags, a)
 
-#define _DNS_ANSWER_FOREACH_FULL(q, kk, ifi, fl, a)                     \
+#define _DNS_ANSWER_FOREACH_ITEM(q, item, a)                            \
         for (size_t UNIQ_T(i, q) = ({                                   \
-                                (kk) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].rr : NULL; \
-                                (ifi) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].ifindex : 0; \
-                                (fl) = ((a) && (a)->n_rrs > 0) ? (a)->items[0].flags : 0; \
+                                (item) = dns_answer_isempty(a) ? NULL : (a)->items; \
                                 0;                                      \
                         });                                             \
-             (a) && (UNIQ_T(i, q) < (a)->n_rrs);                        \
+             UNIQ_T(i, q) < dns_answer_size(a);                         \
              UNIQ_T(i, q)++,                                            \
-                     (kk) = ((UNIQ_T(i, q) < (a)->n_rrs) ? (a)->items[UNIQ_T(i, q)].rr : NULL), \
-                     (ifi) = ((UNIQ_T(i, q) < (a)->n_rrs) ? (a)->items[UNIQ_T(i, q)].ifindex : 0), \
-                     (fl) = ((UNIQ_T(i, q) < (a)->n_rrs) ? (a)->items[UNIQ_T(i, q)].flags : 0))
+                     (item) = ((UNIQ_T(i, q) < dns_answer_size(a)) ? (a)->items + UNIQ_T(i, q) : NULL))
 
-#define DNS_ANSWER_FOREACH_FULL(kk, ifindex, flags, a) _DNS_ANSWER_FOREACH_FULL(UNIQ, kk, ifindex, flags, a)
+#define DNS_ANSWER_FOREACH_ITEM(item, a) _DNS_ANSWER_FOREACH_ITEM(UNIQ, item, a)
index 75f1ccb6498ef9987d272aebd46bce1e8473c3d9..cf0e221621cfd5650db37cb32b5b1a1838ed0bb8 100644 (file)
@@ -34,13 +34,16 @@ enum DnsCacheItemType {
 
 struct DnsCacheItem {
         DnsCacheItemType type;
-        DnsResourceKey *key;
-        DnsResourceRecord *rr;
+        DnsResourceKey *key;     /* The key for this item, i.e. the lookup key */
+        DnsResourceRecord *rr;   /* The RR for this item, i.e. the lookup value for positive queries */
+        DnsAnswer *answer;       /* The full validated answer, if this is an RRset acquired via a "primary" lookup */
+        DnsPacket *full_packet;  /* The full packet this information was acquired with */
         int rcode;
 
         usec_t until;
         bool authenticated:1;
         bool shared_owner:1;
+        DnssecResult dnssec_result;
 
         int ifindex;
         int owner_family;
@@ -50,6 +53,12 @@ struct DnsCacheItem {
         LIST_FIELDS(DnsCacheItem, by_key);
 };
 
+/* Returns true if this is a cache item created as result of an explicit lookup, or created as "side-effect"
+ * of another request. "Primary" entries will carry the full answer data (with NSEC, â€¦) that can aso prove
+ * wildcard expansion, non-existance and such, while entries that were created as "side-effect" just contain
+ * immediate RR data for the specified RR key, but nothing else. */
+#define DNS_CACHE_ITEM_IS_PRIMARY(item) (!!(item)->answer)
+
 static const char *dns_cache_item_type_to_string(DnsCacheItem *item) {
         assert(item);
 
@@ -77,6 +86,8 @@ static void dns_cache_item_free(DnsCacheItem *i) {
 
         dns_resource_record_unref(i->rr);
         dns_resource_key_unref(i->key);
+        dns_answer_unref(i->answer);
+        dns_packet_unref(i->full_packet);
         free(i);
 }
 
@@ -340,8 +351,11 @@ static void dns_cache_item_update_positive(
                 DnsCache *c,
                 DnsCacheItem *i,
                 DnsResourceRecord *rr,
+                DnsAnswer *answer,
+                DnsPacket *full_packet,
                 bool authenticated,
                 bool shared_owner,
+                DnssecResult dnssec_result,
                 usec_t timestamp,
                 int ifindex,
                 int owner_family,
@@ -367,9 +381,18 @@ static void dns_cache_item_update_positive(
         dns_resource_key_unref(i->key);
         i->key = dns_resource_key_ref(rr->key);
 
-        i->until = calculate_until(rr, (uint32_t) -1, timestamp, false);
+        dns_answer_ref(answer);
+        dns_answer_unref(i->answer);
+        i->answer = answer;
+
+        dns_packet_ref(full_packet);
+        dns_packet_unref(i->full_packet);
+        i->full_packet = full_packet;
+
+        i->until = calculate_until(rr, UINT32_MAX, timestamp, false);
         i->authenticated = authenticated;
         i->shared_owner = shared_owner;
+        i->dnssec_result = dnssec_result;
 
         i->ifindex = ifindex;
 
@@ -382,8 +405,11 @@ static void dns_cache_item_update_positive(
 static int dns_cache_put_positive(
                 DnsCache *c,
                 DnsResourceRecord *rr,
+                DnsAnswer *answer,
+                DnsPacket *full_packet,
                 bool authenticated,
                 bool shared_owner,
+                DnssecResult dnssec_result,
                 usec_t timestamp,
                 int ifindex,
                 int owner_family,
@@ -420,8 +446,11 @@ static int dns_cache_put_positive(
                                 c,
                                 existing,
                                 rr,
+                                answer,
+                                full_packet,
                                 authenticated,
                                 shared_owner,
+                                dnssec_result,
                                 timestamp,
                                 ifindex,
                                 owner_family,
@@ -444,9 +473,12 @@ static int dns_cache_put_positive(
                 .type = DNS_CACHE_POSITIVE,
                 .key = dns_resource_key_ref(rr->key),
                 .rr = dns_resource_record_ref(rr),
+                .answer = dns_answer_ref(answer),
+                .full_packet = dns_packet_ref(full_packet),
                 .until = calculate_until(rr, (uint32_t) -1, timestamp, false),
                 .authenticated = authenticated,
                 .shared_owner = shared_owner,
+                .dnssec_result = dnssec_result,
                 .ifindex = ifindex,
                 .owner_family = owner_family,
                 .owner_address = *owner_address,
@@ -481,7 +513,10 @@ static int dns_cache_put_negative(
                 DnsCache *c,
                 DnsResourceKey *key,
                 int rcode,
+                DnsAnswer *answer,
+                DnsPacket *full_packet,
                 bool authenticated,
+                DnssecResult dnssec_result,
                 uint32_t nsec_ttl,
                 usec_t timestamp,
                 DnsResourceRecord *soa,
@@ -532,10 +567,13 @@ static int dns_cache_put_negative(
                         rcode == DNS_RCODE_SUCCESS ? DNS_CACHE_NODATA :
                         rcode == DNS_RCODE_NXDOMAIN ? DNS_CACHE_NXDOMAIN : DNS_CACHE_RCODE,
                 .authenticated = authenticated,
+                .dnssec_result = dnssec_result,
                 .owner_family = owner_family,
                 .owner_address = *owner_address,
                 .prioq_idx = PRIOQ_IDX_NULL,
                 .rcode = rcode,
+                .answer = dns_answer_ref(answer),
+                .full_packet = dns_packet_ref(full_packet),
         };
 
         i->until =
@@ -630,17 +668,20 @@ int dns_cache_put(
                 DnsResourceKey *key,
                 int rcode,
                 DnsAnswer *answer,
+                DnsPacket *full_packet,
                 bool authenticated,
+                DnssecResult dnssec_result,
                 uint32_t nsec_ttl,
-                usec_t timestamp,
                 int owner_family,
                 const union in_addr_union *owner_address) {
 
-        DnsResourceRecord *soa = NULL, *rr;
+        DnsResourceRecord *soa = NULL;
         bool weird_rcode = false;
+        DnsAnswerItem *item;
         DnsAnswerFlags flags;
         unsigned cache_keys;
-        int r, ifindex;
+        usec_t timestamp;
+        int r;
 
         assert(c);
         assert(owner_address);
@@ -660,6 +701,7 @@ int dns_cache_put(
                                 log_debug("Not caching negative entry without a SOA record: %s",
                                           dns_resource_key_to_string(key, key_str, sizeof key_str));
                         }
+
                         return 0;
                 }
 
@@ -679,23 +721,53 @@ int dns_cache_put(
         /* Make some space for our new entries */
         dns_cache_make_space(c, cache_keys);
 
-        if (timestamp <= 0)
-                timestamp = now(clock_boottime_or_monotonic());
+        timestamp = now(clock_boottime_or_monotonic());
 
         /* Second, add in positive entries for all contained RRs */
-        DNS_ANSWER_FOREACH_FULL(rr, ifindex, flags, answer) {
-                if ((flags & DNS_ANSWER_CACHEABLE) == 0 ||
-                    !rr_eligible(rr))
+        DNS_ANSWER_FOREACH_ITEM(item, answer) {
+                int primary = false;
+
+                if (!FLAGS_SET(item->flags, DNS_ANSWER_CACHEABLE) ||
+                    !rr_eligible(item->rr))
                         continue;
 
+                if (key) {
+                        /* We store the auxiliary RRs and packet data in the cache only if they were in
+                         * direct response to the original query. If we cache an RR we also received, and
+                         * that is just auxiliary information we can't use the data, hence don't. */
+
+                        primary = dns_resource_key_match_rr(key, item->rr, NULL);
+                        if (primary < 0)
+                                return primary;
+                        if (primary == 0) {
+                                primary = dns_resource_key_match_cname_or_dname(key, item->rr->key, NULL);
+                                if (primary < 0)
+                                        return primary;
+                        }
+                }
+
+                if (!primary) {
+                        DnsCacheItem *first;
+
+                        /* Do not replace existing cache items for primary lookups with non-primary
+                         * data. After all the primary lookup data is a lot more useful. */
+                        first = hashmap_get(c->by_key, item->rr->key);
+                        if (first && DNS_CACHE_ITEM_IS_PRIMARY(first))
+                                return 0;
+                }
+
                 r = dns_cache_put_positive(
                                 c,
-                                rr,
-                                flags & DNS_ANSWER_AUTHENTICATED,
-                                flags & DNS_ANSWER_SHARED_OWNER,
+                                item->rr,
+                                primary ? answer : NULL,
+                                primary ? full_packet : NULL,
+                                item->flags & DNS_ANSWER_AUTHENTICATED,
+                                item->flags & DNS_ANSWER_SHARED_OWNER,
+                                dnssec_result,
                                 timestamp,
-                                ifindex,
-                                owner_family, owner_address);
+                                item->ifindex,
+                                owner_family,
+                                owner_address);
                 if (r < 0)
                         goto fail;
         }
@@ -745,7 +817,10 @@ int dns_cache_put(
                         c,
                         key,
                         rcode,
+                        answer,
+                        full_packet,
                         authenticated,
+                        dnssec_result,
                         nsec_ttl,
                         timestamp,
                         soa,
@@ -762,11 +837,11 @@ fail:
         if (key)
                 dns_cache_remove_by_key(c, key);
 
-        DNS_ANSWER_FOREACH_FLAGS(rr, flags, answer) {
-                if ((flags & DNS_ANSWER_CACHEABLE) == 0)
+        DNS_ANSWER_FOREACH_ITEM(item, answer) {
+                if ((item->flags & DNS_ANSWER_CACHEABLE) == 0)
                         continue;
 
-                dns_cache_remove_by_key(c, rr->key);
+                dns_cache_remove_by_key(c, item->rr->key);
         }
 
         return r;
@@ -827,7 +902,59 @@ static DnsCacheItem *dns_cache_get_by_key_follow_cname_dname_nsec(DnsCache *c, D
         return NULL;
 }
 
-int dns_cache_lookup(DnsCache *c, DnsResourceKey *key, bool clamp_ttl, int *rcode, DnsAnswer **ret, bool *authenticated) {
+static int answer_add_clamp_ttl(
+                DnsAnswer **answer,
+                DnsResourceRecord *rr,
+                int ifindex,
+                DnsAnswerFlags answer_flags,
+                DnsResourceRecord *rrsig,
+                uint64_t query_flags,
+                usec_t until,
+                usec_t current) {
+
+        _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *patched = NULL, *patched_rrsig = NULL;
+        int r;
+
+        assert(answer);
+        assert(rr);
+
+        if (FLAGS_SET(query_flags, SD_RESOLVED_CLAMP_TTL)) {
+                patched = dns_resource_record_ref(rr);
+
+                r = dns_resource_record_clamp_ttl(&patched, LESS_BY(until, current) / USEC_PER_SEC);
+                if (r < 0)
+                        return r;
+
+                rr = patched;
+
+                if (rrsig) {
+                        patched_rrsig = dns_resource_record_ref(rrsig);
+                        r = dns_resource_record_clamp_ttl(&patched_rrsig, LESS_BY(until, current) / USEC_PER_SEC);
+                        if (r < 0)
+                                return r;
+
+                        rrsig = patched_rrsig;
+                }
+        }
+
+        r = dns_answer_add_extend(answer, rr, ifindex, answer_flags, rrsig);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+int dns_cache_lookup(
+                DnsCache *c,
+                DnsResourceKey *key,
+                uint64_t query_flags,
+                int *ret_rcode,
+                DnsAnswer **ret_answer,
+                DnsPacket **ret_full_packet,
+                bool *ret_authenticated,
+                DnssecResult *ret_dnssec_result) {
+
+        _cleanup_(dns_packet_unrefp) DnsPacket *full_packet = NULL;
         _cleanup_(dns_answer_unrefp) DnsAnswer *answer = NULL;
         char key_str[DNS_RESOURCE_KEY_STRING_MAX];
         unsigned n = 0;
@@ -837,27 +964,19 @@ int dns_cache_lookup(DnsCache *c, DnsResourceKey *key, bool clamp_ttl, int *rcod
         bool have_authenticated = false, have_non_authenticated = false;
         usec_t current;
         int found_rcode = -1;
+        DnssecResult dnssec_result = -1;
+        int have_dnssec_result = -1;
 
         assert(c);
         assert(key);
-        assert(rcode);
-        assert(ret);
-        assert(authenticated);
 
         if (key->type == DNS_TYPE_ANY || key->class == DNS_CLASS_ANY) {
-                /* If we have ANY lookups we don't use the cache, so
-                 * that the caller refreshes via the network. */
+                /* If we have ANY lookups we don't use the cache, so that the caller refreshes via the
+                 * network. */
 
                 log_debug("Ignoring cache for ANY lookup: %s",
                           dns_resource_key_to_string(key, key_str, sizeof key_str));
-
-                c->n_miss++;
-
-                *ret = NULL;
-                *rcode = DNS_RCODE_SUCCESS;
-                *authenticated = false;
-
-                return 0;
+                goto miss;
         }
 
         first = dns_cache_get_by_key_follow_cname_dname_nsec(c, key);
@@ -866,31 +985,80 @@ int dns_cache_lookup(DnsCache *c, DnsResourceKey *key, bool clamp_ttl, int *rcod
 
                 log_debug("Cache miss for %s",
                           dns_resource_key_to_string(key, key_str, sizeof key_str));
+                goto miss;
+        }
 
-                c->n_miss++;
+        if (FLAGS_SET(query_flags, SD_RESOLVED_CLAMP_TTL))
+                current = now(clock_boottime_or_monotonic());
 
-                *ret = NULL;
-                *rcode = DNS_RCODE_SUCCESS;
-                *authenticated = false;
+        LIST_FOREACH(by_key, j, first) {
+                /* If the caller doesn't allow us to answer questions from cache data learned from
+                 * "side-effect", skip this entry. */
+                if (FLAGS_SET(query_flags, SD_RESOLVED_REQUIRE_PRIMARY) &&
+                    !DNS_CACHE_ITEM_IS_PRIMARY(j)) {
+                        log_debug("Primary answer was requested for cache lookup for %s, which we don't have.",
+                                  dns_resource_key_to_string(key, key_str, sizeof key_str));
 
-                return 0;
-        }
+                        goto miss;
+                }
 
-        LIST_FOREACH(by_key, j, first) {
-                if (j->rr) {
+                if (j->type == DNS_CACHE_NXDOMAIN)
+                        nxdomain = true;
+                else if (j->type == DNS_CACHE_RCODE)
+                        found_rcode = j->rcode;
+                else if (j->rr) {
                         if (j->rr->key->type == DNS_TYPE_NSEC)
                                 nsec = j;
 
                         n++;
-                } else if (j->type == DNS_CACHE_NXDOMAIN)
-                        nxdomain = true;
-                else if (j->type == DNS_CACHE_RCODE)
-                        found_rcode = j->rcode;
+                }
 
                 if (j->authenticated)
                         have_authenticated = true;
                 else
                         have_non_authenticated = true;
+
+                if (j->dnssec_result < 0) {
+                        have_dnssec_result = false; /* an entry without dnssec result? then invalidate things for good */
+                        dnssec_result = _DNSSEC_RESULT_INVALID;
+                } else if (have_dnssec_result < 0) {
+                        have_dnssec_result = true; /* So far no result seen, let's pick this one up */
+                        dnssec_result = j->dnssec_result;
+                } else if (have_dnssec_result > 0 && j->dnssec_result != dnssec_result) {
+                        have_dnssec_result = false; /* conflicting result seen? then invalidate for good */
+                        dnssec_result = _DNSSEC_RESULT_INVALID;
+                }
+
+                /* Append the answer RRs to our answer. Ideally we have the answer object, which we
+                 * preferably use. But if the cached entry was generated as "side-effect" of a reply,
+                 * i.e. from validated auxiliary records rather than from the main reply, then we use the
+                 * individual RRs only instead. */
+                if (j->answer) {
+
+                        /* Minor optimization, if the full answer object of this and the previous RR is the
+                         * same, don't bother adding it again. Typically we store a full RRset here, hence
+                         * that should be the case. */
+                        if (!j->by_key_prev || j->answer != j->by_key_prev->answer) {
+                                DnsAnswerItem *item;
+
+                                DNS_ANSWER_FOREACH_ITEM(item, j->answer) {
+                                        r = answer_add_clamp_ttl(&answer, item->rr, item->ifindex, item->flags, item->rrsig, query_flags, j->until, current);
+                                        if (r < 0)
+                                                return r;
+                                }
+                        }
+
+                } else if (j->rr) {
+                        r = answer_add_clamp_ttl(&answer, j->rr, j->ifindex, j->authenticated ? DNS_ANSWER_AUTHENTICATED : 0, NULL, query_flags, j->until, current);
+                        if (r < 0)
+                                return r;
+                }
+
+                /* We'll return any packet we have for this. Typically all cache entries for the same key
+                 * should come from the same packet anyway, hence it doesn't really matter which packet we
+                 * return here, they should all resolve to the same anyway. */
+                if (!full_packet && j->full_packet)
+                        full_packet = dns_packet_ref(j->full_packet);
         }
 
         if (found_rcode >= 0) {
@@ -898,28 +1066,41 @@ int dns_cache_lookup(DnsCache *c, DnsResourceKey *key, bool clamp_ttl, int *rcod
                           dns_rcode_to_string(found_rcode),
                           dns_resource_key_to_string(key, key_str, sizeof(key_str)));
 
-                *ret = NULL;
-                *rcode = found_rcode;
-                *authenticated = false;
+                if (ret_rcode)
+                        *ret_rcode = found_rcode;
+                if (ret_answer)
+                        *ret_answer = TAKE_PTR(answer);
+                if (ret_full_packet)
+                        *ret_full_packet = TAKE_PTR(full_packet);
+                if (ret_authenticated)
+                        *ret_authenticated = false;
+                if (ret_dnssec_result)
+                        *ret_dnssec_result = dnssec_result;
 
                 c->n_hit++;
                 return 1;
         }
 
         if (nsec && !IN_SET(key->type, DNS_TYPE_NSEC, DNS_TYPE_DS)) {
-                /* Note that we won't derive information for DS RRs from an NSEC, because we only cache NSEC RRs from
-                 * the lower-zone of a zone cut, but the DS RRs are on the upper zone. */
+                /* Note that we won't derive information for DS RRs from an NSEC, because we only cache NSEC
+                 * RRs from the lower-zone of a zone cut, but the DS RRs are on the upper zone. */
 
                 log_debug("NSEC NODATA cache hit for %s",
                           dns_resource_key_to_string(key, key_str, sizeof key_str));
 
-                /* We only found an NSEC record that matches our name.
-                 * If it says the type doesn't exist report
-                 * NODATA. Otherwise report a cache miss. */
+                /* We only found an NSEC record that matches our name.  If it says the type doesn't exist
+                 * report NODATA. Otherwise report a cache miss. */
 
-                *ret = NULL;
-                *rcode = DNS_RCODE_SUCCESS;
-                *authenticated = nsec->authenticated;
+                if (ret_rcode)
+                        *ret_rcode = DNS_RCODE_SUCCESS;
+                if (ret_answer)
+                        *ret_answer = TAKE_PTR(answer);
+                if (ret_full_packet)
+                        *ret_full_packet = TAKE_PTR(full_packet);
+                if (ret_authenticated)
+                        *ret_authenticated = nsec->authenticated;
+                if (ret_dnssec_result)
+                        *ret_dnssec_result = nsec->dnssec_result;
 
                 if (!bitmap_isset(nsec->rr->nsec.types, key->type) &&
                     !bitmap_isset(nsec->rr->nsec.types, DNS_TYPE_CNAME) &&
@@ -940,46 +1121,49 @@ int dns_cache_lookup(DnsCache *c, DnsResourceKey *key, bool clamp_ttl, int *rcod
         if (n <= 0) {
                 c->n_hit++;
 
-                *ret = NULL;
-                *rcode = nxdomain ? DNS_RCODE_NXDOMAIN : DNS_RCODE_SUCCESS;
-                *authenticated = have_authenticated && !have_non_authenticated;
-                return 1;
-        }
-
-        answer = dns_answer_new(n);
-        if (!answer)
-                return -ENOMEM;
-
-        if (clamp_ttl)
-                current = now(clock_boottime_or_monotonic());
-
-        LIST_FOREACH(by_key, j, first) {
-                _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
+                if (ret_rcode)
+                        *ret_rcode = nxdomain ? DNS_RCODE_NXDOMAIN : DNS_RCODE_SUCCESS;
+                if (ret_answer)
+                        *ret_answer = TAKE_PTR(answer);
+                if (ret_full_packet)
+                        *ret_full_packet = TAKE_PTR(full_packet);
+                if (ret_authenticated)
+                        *ret_authenticated = have_authenticated && !have_non_authenticated;
+                if (ret_dnssec_result)
+                        *ret_dnssec_result = dnssec_result;
 
-                if (!j->rr)
-                        continue;
-
-                if (clamp_ttl) {
-                        rr = dns_resource_record_ref(j->rr);
-
-                        r = dns_resource_record_clamp_ttl(&rr, LESS_BY(j->until, current) / USEC_PER_SEC);
-                        if (r < 0)
-                                return r;
-                }
-
-                r = dns_answer_add(answer, rr ?: j->rr, j->ifindex, j->authenticated ? DNS_ANSWER_AUTHENTICATED : 0);
-                if (r < 0)
-                        return r;
+                return 1;
         }
 
         c->n_hit++;
 
-        *ret = answer;
-        *rcode = DNS_RCODE_SUCCESS;
-        *authenticated = have_authenticated && !have_non_authenticated;
-        answer = NULL;
+        if (ret_rcode)
+                *ret_rcode = DNS_RCODE_SUCCESS;
+        if (ret_answer)
+                *ret_answer = TAKE_PTR(answer);
+        if (ret_full_packet)
+                *ret_full_packet = TAKE_PTR(full_packet);
+        if (ret_authenticated)
+                *ret_authenticated = have_authenticated && !have_non_authenticated;
+        if (ret_dnssec_result)
+                *ret_dnssec_result = dnssec_result;
 
         return n;
+
+miss:
+        if (ret_rcode)
+                *ret_rcode = DNS_RCODE_SUCCESS;
+        if (ret_answer)
+                *ret_answer = NULL;
+        if (ret_full_packet)
+                *ret_full_packet = NULL;
+        if (ret_authenticated)
+                *ret_authenticated = false;
+        if (ret_dnssec_result)
+                *ret_dnssec_result = _DNSSEC_RESULT_INVALID;
+
+        c->n_miss++;
+        return 0;
 }
 
 int dns_cache_check_conflicts(DnsCache *cache, DnsResourceRecord *rr, int owner_family, const union in_addr_union *owner_address) {
index 4ab213dc9cd5317d610f0924f41f187d274de42c..cfae24fb71cc4f0eed1031ac82d6c6a74494e2ae 100644 (file)
@@ -5,6 +5,7 @@
 #include "list.h"
 #include "prioq.h"
 #include "resolve-util.h"
+#include "resolved-dns-dnssec.h"
 #include "time-util.h"
 
 typedef struct DnsCache {
@@ -22,8 +23,28 @@ typedef struct DnsCache {
 void dns_cache_flush(DnsCache *c);
 void dns_cache_prune(DnsCache *c);
 
-int dns_cache_put(DnsCache *c, DnsCacheMode cache_mode, DnsResourceKey *key, int rcode, DnsAnswer *answer, bool authenticated, uint32_t nsec_ttl, usec_t timestamp, int owner_family, const union in_addr_union *owner_address);
-int dns_cache_lookup(DnsCache *c, DnsResourceKey *key, bool clamp_ttl, int *rcode, DnsAnswer **answer, bool *authenticated);
+int dns_cache_put(
+                DnsCache *c,
+                DnsCacheMode cache_mode,
+                DnsResourceKey *key,
+                int rcode,
+                DnsAnswer *answer,
+                DnsPacket *full_packet,
+                bool authenticated,
+                DnssecResult dnssec_result,
+                uint32_t nsec_ttl,
+                int owner_family,
+                const union in_addr_union *owner_address);
+
+int dns_cache_lookup(
+                DnsCache *c,
+                DnsResourceKey *key,
+                uint64_t query_flags,
+                int *ret_rcode,
+                DnsAnswer **ret_answer,
+                DnsPacket **ret_full_packet,
+                bool *ret_authenticated,
+                DnssecResult *ret_dnssec_result);
 
 int dns_cache_check_conflicts(DnsCache *cache, DnsResourceRecord *rr, int owner_family, const union in_addr_union *owner_address);
 
index 9a0e2d51614eae8bdbd064bc5cb717f7cee70bb6..b1a68a74e2ead9c2562e2749ca4b1492419f1d28 100644 (file)
@@ -160,6 +160,38 @@ int dns_packet_new_query(DnsPacket **ret, DnsProtocol protocol, size_t min_alloc
         return 0;
 }
 
+int dns_packet_dup(DnsPacket **ret, DnsPacket *p) {
+        DnsPacket *c;
+        int r;
+
+        assert(ret);
+        assert(p);
+
+        r = dns_packet_validate(p);
+        if (r < 0)
+                return r;
+
+        c = malloc(ALIGN(sizeof(DnsPacket)) + p->size);
+        if (!c)
+                return -ENOMEM;
+
+        *c = (DnsPacket) {
+                .n_ref = 1,
+                .protocol = p->protocol,
+                .size = p->size,
+                .rindex = DNS_PACKET_HEADER_SIZE,
+                .allocated = p->size,
+                .max_size = p->max_size,
+                .opt_start = (size_t) -1,
+                .opt_size = (size_t) -1,
+        };
+
+        memcpy(DNS_PACKET_DATA(c), DNS_PACKET_DATA(p), p->size);
+
+        *ret = c;
+        return 0;
+}
+
 DnsPacket *dns_packet_ref(DnsPacket *p) {
 
         if (!p)
@@ -1183,7 +1215,7 @@ int dns_packet_append_question(DnsPacket *p, DnsQuestion *q) {
         return 0;
 }
 
-int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a) {
+int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a, unsigned *completed) {
         DnsResourceRecord *rr;
         DnsAnswerFlags flags;
         int r;
@@ -1194,6 +1226,9 @@ int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a) {
                 r = dns_packet_append_rr(p, rr, flags, NULL, NULL);
                 if (r < 0)
                         return r;
+
+                if (completed)
+                        (*completed)++;
         }
 
         return 0;
@@ -1298,7 +1333,8 @@ int dns_packet_read_uint16(DnsPacket *p, uint16_t *ret, size_t *start) {
         if (r < 0)
                 return r;
 
-        *ret = unaligned_read_be16(d);
+        if (ret)
+                *ret = unaligned_read_be16(d);
 
         return 0;
 }
@@ -1384,19 +1420,19 @@ int dns_packet_read_raw_string(DnsPacket *p, const void **ret, size_t *size, siz
 
 int dns_packet_read_name(
                 DnsPacket *p,
-                char **_ret,
+                char **ret,
                 bool allow_compression,
-                size_t *start) {
+                size_t *ret_start) {
 
         _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
         size_t after_rindex = 0, jump_barrier;
-        _cleanup_free_ char *ret = NULL;
+        _cleanup_free_ char *name = NULL;
         size_t n = 0, allocated = 0;
         bool first = true;
         int r;
 
         assert(p);
-        assert(_ret);
+
         INIT_REWINDER(rewinder, p);
         jump_barrier = p->rindex;
 
@@ -1421,15 +1457,15 @@ int dns_packet_read_name(
                         if (r < 0)
                                 return r;
 
-                        if (!GREEDY_REALLOC(ret, allocated, n + !first + DNS_LABEL_ESCAPED_MAX))
+                        if (!GREEDY_REALLOC(name, allocated, n + !first + DNS_LABEL_ESCAPED_MAX))
                                 return -ENOMEM;
 
                         if (first)
                                 first = false;
                         else
-                                ret[n++] = '.';
+                                name[n++] = '.';
 
-                        r = dns_label_escape(label, c, ret + n, DNS_LABEL_ESCAPED_MAX);
+                        r = dns_label_escape(label, c, name + n, DNS_LABEL_ESCAPED_MAX);
                         if (r < 0)
                                 return r;
 
@@ -1457,18 +1493,19 @@ int dns_packet_read_name(
                         return -EBADMSG;
         }
 
-        if (!GREEDY_REALLOC(ret, allocated, n + 1))
+        if (!GREEDY_REALLOC(name, allocated, n + 1))
                 return -ENOMEM;
 
-        ret[n] = 0;
+        name[n] = 0;
 
         if (after_rindex != 0)
                 p->rindex= after_rindex;
 
-        *_ret = TAKE_PTR(ret);
+        if (ret)
+                *ret = TAKE_PTR(name);
+        if (ret_start)
+                *ret_start = rewinder.saved_rindex;
 
-        if (start)
-                *start = rewinder.saved_rindex;
         CANCEL_REWINDER(rewinder);
 
         return 0;
@@ -1570,16 +1607,19 @@ static int dns_packet_read_type_windows(DnsPacket *p, Bitmap **types, size_t siz
         return 0;
 }
 
-int dns_packet_read_key(DnsPacket *p, DnsResourceKey **ret, bool *ret_cache_flush, size_t *start) {
+int dns_packet_read_key(
+                DnsPacket *p,
+                DnsResourceKey **ret,
+                bool *ret_cache_flush,
+                size_t *ret_start) {
+
         _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
         _cleanup_free_ char *name = NULL;
         bool cache_flush = false;
         uint16_t class, type;
-        DnsResourceKey *key;
         int r;
 
         assert(p);
-        assert(ret);
         INIT_REWINDER(rewinder, p);
 
         r = dns_packet_read_name(p, &name, true, NULL);
@@ -1603,19 +1643,23 @@ int dns_packet_read_key(DnsPacket *p, DnsResourceKey **ret, bool *ret_cache_flus
                 }
         }
 
-        key = dns_resource_key_new_consume(class, type, name);
-        if (!key)
-                return -ENOMEM;
+        if (ret) {
+                DnsResourceKey *key;
 
-        name = NULL;
-        *ret = key;
+                key = dns_resource_key_new_consume(class, type, name);
+                if (!key)
+                        return -ENOMEM;
+
+                TAKE_PTR(name);
+                *ret = key;
+        }
 
         if (ret_cache_flush)
                 *ret_cache_flush = cache_flush;
-        if (start)
-                *start = rewinder.saved_rindex;
-        CANCEL_REWINDER(rewinder);
+        if (ret_start)
+                *ret_start = rewinder.saved_rindex;
 
+        CANCEL_REWINDER(rewinder);
         return 0;
 }
 
@@ -1625,7 +1669,12 @@ static bool loc_size_ok(uint8_t size) {
         return m <= 9 && e <= 9 && (m > 0 || e == 0);
 }
 
-int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, bool *ret_cache_flush, size_t *start) {
+int dns_packet_read_rr(
+                DnsPacket *p,
+                DnsResourceRecord **ret,
+                bool *ret_cache_flush,
+                size_t *ret_start) {
+
         _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
         _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
         _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
@@ -1635,7 +1684,6 @@ int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, bool *ret_cache_fl
         int r;
 
         assert(p);
-        assert(ret);
 
         INIT_REWINDER(rewinder, p);
 
@@ -2076,14 +2124,14 @@ int dns_packet_read_rr(DnsPacket *p, DnsResourceRecord **ret, bool *ret_cache_fl
         if (p->rindex != offset + rdlength)
                 return -EBADMSG;
 
-        *ret = TAKE_PTR(rr);
-
+        if (ret)
+                *ret = TAKE_PTR(rr);
         if (ret_cache_flush)
                 *ret_cache_flush = cache_flush;
-        if (start)
-                *start = rewinder.saved_rindex;
-        CANCEL_REWINDER(rewinder);
+        if (ret_start)
+                *ret_start = rewinder.saved_rindex;
 
+        CANCEL_REWINDER(rewinder);
         return 0;
 }
 
@@ -2203,8 +2251,21 @@ static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) {
         for (i = 0; i < n; i++) {
                 _cleanup_(dns_resource_record_unrefp) DnsResourceRecord *rr = NULL;
                 bool cache_flush = false;
+                size_t start;
+
+                if (p->rindex == p->size) {
+                        /* If we reached the end of the packet already, but there are still more RRs
+                         * declared, then that's a corrupt packet. Let's accept the packet anyway, since it's
+                         * apparently a common bug in routers. Let's however suppress OPT support in this
+                         * case, so that we force the rest of the logic into lowest DNS baseline support. Or
+                         * to say this differently: if the DNS server doesn't even get the RR counts right,
+                         * it's highly unlikely it gets EDNS right. */
+                        log_debug("More resource records declared in packet than included, suppressing OPT.");
+                        bad_opt = true;
+                        break;
+                }
 
-                r = dns_packet_read_rr(p, &rr, &cache_flush, NULL);
+                r = dns_packet_read_rr(p, &rr, &cache_flush, &start);
                 if (r < 0)
                         return r;
 
@@ -2272,15 +2333,26 @@ static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) {
                         }
 
                         p->opt = dns_resource_record_ref(rr);
+                        p->opt_start = start;
+                        assert(p->rindex >= start);
+                        p->opt_size = p->rindex - start;
                 } else {
-                        /* According to RFC 4795, section 2.9. only the RRs from the Answer section
-                         * shall be cached. Hence mark only those RRs as cacheable by default, but
-                         * not the ones from the Additional or Authority sections. */
-                        DnsAnswerFlags flags =
-                                (i < DNS_PACKET_ANCOUNT(p) ? DNS_ANSWER_CACHEABLE : 0) |
-                                (p->protocol == DNS_PROTOCOL_MDNS && !cache_flush ? DNS_ANSWER_SHARED_OWNER : 0);
-
-                        r = dns_answer_add(answer, rr, p->ifindex, flags);
+                        DnsAnswerFlags flags = 0;
+
+                        if (p->protocol == DNS_PROTOCOL_MDNS && !cache_flush)
+                                flags |= DNS_ANSWER_SHARED_OWNER;
+
+                        /* According to RFC 4795, section 2.9. only the RRs from the Answer section shall be
+                         * cached. Hence mark only those RRs as cacheable by default, but not the ones from
+                         * the Additional or Authority sections. */
+                        if (i < DNS_PACKET_ANCOUNT(p))
+                                flags |= DNS_ANSWER_CACHEABLE|DNS_ANSWER_SECTION_ANSWER;
+                        else if (i < DNS_PACKET_ANCOUNT(p) + DNS_PACKET_NSCOUNT(p))
+                                flags |= DNS_ANSWER_SECTION_AUTHORITY;
+                        else
+                                flags |= DNS_ANSWER_SECTION_ADDITIONAL;
+
+                        r = dns_answer_add(answer, rr, p->ifindex, flags, NULL);
                         if (r < 0)
                                 return r;
                 }
@@ -2292,8 +2364,10 @@ static int dns_packet_extract_answer(DnsPacket *p, DnsAnswer **ret_answer) {
                 previous = dns_resource_record_ref(rr);
         }
 
-        if (bad_opt)
+        if (bad_opt) {
                 p->opt = dns_resource_record_unref(p->opt);
+                p->opt_start = p->opt_size = SIZE_MAX;
+        }
 
         *ret_answer = TAKE_PTR(answer);
 
@@ -2320,6 +2394,12 @@ int dns_packet_extract(DnsPacket *p) {
         if (r < 0)
                 return r;
 
+        if (p->rindex < p->size)  {
+                log_debug("Trailing garbage in packet, suppressing OPT.");
+                p->opt = dns_resource_record_unref(p->opt);
+                p->opt_start = p->opt_size = SIZE_MAX;
+        }
+
         p->question = TAKE_PTR(question);
         p->answer = TAKE_PTR(answer);
 
@@ -2356,6 +2436,106 @@ int dns_packet_is_reply_for(DnsPacket *p, const DnsResourceKey *key) {
         return dns_resource_key_equal(p->question->keys[0], key);
 }
 
+int dns_packet_patch_max_udp_size(DnsPacket *p, uint16_t max_udp_size) {
+        assert(p);
+        assert(max_udp_size >= DNS_PACKET_UNICAST_SIZE_MAX);
+
+        if (p->opt_start == (size_t) -1) /* No OPT section, nothing to patch */
+                return 0;
+
+        assert(p->opt_size != (size_t) -1);
+        assert(p->opt_size >= 5);
+
+        unaligned_write_be16(DNS_PACKET_DATA(p) + p->opt_start + 3, max_udp_size);
+        return 1;
+}
+
+static int patch_rr(DnsPacket *p, usec_t age) {
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder;
+        size_t ttl_index;
+        uint32_t ttl;
+        uint16_t type, rdlength;
+        int r;
+
+        INIT_REWINDER(rewinder, p);
+
+        /* Patches the RR at the current rindex, subtracts the specified time from the TTL */
+
+        r = dns_packet_read_name(p, NULL, true, NULL);
+        if (r < 0)
+                return r;
+
+        r = dns_packet_read_uint16(p, &type, NULL);
+        if (r < 0)
+                return r;
+
+        r = dns_packet_read_uint16(p, NULL, NULL);
+        if (r < 0)
+                return r;
+
+        r = dns_packet_read_uint32(p, &ttl, &ttl_index);
+        if (r < 0)
+                return r;
+
+        if (type != DNS_TYPE_OPT) { /* The TTL of the OPT field is not actually a TTL, skip it */
+                ttl = LESS_BY(ttl * USEC_PER_SEC, age) / USEC_PER_SEC;
+                unaligned_write_be32(DNS_PACKET_DATA(p) + ttl_index, ttl);
+        }
+
+        r = dns_packet_read_uint16(p, &rdlength, NULL);
+        if (r < 0)
+                return r;
+
+        r = dns_packet_read(p, rdlength, NULL, NULL);
+        if (r < 0)
+                return r;
+
+        CANCEL_REWINDER(rewinder);
+        return 0;
+}
+
+int dns_packet_patch_ttls(DnsPacket *p, usec_t timestamp) {
+        _cleanup_(rewind_dns_packet) DnsPacketRewinder rewinder = {};
+        unsigned i, n;
+        usec_t k;
+        int r;
+
+        assert(p);
+        assert(timestamp_is_set(timestamp));
+
+        /* Adjusts all TTLs in the packet by subtracting the time difference between now and the specified timestamp */
+
+        k = now(clock_boottime_or_monotonic());
+        assert(k >= timestamp);
+        k -= timestamp;
+
+        INIT_REWINDER(rewinder, p);
+
+        dns_packet_rewind(p, DNS_PACKET_HEADER_SIZE);
+
+        n = DNS_PACKET_QDCOUNT(p);
+        for (i = 0; i < n; i++) {
+                r = dns_packet_read_key(p, NULL, NULL, NULL);
+                if (r < 0)
+                        return r;
+        }
+
+        n = DNS_PACKET_RRCOUNT(p);
+        for (i = 0; i < n; i++) {
+
+                /* DNS servers suck, hence the RR count is in many servers off. If we reached the end
+                 * prematurely, accept that, exit early */
+                if (p->rindex == p->size)
+                        break;
+
+                r = patch_rr(p, k);
+                if (r < 0)
+                        return r;
+        }
+
+        return 0;
+}
+
 static void dns_packet_hash_func(const DnsPacket *s, struct siphash *state) {
         assert(s);
 
@@ -2375,6 +2555,10 @@ static int dns_packet_compare_func(const DnsPacket *x, const DnsPacket *y) {
 
 DEFINE_HASH_OPS(dns_packet_hash_ops, DnsPacket, dns_packet_hash_func, dns_packet_compare_func);
 
+bool dns_packet_equal(const DnsPacket *a, const DnsPacket *b) {
+        return dns_packet_compare_func(a, b) == 0;
+}
+
 static const char* const dns_rcode_table[_DNS_RCODE_MAX_DEFINED] = {
         [DNS_RCODE_SUCCESS] = "SUCCESS",
         [DNS_RCODE_FORMERR] = "FORMERR",
index e7d6cb190431a11cccbb83278e6e1f970a7699ac..9fe278264bc547aecc4a79bea8a39ce567741ae2 100644 (file)
@@ -82,7 +82,7 @@ struct DnsPacket {
         bool canonical_form:1;
 };
 
-static inline uint8_t* DNS_PACKET_DATA(DnsPacket *p) {
+static inline uint8_t* DNS_PACKET_DATA(const DnsPacket *p) {
         if (_unlikely_(!p))
                 return NULL;
 
@@ -176,6 +176,8 @@ static inline unsigned DNS_PACKET_RRCOUNT(DnsPacket *p) {
 int dns_packet_new(DnsPacket **p, DnsProtocol protocol, size_t min_alloc_dsize, size_t max_size);
 int dns_packet_new_query(DnsPacket **p, DnsProtocol protocol, size_t min_alloc_dsize, bool dnssec_checking_disabled);
 
+int dns_packet_dup(DnsPacket **ret, DnsPacket *p);
+
 void dns_packet_set_flags(DnsPacket *p, bool dnssec_checking_disabled, bool truncated);
 
 DnsPacket *dns_packet_ref(DnsPacket *p);
@@ -201,7 +203,10 @@ int dns_packet_append_key(DnsPacket *p, const DnsResourceKey *key, const DnsAnsw
 int dns_packet_append_rr(DnsPacket *p, const DnsResourceRecord *rr, const DnsAnswerFlags flags, size_t *start, size_t *rdata_start);
 int dns_packet_append_opt(DnsPacket *p, uint16_t max_udp_size, bool edns0_do, bool include_rfc6975, int rcode, size_t *start);
 int dns_packet_append_question(DnsPacket *p, DnsQuestion *q);
-int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a);
+int dns_packet_append_answer(DnsPacket *p, DnsAnswer *a, unsigned *completed);
+
+int dns_packet_patch_max_udp_size(DnsPacket *p, uint16_t max_udp_size);
+int dns_packet_patch_ttls(DnsPacket *p, usec_t timestamp);
 
 void dns_packet_truncate(DnsPacket *p, size_t sz);
 int dns_packet_truncate_opt(DnsPacket *p);
@@ -222,6 +227,8 @@ void dns_packet_rewind(DnsPacket *p, size_t idx);
 int dns_packet_skip_question(DnsPacket *p);
 int dns_packet_extract(DnsPacket *p);
 
+bool dns_packet_equal(const DnsPacket *a, const DnsPacket *b);
+
 /* https://www.iana.org/assignments/dns-parameters/dns-parameters.xhtml#dns-parameters-6 */
 enum {
         DNS_RCODE_SUCCESS = 0,
index 8ee4fd8309348647d86d0c68204686e42d7daf51..aa058446421d63e9f0a7907fc54980a9b3c1952d 100644 (file)
@@ -97,20 +97,35 @@ static int dns_query_candidate_next_search_domain(DnsQueryCandidate *c) {
         return 1;
 }
 
-static int dns_query_candidate_add_transaction(DnsQueryCandidate *c, DnsResourceKey *key) {
+static int dns_query_candidate_add_transaction(
+                DnsQueryCandidate *c,
+                DnsResourceKey *key,
+                DnsPacket *bypass) {
+
         _cleanup_(dns_transaction_gcp) DnsTransaction *t = NULL;
         int r;
 
         assert(c);
-        assert(key);
 
-        t = dns_scope_find_transaction(c->scope, key, true);
-        if (!t) {
-                r = dns_transaction_new(&t, c->scope, key);
+        if (key) {
+                /* Regular lookup with a resource key */
+                assert(!bypass);
+
+                t = dns_scope_find_transaction(c->scope, key, c->query->flags);
+                if (!t) {
+                        r = dns_transaction_new(&t, c->scope, key, NULL, c->query->flags);
+                        if (r < 0)
+                                return r;
+                } else if (set_contains(c->transactions, t))
+                        return 0;
+        } else {
+                /* "Bypass" lookup with a query packet */
+                assert(bypass);
+
+                r = dns_transaction_new(&t, c->scope, NULL, bypass, c->query->flags);
                 if (r < 0)
                         return r;
-        } else if (set_contains(c->transactions, t))
-                return 0;
+        }
 
         r = set_ensure_allocated(&t->notify_query_candidates_done, NULL);
         if (r < 0)
@@ -126,7 +141,6 @@ static int dns_query_candidate_add_transaction(DnsQueryCandidate *c, DnsResource
                 return r;
         }
 
-        t->clamp_ttl = c->query->clamp_ttl;
         TAKE_PTR(t);
         return 1;
 }
@@ -214,6 +228,21 @@ static int dns_query_candidate_setup_transactions(DnsQueryCandidate *c) {
 
         dns_query_candidate_stop(c);
 
+        if (c->query->question_bypass) {
+                /* If this is a bypass query, then pass the original query packet along to the transaction */
+
+                assert(dns_question_size(c->query->question_bypass->question) == 1);
+
+                if (!dns_scope_good_key(c->scope, c->query->question_bypass->question->keys[0]))
+                        return 0;
+
+                r = dns_query_candidate_add_transaction(c, NULL, c->query->question_bypass);
+                if (r < 0)
+                        goto fail;
+
+                return 1;
+        }
+
         question = dns_query_question_for_protocol(c->query, c->scope->protocol);
 
         /* Create one transaction per question key */
@@ -233,7 +262,7 @@ static int dns_query_candidate_setup_transactions(DnsQueryCandidate *c) {
                 if (!dns_scope_good_key(c->scope, qkey))
                         continue;
 
-                r = dns_query_candidate_add_transaction(c, qkey);
+                r = dns_query_candidate_add_transaction(c, qkey, NULL);
                 if (r < 0)
                         goto fail;
 
@@ -321,6 +350,7 @@ static void dns_query_reset_answer(DnsQuery *q) {
         q->answer_protocol = _DNS_PROTOCOL_INVALID;
         q->answer_family = AF_UNSPEC;
         q->answer_search_domain = dns_search_domain_unref(q->answer_search_domain);
+        q->answer_full_packet = dns_packet_unref(q->answer_full_packet);
 }
 
 DnsQuery *dns_query_free(DnsQuery *q) {
@@ -340,6 +370,7 @@ DnsQuery *dns_query_free(DnsQuery *q) {
 
         dns_question_unref(q->question_idna);
         dns_question_unref(q->question_utf8);
+        dns_packet_unref(q->question_bypass);
 
         dns_query_reset_answer(q);
 
@@ -351,13 +382,22 @@ DnsQuery *dns_query_free(DnsQuery *q) {
                 varlink_unref(q->varlink_request);
         }
 
-        dns_packet_unref(q->request_dns_packet);
-        dns_packet_unref(q->reply_dns_packet);
+        if (q->request_packet)
+                hashmap_remove_value(q->stub_listener_extra ?
+                                     q->stub_listener_extra->queries_by_packet :
+                                     q->manager->stub_queries_by_packet,
+                                     q->request_packet,
+                                     q);
+
+        dns_packet_unref(q->request_packet);
+        dns_answer_unref(q->reply_answer);
+        dns_answer_unref(q->reply_authoritative);
+        dns_answer_unref(q->reply_additional);
 
-        if (q->request_dns_stream) {
+        if (q->request_stream) {
                 /* Detach the stream from our query, in case something else keeps a reference to it. */
-                (void) set_remove(q->request_dns_stream->queries, q);
-                q->request_dns_stream = dns_stream_unref(q->request_dns_stream);
+                (void) set_remove(q->request_stream->queries, q);
+                q->request_stream = dns_stream_unref(q->request_stream);
         }
 
         free(q->request_address_string);
@@ -375,36 +415,27 @@ int dns_query_new(
                 DnsQuery **ret,
                 DnsQuestion *question_utf8,
                 DnsQuestion *question_idna,
+                DnsPacket *question_bypass,
                 int ifindex,
                 uint64_t flags) {
 
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
+        char key_str[DNS_RESOURCE_KEY_STRING_MAX];
         DnsResourceKey *key;
-        bool good = false;
         int r;
-        char key_str[DNS_RESOURCE_KEY_STRING_MAX];
 
         assert(m);
 
-        if (dns_question_size(question_utf8) > 0) {
-                r = dns_question_is_valid_for_query(question_utf8);
-                if (r < 0)
-                        return r;
-                if (r == 0)
+        if (question_bypass) {
+                /* It's either a "bypass" query, or a regular one, but can't be both. */
+                if (question_utf8 || question_idna)
                         return -EINVAL;
 
-                good = true;
-        }
+        } else {
+                bool good = false;
 
-        /* If the IDNA and UTF8 questions are the same, merge their references */
-        r = dns_question_is_equal(question_idna, question_utf8);
-        if (r < 0)
-                return r;
-        if (r > 0)
-                question_idna = question_utf8;
-        else {
-                if (dns_question_size(question_idna) > 0) {
-                        r = dns_question_is_valid_for_query(question_idna);
+                if (dns_question_size(question_utf8) > 0) {
+                        r = dns_question_is_valid_for_query(question_utf8);
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -412,10 +443,28 @@ int dns_query_new(
 
                         good = true;
                 }
-        }
 
-        if (!good) /* don't allow empty queries */
-                return -EINVAL;
+                /* If the IDNA and UTF8 questions are the same, merge their references */
+                r = dns_question_is_equal(question_idna, question_utf8);
+                if (r < 0)
+                        return r;
+                if (r > 0)
+                        question_idna = question_utf8;
+                else {
+                        if (dns_question_size(question_idna) > 0) {
+                                r = dns_question_is_valid_for_query(question_idna);
+                                if (r < 0)
+                                        return r;
+                                if (r == 0)
+                                        return -EINVAL;
+
+                                good = true;
+                        }
+                }
+
+                if (!good) /* don't allow empty queries */
+                        return -EINVAL;
+        }
 
         if (m->n_dns_queries >= QUERIES_MAX)
                 return -EBUSY;
@@ -427,6 +476,7 @@ int dns_query_new(
         *q = (DnsQuery) {
                 .question_utf8 = dns_question_ref(question_utf8),
                 .question_idna = dns_question_ref(question_idna),
+                .question_bypass = dns_packet_ref(question_bypass),
                 .ifindex = ifindex,
                 .flags = flags,
                 .answer_dnssec_result = _DNSSEC_RESULT_INVALID,
@@ -434,21 +484,27 @@ int dns_query_new(
                 .answer_family = AF_UNSPEC,
         };
 
-        /* First dump UTF8  question */
-        DNS_QUESTION_FOREACH(key, question_utf8)
-                log_debug("Looking up RR for %s.",
-                          dns_resource_key_to_string(key, key_str, sizeof key_str));
-
-        /* And then dump the IDNA question, but only what hasn't been dumped already through the UTF8 question. */
-        DNS_QUESTION_FOREACH(key, question_idna) {
-                r = dns_question_contains(question_utf8, key);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        continue;
+        if (question_bypass) {
+                DNS_QUESTION_FOREACH(key, question_bypass->question)
+                        log_debug("Looking up bypass packet for %s.",
+                                  dns_resource_key_to_string(key, key_str, sizeof key_str));
+        } else {
+                /* First dump UTF8  question */
+                DNS_QUESTION_FOREACH(key, question_utf8)
+                        log_debug("Looking up RR for %s.",
+                                  dns_resource_key_to_string(key, key_str, sizeof key_str));
+
+                /* And then dump the IDNA question, but only what hasn't been dumped already through the UTF8 question. */
+                DNS_QUESTION_FOREACH(key, question_idna) {
+                        r = dns_question_contains(question_utf8, key);
+                        if (r < 0)
+                                return r;
+                        if (r > 0)
+                                continue;
 
-                log_debug("Looking up IDNA RR for %s.",
-                          dns_resource_key_to_string(key, key_str, sizeof key_str));
+                        log_debug("Looking up IDNA RR for %s.",
+                                  dns_resource_key_to_string(key, key_str, sizeof key_str));
+                }
         }
 
         LIST_PREPEND(queries, m->dns_queries, q);
@@ -457,8 +513,8 @@ int dns_query_new(
 
         if (ret)
                 *ret = q;
-        q = NULL;
 
+        TAKE_PTR(q);
         return 0;
 }
 
@@ -559,9 +615,12 @@ static int dns_query_synthesize_reply(DnsQuery *q, DnsTransactionState *state) {
                     DNS_TRANSACTION_NOT_FOUND))
                 return 0;
 
+        if (FLAGS_SET(q->flags, SD_RESOLVED_NO_SYNTHESIZE))
+                return 0;
+
         r = dns_synthesize_answer(
                         q->manager,
-                        q->question_utf8,
+                        q->question_bypass ? q->question_bypass->question : q->question_utf8,
                         q->ifindex,
                         &answer);
         if (r == -ENXIO) {
@@ -601,9 +660,12 @@ static int dns_query_try_etc_hosts(DnsQuery *q) {
         /* Looks in /etc/hosts for matching entries. Note that this is done *before* the normal lookup is
          * done. The data from /etc/hosts hence takes precedence over the network. */
 
+        if (FLAGS_SET(q->flags, SD_RESOLVED_NO_SYNTHESIZE))
+                return 0;
+
         r = manager_etc_hosts_lookup(
                         q->manager,
-                        q->question_utf8,
+                        q->question_bypass ? q->question_bypass->question : q->question_utf8,
                         &answer);
         if (r <= 0)
                 return r;
@@ -757,6 +819,7 @@ static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c) {
                 q->answer_dnssec_result = _DNSSEC_RESULT_INVALID;
                 q->answer_authenticated = false;
                 q->answer_errno = c->error_code;
+                q->answer_full_packet = dns_packet_unref(q->answer_full_packet);
         }
 
         SET_FOREACH(t, c->transactions) {
@@ -764,14 +827,24 @@ static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c) {
                 switch (t->state) {
 
                 case DNS_TRANSACTION_SUCCESS: {
-                        /* We found a successfully reply, merge it into the answer */
-                        r = dns_answer_extend(&q->answer, t->answer);
-                        if (r < 0)
-                                goto fail;
+                        /* We found a successful reply, merge it into the answer */
+
+                        if (state == DNS_TRANSACTION_SUCCESS) {
+                                r = dns_answer_extend(&q->answer, t->answer);
+                                if (r < 0)
+                                        goto fail;
+                        } else {
+                                /* Override non-successful previous answers */
+                                dns_answer_unref(q->answer);
+                                q->answer = dns_answer_ref(t->answer);
+                        }
 
                         q->answer_rcode = t->answer_rcode;
                         q->answer_errno = 0;
 
+                        dns_packet_unref(q->answer_full_packet);
+                        q->answer_full_packet = dns_packet_ref(t->received);
+
                         if (t->answer_authenticated) {
                                 has_authenticated = true;
                                 dnssec_result_authenticated = t->answer_dnssec_result;
@@ -800,11 +873,14 @@ static void dns_query_accept(DnsQuery *q, DnsQueryCandidate *c) {
                         if (q->answer_authenticated && !t->answer_authenticated)
                                 continue;
 
-                        q->answer = dns_answer_unref(q->answer);
+                        dns_answer_unref(q->answer);
+                        q->answer = dns_answer_ref(t->answer);
                         q->answer_rcode = t->answer_rcode;
                         q->answer_dnssec_result = t->answer_dnssec_result;
                         q->answer_authenticated = t->answer_authenticated;
                         q->answer_errno = t->answer_errno;
+                        dns_packet_unref(q->answer_full_packet);
+                        q->answer_full_packet = dns_packet_ref(t->received);
 
                         state = t->state;
                         break;
@@ -998,6 +1074,9 @@ int dns_query_process_cname(DnsQuery *q) {
 DnsQuestion* dns_query_question_for_protocol(DnsQuery *q, DnsProtocol protocol) {
         assert(q);
 
+        if (q->question_bypass)
+                return q->question_bypass->question;
+
         switch (protocol) {
 
         case DNS_PROTOCOL_DNS:
@@ -1018,6 +1097,9 @@ const char *dns_query_string(DnsQuery *q) {
 
         /* Returns a somewhat useful human-readable lookup key string for this query */
 
+        if (q->question_bypass)
+                return dns_question_first_name(q->question_bypass->question);
+
         if (q->request_address_string)
                 return q->request_address_string;
 
index 133076dbf071199b91c74023fa71aaa4afb397de..a7916712c11ec6d1f1ae9eee7673ff2cb88192a7 100644 (file)
@@ -49,12 +49,13 @@ struct DnsQuery {
         DnsQuestion *question_idna;
         DnsQuestion *question_utf8;
 
+        /* If this is not a question by ourselves, but a "bypass" request, we propagate the original packet
+         * here, and use that instead. */
+        DnsPacket *question_bypass;
+
         uint64_t flags;
         int ifindex;
 
-        /* If true, the RR TTLs of the answer will be clamped by their current left validity in the cache */
-        bool clamp_ttl;
-
         DnsTransactionState state;
         unsigned n_cname_redirects;
 
@@ -71,6 +72,7 @@ struct DnsQuery {
         DnsSearchDomain *answer_search_domain;
         int answer_errno; /* if state is DNS_TRANSACTION_ERRNO */
         bool previous_redirect_unauthenticated;
+        DnsPacket *answer_full_packet;
 
         /* Bus + Varlink client information */
         sd_bus_message *bus_request;
@@ -82,9 +84,11 @@ struct DnsQuery {
         char *request_address_string;
 
         /* DNS stub information */
-        DnsPacket *request_dns_packet;
-        DnsStream *request_dns_stream;
-        DnsPacket *reply_dns_packet;
+        DnsPacket *request_packet;
+        DnsStream *request_stream;
+        DnsAnswer *reply_answer;
+        DnsAnswer *reply_authoritative;
+        DnsAnswer *reply_additional;
         DnsStubListenerExtra *stub_listener_extra;
 
         /* Completion callback */
@@ -109,7 +113,7 @@ DEFINE_TRIVIAL_CLEANUP_FUNC(DnsQueryCandidate*, dns_query_candidate_unref);
 
 void dns_query_candidate_notify(DnsQueryCandidate *c);
 
-int dns_query_new(Manager *m, DnsQuery **q, DnsQuestion *question_utf8, DnsQuestion *question_idna, int family, uint64_t flags);
+int dns_query_new(Manager *m, DnsQuery **q, DnsQuestion *question_utf8, DnsQuestion *question_idna, DnsPacket *question_bypass, int family, uint64_t flags);
 DnsQuery *dns_query_free(DnsQuery *q);
 
 int dns_query_make_auxiliary(DnsQuery *q, DnsQuery *auxiliary_for);
index 19e075479f75ba58cfc8d337924f0098c5414b68..9e64c6dd31115ecc156a9325861f35ec36541a51 100644 (file)
@@ -1721,6 +1721,20 @@ int dns_resource_record_clamp_ttl(DnsResourceRecord **rr, uint32_t max_ttl) {
         return 1;
 }
 
+bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr) {
+
+        if (rr->key->class != DNS_CLASS_IN)
+                return false;
+
+        if (rr->key->type == DNS_TYPE_A)
+                return in4_addr_is_link_local(&rr->a.in_addr);
+
+        if (rr->key->type == DNS_TYPE_AAAA)
+                return IN6_IS_ADDR_LINKLOCAL(&rr->aaaa.in6_addr);
+
+        return false;
+}
+
 DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i) {
         DnsTxtItem *n;
 
index aa17d6d391b66a796f301d8776ed29d65894eb65..d788d797fc8fd30a10bf8a3695d9ae0f1354b291 100644 (file)
@@ -324,6 +324,8 @@ int dns_resource_record_is_synthetic(DnsResourceRecord *rr);
 
 int dns_resource_record_clamp_ttl(DnsResourceRecord **rr, uint32_t max_ttl);
 
+bool dns_resource_record_is_link_local_address(DnsResourceRecord *rr);
+
 DnsTxtItem *dns_txt_item_free_all(DnsTxtItem *i);
 bool dns_txt_item_equal(DnsTxtItem *a, DnsTxtItem *b);
 DnsTxtItem *dns_txt_item_copy(DnsTxtItem *i);
index d77e81ae3986d8f92adae43cdd8465dfea1c1696..c962af9aba308e2fbb98b15dcc351ed97976e7ac 100644 (file)
@@ -153,16 +153,19 @@ unsigned dns_scope_get_n_dns_servers(DnsScope *s) {
         return n;
 }
 
-void dns_scope_next_dns_server(DnsScope *s) {
+void dns_scope_next_dns_server(DnsScope *s, DnsServer *if_current) {
         assert(s);
 
         if (s->protocol != DNS_PROTOCOL_DNS)
                 return;
 
+        /* Changes to the next DNS server in the list. If 'if_current' is passed will do so only if the
+         * current DNS server still matches it. */
+
         if (s->link)
-                link_next_dns_server(s->link);
+                link_next_dns_server(s->link, if_current);
         else
-                manager_next_dns_server(s->manager);
+                manager_next_dns_server(s->manager, if_current);
 }
 
 void dns_scope_packet_received(DnsScope *s, usec_t rtt) {
@@ -459,7 +462,7 @@ int dns_scope_socket_tcp(DnsScope *s, int family, const union in_addr_union *add
         return dns_scope_socket(s, SOCK_STREAM, family, address, server, port, ret_socket_address);
 }
 
-static DnsScopeMatch accept_link_local_reverse_lookups(const char *domain) {
+static DnsScopeMatch match_link_local_reverse_lookups(const char *domain) {
         assert(domain);
 
         if (dns_name_endswith(domain, "254.169.in-addr.arpa") > 0)
@@ -568,29 +571,25 @@ DnsScopeMatch dns_scope_good_domain(
                         return DNS_SCOPE_YES_BASE + n_best;
                 }
 
-                /* See if this scope is suitable as default route. */
-                if (!dns_scope_is_default_route(s))
+                /* Exclude link-local IP ranges */
+                if (match_link_local_reverse_lookups(domain) >= DNS_SCOPE_YES_BASE ||
+                    /* If networks use .local in their private setups, they are supposed to also add .local
+                     * to their search domains, which we already checked above. Otherwise, we consider .local
+                     * specific to mDNS and won't send such queries ordinary DNS servers. */
+                    dns_name_endswith(domain, "local") > 0)
                         return DNS_SCOPE_NO;
 
-                /* Exclude link-local IP ranges */
-                if (dns_name_endswith(domain, "254.169.in-addr.arpa") == 0 &&
-                    dns_name_endswith(domain, "8.e.f.ip6.arpa") == 0 &&
-                    dns_name_endswith(domain, "9.e.f.ip6.arpa") == 0 &&
-                    dns_name_endswith(domain, "a.e.f.ip6.arpa") == 0 &&
-                    dns_name_endswith(domain, "b.e.f.ip6.arpa") == 0 &&
-                    /* If networks use .local in their private setups, they are supposed to also add .local to their search
-                     * domains, which we already checked above. Otherwise, we consider .local specific to mDNS and won't
-                     * send such queries ordinary DNS servers. */
-                    dns_name_endswith(domain, "local") == 0)
-                        return DNS_SCOPE_MAYBE;
+                /* If there was no match at all, then see if this scope is suitable as default route. */
+                if (!dns_scope_is_default_route(s))
+                        return DNS_SCOPE_NO;
 
-                return DNS_SCOPE_NO;
+                return DNS_SCOPE_MAYBE;
         }
 
         case DNS_PROTOCOL_MDNS: {
                 DnsScopeMatch m;
 
-                m = accept_link_local_reverse_lookups(domain);
+                m = match_link_local_reverse_lookups(domain);
                 if (m >= 0)
                         return m;
 
@@ -609,7 +608,7 @@ DnsScopeMatch dns_scope_good_domain(
         case DNS_PROTOCOL_LLMNR: {
                 DnsScopeMatch m;
 
-                m = accept_link_local_reverse_lookups(domain);
+                m = match_link_local_reverse_lookups(domain);
                 if (m >= 0)
                         return m;
 
@@ -646,11 +645,10 @@ bool dns_scope_good_key(DnsScope *s, const DnsResourceKey *key) {
         assert(s);
         assert(key);
 
-        /* Check if it makes sense to resolve the specified key on
-         * this scope. Note that this call assumes as fully qualified
-         * name, i.e. the search suffixes already appended. */
+        /* Check if it makes sense to resolve the specified key on this scope. Note that this call assumes a
+         * fully qualified name, i.e. the search suffixes already appended. */
 
-        if (key->class != DNS_CLASS_IN)
+        if (!IN_SET(key->class, DNS_CLASS_IN, DNS_CLASS_ANY))
                 return false;
 
         if (s->protocol == DNS_PROTOCOL_DNS) {
@@ -672,8 +670,11 @@ bool dns_scope_good_key(DnsScope *s, const DnsResourceKey *key) {
                 return !dns_name_is_root(name);
         }
 
-        /* On mDNS and LLMNR, send A and AAAA queries only on the
-         * respective scopes */
+        /* Never route DNSSEC RR queries to LLMNR/mDNS scopes */
+        if (dns_type_is_dnssec(key->type))
+                return false;
+
+        /* On mDNS and LLMNR, send A and AAAA queries only on the respective scopes */
 
         key_family = dns_type_to_af(key->type);
         if (key_family < 0)
@@ -765,6 +766,7 @@ int dns_scope_make_reply_packet(
                 DnsPacket **ret) {
 
         _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+        unsigned n_answer = 0, n_soa = 0;
         int r;
 
         assert(s);
@@ -796,15 +798,15 @@ int dns_scope_make_reply_packet(
                 return r;
         DNS_PACKET_HEADER(p)->qdcount = htobe16(dns_question_size(q));
 
-        r = dns_packet_append_answer(p, answer);
+        r = dns_packet_append_answer(p, answer, &n_answer);
         if (r < 0)
                 return r;
-        DNS_PACKET_HEADER(p)->ancount = htobe16(dns_answer_size(answer));
+        DNS_PACKET_HEADER(p)->ancount = htobe16(n_answer);
 
-        r = dns_packet_append_answer(p, soa);
+        r = dns_packet_append_answer(p, soa, &n_soa);
         if (r < 0)
                 return r;
-        DNS_PACKET_HEADER(p)->arcount = htobe16(dns_answer_size(soa));
+        DNS_PACKET_HEADER(p)->arcount = htobe16(n_soa);
 
         *ret = TAKE_PTR(p);
 
@@ -926,26 +928,50 @@ void dns_scope_process_query(DnsScope *s, DnsStream *stream, DnsPacket *p) {
         }
 }
 
-DnsTransaction *dns_scope_find_transaction(DnsScope *scope, DnsResourceKey *key, bool cache_ok) {
-        DnsTransaction *t;
+DnsTransaction *dns_scope_find_transaction(
+                DnsScope *scope,
+                DnsResourceKey *key,
+                uint64_t query_flags) {
+
+        DnsTransaction *first, *t;
 
         assert(scope);
         assert(key);
 
-        /* Try to find an ongoing transaction that is a equal to the
-         * specified question */
-        t = hashmap_get(scope->transactions_by_key, key);
-        if (!t)
-                return NULL;
+        /* Iterate through the list of transactions with a matching key */
+        first = hashmap_get(scope->transactions_by_key, key);
+        LIST_FOREACH(transactions_by_key, t, first) {
+
+                /* These four flags must match exactly: we cannot use a validated response for a
+                 * non-validating client, and we cannot use a non-validated response for a validating
+                 * client. Similar, if the sources don't match things aren't usable either. */
+                if (((query_flags ^ t->query_flags) &
+                     (SD_RESOLVED_NO_VALIDATE|
+                     SD_RESOLVED_NO_ZONE|
+                      SD_RESOLVED_NO_TRUST_ANCHOR|
+                      SD_RESOLVED_NO_NETWORK)) != 0)
+                        continue;
 
-        /* Refuse reusing transactions that completed based on cached
-         * data instead of a real packet, if that's requested. */
-        if (!cache_ok &&
-            IN_SET(t->state, DNS_TRANSACTION_SUCCESS, DNS_TRANSACTION_RCODE_FAILURE) &&
-            t->answer_source != DNS_TRANSACTION_NETWORK)
-                return NULL;
+                /* We can reuse a primary query if a regular one is requested, but not vice versa */
+                if ((query_flags & SD_RESOLVED_REQUIRE_PRIMARY) &&
+                    !(t->query_flags & SD_RESOLVED_REQUIRE_PRIMARY))
+                        continue;
+
+                /* Don't reuse a transaction that allowed caching when we got told not to use it */
+                if ((query_flags & SD_RESOLVED_NO_CACHE) &&
+                    !(t->query_flags & SD_RESOLVED_NO_CACHE))
+                        continue;
+
+                /* If we are are asked to clamp ttls an the existing transaction doesn't do it, we can't
+                 * reuse */
+                if ((query_flags & SD_RESOLVED_CLAMP_TTL) &&
+                    !(t->query_flags & SD_RESOLVED_CLAMP_TTL))
+                        continue;
+
+                return t;
+        }
 
-        return t;
+        return NULL;
 }
 
 static int dns_scope_make_conflict_packet(
@@ -1099,7 +1125,7 @@ void dns_scope_check_conflicts(DnsScope *scope, DnsPacket *p) {
                         return;
         }
 
-        if (manager_our_packet(scope->manager, p))
+        if (manager_packet_from_local_address(scope->manager, p))
                 return;
 
         r = dns_packet_extract(p);
@@ -1289,7 +1315,7 @@ int dns_scope_announce(DnsScope *scope, bool goodbye) {
                         else
                                 flags = goodbye ? (DNS_ANSWER_GOODBYE|DNS_ANSWER_CACHE_FLUSH) : DNS_ANSWER_CACHE_FLUSH;
 
-                        r = dns_answer_add(answer, i->rr, 0 , flags);
+                        r = dns_answer_add(answer, i->rr, 0, flags, NULL);
                         if (r < 0)
                                 return log_debug_errno(r, "Failed to add RR to announce: %m");
                 }
@@ -1307,7 +1333,7 @@ int dns_scope_announce(DnsScope *scope, bool goodbye) {
                 if (r < 0)
                         log_warning_errno(r, "Failed to add DNS-SD PTR record to MDNS zone: %m");
 
-                r = dns_answer_add(answer, rr, 0 , 0);
+                r = dns_answer_add(answer, rr, 0, 0, NULL);
                 if (r < 0)
                         return log_debug_errno(r, "Failed to add RR to announce: %m");
         }
index 82cd0becab7e958545f10e525585cfcef1ca7428..7e863d3f665d9b1b43e2ea2b16e20b95fe0f2f82 100644 (file)
@@ -53,14 +53,12 @@ struct DnsScope {
 
         LIST_HEAD(DnsQueryCandidate, query_candidates);
 
-        /* Note that we keep track of ongoing transactions in two
-         * ways: once in a hashmap, indexed by the rr key, and once in
-         * a linked list. We use the hashmap to quickly find
-         * transactions we can reuse for a key. But note that there
-         * might be multiple transactions for the same key (because
-         * the zone probing can't reuse a transaction answered from
-         * the zone or the cache), and the hashmap only tracks the
-         * most recent entry. */
+        /* Note that we keep track of ongoing transactions in two ways: once in a hashmap, indexed by the rr
+         * key, and once in a linked list. We use the hashmap to quickly find transactions we can reuse for a
+         * key. But note that there might be multiple transactions for the same key (because the associated
+         * query flags might differ in incompatible ways: e.g. we may not reuse a non-validating transaction
+         * as validating. Hence we maintain a per-key list of transactions, which we iterate through to find
+         * one we can reuse with matching flags. */
         Hashmap *transactions_by_key;
         LIST_HEAD(DnsTransaction, transactions);
 
@@ -82,7 +80,7 @@ bool dns_scope_good_key(DnsScope *s, const DnsResourceKey *key);
 
 DnsServer *dns_scope_get_dns_server(DnsScope *s);
 unsigned dns_scope_get_n_dns_servers(DnsScope *s);
-void dns_scope_next_dns_server(DnsScope *s);
+void dns_scope_next_dns_server(DnsScope *s, DnsServer *if_current);
 
 int dns_scope_llmnr_membership(DnsScope *s, bool b);
 int dns_scope_mdns_membership(DnsScope *s, bool b);
@@ -90,7 +88,7 @@ int dns_scope_mdns_membership(DnsScope *s, bool b);
 int dns_scope_make_reply_packet(DnsScope *s, uint16_t id, int rcode, DnsQuestion *q, DnsAnswer *answer, DnsAnswer *soa, bool tentative, DnsPacket **ret);
 void dns_scope_process_query(DnsScope *s, DnsStream *stream, DnsPacket *p);
 
-DnsTransaction *dns_scope_find_transaction(DnsScope *scope, DnsResourceKey *key, bool cache_ok);
+DnsTransaction *dns_scope_find_transaction(DnsScope *scope, DnsResourceKey *key, uint64_t query_flags);
 
 int dns_scope_notify_conflict(DnsScope *scope, DnsResourceRecord *rr);
 void dns_scope_check_conflicts(DnsScope *scope, DnsPacket *p);
index 541266ff9d6fdb929b709797545fe6e4aeeb94f7..585bfee2d101137318b8dc332e838fd847d72a74 100644 (file)
@@ -771,23 +771,25 @@ DnsServer *manager_get_dns_server(Manager *m) {
         return m->current_dns_server;
 }
 
-void manager_next_dns_server(Manager *m) {
+void manager_next_dns_server(Manager *m, DnsServer *if_current) {
         assert(m);
 
-        /* If there's currently no DNS server set, then the next
-         * manager_get_dns_server() will find one */
+        /* If the DNS server is already a different one than the one specified in 'if_current' don't do anything */
+        if (if_current && m->current_dns_server != if_current)
+                return;
+
+        /* If there's currently no DNS server set, then the next manager_get_dns_server() will find one */
         if (!m->current_dns_server)
                 return;
 
-        /* Change to the next one, but make sure to follow the linked
-         * list only if the server is still linked. */
+        /* Change to the next one, but make sure to follow the linked list only if the server is still
+         * linked. */
         if (m->current_dns_server->linked && m->current_dns_server->servers_next) {
                 manager_set_dns_server(m, m->current_dns_server->servers_next);
                 return;
         }
 
-        /* If there was no next one, then start from the beginning of
-         * the list */
+        /* If there was no next one, then start from the beginning of the list */
         if (m->current_dns_server->type == DNS_SERVER_FALLBACK)
                 manager_set_dns_server(m, m->fallback_dns_servers);
         else
index e4664c883a54113142284f236e86556158ab37dd..96e46226eedd81abb23743ce0405bd08392882e5 100644 (file)
@@ -143,7 +143,7 @@ DnsServer *manager_get_first_dns_server(Manager *m, DnsServerType t);
 
 DnsServer *manager_set_dns_server(Manager *m, DnsServer *s);
 DnsServer *manager_get_dns_server(Manager *m);
-void manager_next_dns_server(Manager *m);
+void manager_next_dns_server(Manager *m, DnsServer *if_current);
 
 DnssecMode dns_server_get_dnssec_mode(DnsServer *s);
 DnsOverTlsMode dns_server_get_dns_over_tls_mode(DnsServer *s);
index 6a3dc9901ae8326e93147a373be567739b865d9c..2e92795f3c1800fee9de1183224ac415001c945e 100644 (file)
@@ -82,72 +82,314 @@ DnsStubListenerExtra *dns_stub_listener_extra_free(DnsStubListenerExtra *p) {
         p->udp_event_source = sd_event_source_unref(p->udp_event_source);
         p->tcp_event_source = sd_event_source_unref(p->tcp_event_source);
 
+        hashmap_free(p->queries_by_packet);
+
         return mfree(p);
 }
 
-static int dns_stub_make_reply_packet(
-                DnsPacket **p,
-                size_t max_size,
-                DnsQuestion *q,
+uint16_t dns_stub_listener_extra_port(DnsStubListenerExtra *p) {
+        assert(p);
+
+        if (p->port > 0)
+                return p->port;
+
+        return 53;
+}
+
+static void stub_packet_hash_func(const DnsPacket *p, struct siphash *state) {
+        assert(p);
+
+        siphash24_compress(&p->protocol, sizeof(p->protocol), state);
+        siphash24_compress(&p->family, sizeof(p->family), state);
+        siphash24_compress(&p->sender, sizeof(p->sender), state);
+        siphash24_compress(&p->ipproto, sizeof(p->ipproto), state);
+        siphash24_compress(&p->sender_port, sizeof(p->sender_port), state);
+        siphash24_compress(DNS_PACKET_HEADER(p), sizeof(DnsPacketHeader), state);
+
+        /* We don't bother hashing the full packet here, just the header */
+}
+
+static int stub_packet_compare_func(const DnsPacket *x, const DnsPacket *y) {
+        int r;
+
+        r = CMP(x->protocol, y->protocol);
+        if (r != 0)
+                return r;
+
+        r = CMP(x->family, y->family);
+        if (r != 0)
+                return r;
+
+        r = memcmp(&x->sender, &y->sender, sizeof(x->sender));
+        if (r != 0)
+                return r;
+
+        r = CMP(x->ipproto, y->ipproto);
+        if (r != 0)
+                return r;
+
+        r = CMP(x->sender_port, y->sender_port);
+        if (r != 0)
+                return r;
+
+        return memcmp(DNS_PACKET_HEADER(x), DNS_PACKET_HEADER(y), sizeof(DnsPacketHeader));
+}
+
+DEFINE_HASH_OPS(stub_packet_hash_ops, DnsPacket, stub_packet_hash_func, stub_packet_compare_func);
+
+static int dns_stub_collect_answer_by_question(
+                DnsAnswer **reply,
                 DnsAnswer *answer,
-                bool *ret_truncated) {
+                DnsQuestion *question,
+                bool with_rrsig) { /* Add RRSIG RR matching each RR */
 
-        bool truncated = false;
-        DnsResourceRecord *rr;
-        unsigned c = 0;
+        DnsAnswerItem *item;
         int r;
 
-        assert(p);
+        assert(reply);
 
-        /* Note that we don't bother with any additional RRs, as this is stub is for local lookups only, and hence
-         * roundtrips aren't expensive. */
+        /* Copies all RRs from 'answer' into 'reply', if they match 'question'. */
 
-        if (!*p) {
-                r = dns_packet_new(p, DNS_PROTOCOL_DNS, 0, max_size);
-                if (r < 0)
-                        return r;
+        DNS_ANSWER_FOREACH_ITEM(item, answer) {
+
+                if (question) {
+                        bool match = false;
+
+                        r = dns_question_matches_rr(question, item->rr, NULL);
+                        if (r < 0)
+                                return r;
+                        else if (r > 0)
+                                match = true;
+                        else {
+                                r = dns_question_matches_cname_or_dname(question, item->rr, NULL);
+                                if (r < 0)
+                                        return r;
+                                if (r > 0)
+                                        match = true;
+                        }
+
+                        if (!match)
+                                continue;
+                }
 
-                r = dns_packet_append_question(*p, q);
+                r = dns_answer_add_extend(reply, item->rr, item->ifindex, item->flags, item->rrsig);
                 if (r < 0)
                         return r;
 
-                DNS_PACKET_HEADER(*p)->qdcount = htobe16(dns_question_size(q));
+                if (with_rrsig && item->rrsig) {
+                        r = dns_answer_add_extend(reply, item->rrsig, item->ifindex, item->flags, NULL);
+                        if (r < 0)
+                                return r;
+                }
         }
 
-        DNS_ANSWER_FOREACH(rr, answer) {
+        return 0;
+}
 
-                r = dns_question_matches_rr(q, rr, NULL);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        goto add;
+static int dns_stub_collect_answer_by_section(
+                DnsAnswer **reply,
+                DnsAnswer *answer,
+                DnsAnswerFlags section,
+                DnsAnswer *exclude1,
+                DnsAnswer *exclude2,
+                bool with_dnssec) { /* Include DNSSEC RRs. RRSIG, NSEC, â€¦ */
 
-                r = dns_question_matches_cname_or_dname(q, rr, NULL);
-                if (r < 0)
-                        return r;
-                if (r > 0)
-                        goto add;
+        DnsAnswerItem *item;
+        unsigned c = 0;
+        int r;
 
-                continue;
-        add:
-                r = dns_packet_append_rr(*p, rr, 0, NULL, NULL);
-                if (r == -EMSGSIZE) {
-                        truncated = true;
-                        break;
-                }
+        assert(reply);
+
+        /* Copies all RRs from 'answer' into 'reply', if they originate from the specified section. Also,
+         * avoid any RRs listed in 'exclude'. */
+
+        DNS_ANSWER_FOREACH_ITEM(item, answer) {
+
+                if (dns_answer_contains(exclude1, item->rr) ||
+                    dns_answer_contains(exclude2, item->rr))
+                        continue;
+
+                if (!with_dnssec &&
+                    dns_type_is_dnssec(item->rr->key->type))
+                        continue;
+
+                if (((item->flags ^ section) & (DNS_ANSWER_SECTION_ANSWER|DNS_ANSWER_SECTION_AUTHORITY|DNS_ANSWER_SECTION_ADDITIONAL)) != 0)
+                        continue;
+
+                r = dns_answer_add_extend(reply, item->rr, item->ifindex, item->flags, item->rrsig);
                 if (r < 0)
                         return r;
 
                 c++;
+
+                if (with_dnssec && item->rrsig) {
+                        r = dns_answer_add_extend(reply, item->rrsig, item->ifindex, item->flags, NULL);
+                        if (r < 0)
+                                return r;
+
+                        c++;
+                }
         }
 
+        return (int) c;
+}
+
+static int dns_stub_assign_sections(
+                DnsQuery *q,
+                DnsQuestion *question,
+                bool edns0_do) {
+
+        int r;
+
+        assert(q);
+        assert(question);
+
+        /* Let's assign the 'answer' and 'answer_auxiliary' RRs we collected to their respective sections in
+         * the reply datagram. We try to reproduce a section assignment similar to what the upstream DNS
+         * server responded to us. We use the DNS_ANSWER_SECTION_xyz flags to match things up, which is where
+         * the original upstream's packet section assignment is stored in the DnsAnswer object. Not all RRs
+         * in the 'answer' and 'answer_auxiliary' objects come with section information though (for example,
+         * because they were synthesized locally, and not from a DNS packet). To deal with that we extend the
+         * assignment logic a bit: anything from the 'answer' object that directly matches the original
+         * question is always put in the ANSWER section, regardless if it carries section info, or what that
+         * section info says. Then, anything from the 'answer' and 'answer_auxiliary' objects that is from
+         * the ANSWER or AUTHORITY sections, and wasn't already added to the ANSWER section is placed in the
+         * AUTHORITY section. Everything else from either object is added to the ADDITIONAL section. */
+
+        /* Include all RRs that directly answer the question in the answer section */
+        r = dns_stub_collect_answer_by_question(
+                        &q->reply_answer,
+                        q->answer,
+                        question,
+                        edns0_do);
+        if (r < 0)
+                return r;
+
+        /* Include all RRs that originate from the answer or authority sections, and aren't listed in the
+         * answer section, in the authority section */
+        r = dns_stub_collect_answer_by_section(
+                        &q->reply_authoritative,
+                        q->answer,
+                        DNS_ANSWER_SECTION_ANSWER,
+                        q->reply_answer, NULL,
+                        edns0_do);
+        if (r < 0)
+                return r;
+
+        /* Include all RRs that originate from the answer or authority sections, and aren't listed in the
+         * answer section, in the authority section */
+        r = dns_stub_collect_answer_by_section(
+                        &q->reply_authoritative,
+                        q->answer,
+                        DNS_ANSWER_SECTION_AUTHORITY,
+                        q->reply_answer, NULL,
+                        edns0_do);
+        if (r < 0)
+                return r;
+
+        /* Include all RRs that originate from the additional sections in the additional section (except if
+         * already listed in the other two sections). Also add all RRs with no section marking. */
+        r = dns_stub_collect_answer_by_section(
+                        &q->reply_additional,
+                        q->answer,
+                        DNS_ANSWER_SECTION_ADDITIONAL,
+                        q->reply_answer, q->reply_authoritative,
+                        edns0_do);
+        if (r < 0)
+                return r;
+        r = dns_stub_collect_answer_by_section(
+                        &q->reply_additional,
+                        q->answer,
+                        0,
+                        q->reply_answer, q->reply_authoritative,
+                        edns0_do);
+        if (r < 0)
+                return r;
+
+        return 0;
+}
+
+static int dns_stub_make_reply_packet(
+                DnsPacket **ret,
+                size_t max_size,
+                DnsQuestion *q,
+                bool *ret_truncated) {
+
+        _cleanup_(dns_packet_unrefp) DnsPacket *p = NULL;
+        bool tc = false;
+        int r;
+
+        assert(ret);
+
+        r = dns_packet_new(&p, DNS_PROTOCOL_DNS, 0, max_size);
+        if (r < 0)
+                return r;
+
+        r = dns_packet_append_question(p, q);
+        if (r == -EMSGSIZE)
+                tc = true;
+        else if (r < 0)
+                return r;
+
         if (ret_truncated)
-                *ret_truncated = truncated;
-        else if (truncated)
+                *ret_truncated = tc;
+        else if (tc)
                 return -EMSGSIZE;
 
-        DNS_PACKET_HEADER(*p)->ancount = htobe16(be16toh(DNS_PACKET_HEADER(*p)->ancount) + c);
+        DNS_PACKET_HEADER(p)->qdcount = htobe16(dns_question_size(q));
 
+        *ret = TAKE_PTR(p);
+        return 0;
+}
+
+static int dns_stub_add_reply_packet_body(
+                DnsPacket *p,
+                DnsAnswer *answer,
+                DnsAnswer *authoritative,
+                DnsAnswer *additional,
+                bool edns0_do, /* Client expects DNSSEC RRs? */
+                bool *truncated) {
+
+        unsigned n_answer = 0, n_authoritative = 0, n_additional = 0;
+        bool tc = false;
+        int r;
+
+        assert(p);
+
+        /* Add the three sections to the packet. If the answer section doesn't fit we'll signal that as
+         * truncation. If the authoritative section doesn't fit and we are in DNSSEC mode, also signal
+         * truncation. In all other cases where things don't fit don't signal truncation, as for those cases
+         * the dropped RRs should not be essential. */
+
+        r = dns_packet_append_answer(p, answer, &n_answer);
+        if (r == -EMSGSIZE)
+                tc = true;
+        else if (r < 0)
+                return r;
+        else {
+                r = dns_packet_append_answer(p, authoritative, &n_authoritative);
+                if (r == -EMSGSIZE) {
+                        if (edns0_do)
+                                tc = true;
+                } else if (r < 0)
+                        return r;
+                else {
+                        r = dns_packet_append_answer(p, additional, &n_additional);
+                        if (r < 0 && r != -EMSGSIZE)
+                                return r;
+                }
+        }
+
+        if (tc) {
+                if (!truncated)
+                        return -EMSGSIZE;
+
+                *truncated = true;
+        }
+
+        DNS_PACKET_HEADER(p)->ancount = htobe16(n_answer);
+        DNS_PACKET_HEADER(p)->nscount = htobe16(n_authoritative);
+        DNS_PACKET_HEADER(p)->arcount = htobe16(n_additional);
         return 0;
 }
 
@@ -159,6 +401,7 @@ static int dns_stub_finish_reply_packet(
                 bool add_opt,   /* add an OPT RR to this packet? */
                 bool edns0_do,  /* set the EDNS0 DNSSEC OK bit? */
                 bool ad,        /* set the DNSSEC authenticated data bit? */
+                bool cd,        /* set the DNSSEC checking disabled bit? */
                 uint16_t max_udp_size) { /* The maximum UDP datagram size to advertise to clients */
 
         int r;
@@ -171,19 +414,21 @@ static int dns_stub_finish_reply_packet(
                         tc = true;
                 else if (r < 0)
                         return r;
-
         } else {
                 /* If the client can't to EDNS0, don't do DO either */
                 edns0_do = false;
 
-                /* If the client didn't do EDNS, clamp the rcode to 4 bit */
+                /* If we don't do EDNS, clamp the rcode to 4 bit */
                 if (rcode > 0xF)
                         rcode = DNS_RCODE_SERVFAIL;
         }
 
-        /* Don't set the AD bit unless DO is on, too */
+        /* Don't set the CD bit unless DO is on, too */
         if (!edns0_do)
-                ad = false;
+                cd = false;
+
+        /* Note that we allow the AD bit to be set even if client didn't signal DO, as per RFC 6840, section
+         * 5.7 */
 
         DNS_PACKET_HEADER(p)->id = id;
 
@@ -195,7 +440,7 @@ static int dns_stub_finish_reply_packet(
                                                               1  /* rd */,
                                                               1  /* ra */,
                                                               ad /* ad */,
-                                                               /* cd */,
+                                                              cd /* cd */,
                                                               rcode));
 
         return 0;
@@ -231,6 +476,66 @@ static int dns_stub_send(
         return 0;
 }
 
+static int dns_stub_send_reply(
+                DnsQuery *q,
+                int rcode) {
+
+        _cleanup_(dns_packet_unrefp) DnsPacket *reply = NULL;
+        bool truncated, edns0_do;
+        int r;
+
+        assert(q);
+
+        /* Reply with DNSSEC DO set? Only if client supports it; and we did any DNSSEC verification
+         * ourselves, or consider the data fully authenticated because we generated it locally, or
+         * the client set cd */
+        edns0_do =
+                DNS_PACKET_DO(q->request_packet) &&
+                (q->answer_dnssec_result >= 0 ||        /* we did proper DNSSEC validation â€¦ */
+                 dns_query_fully_authenticated(q) ||    /* â€¦ or we considered it authentic otherwise â€¦ */
+                 DNS_PACKET_CD(q->request_packet));     /* â€¦ or client set CD */
+
+        r = dns_stub_assign_sections(
+                        q,
+                        q->request_packet->question,
+                        edns0_do);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to assign sections: %m");
+
+        r = dns_stub_make_reply_packet(
+                        &reply,
+                        DNS_PACKET_PAYLOAD_SIZE_MAX(q->request_packet),
+                        q->request_packet->question,
+                        &truncated);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to build reply packet: %m");
+
+        r = dns_stub_add_reply_packet_body(
+                        reply,
+                        q->reply_answer,
+                        q->reply_authoritative,
+                        q->reply_additional,
+                        edns0_do,
+                        &truncated);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to append reply packet body: %m");
+
+        r = dns_stub_finish_reply_packet(
+                        reply,
+                        DNS_PACKET_ID(q->request_packet),
+                        rcode,
+                        truncated,
+                        !!q->request_packet->opt,
+                        edns0_do,
+                        DNS_PACKET_AD(q->request_packet) && dns_query_fully_authenticated(q),
+                        DNS_PACKET_CD(q->request_packet),
+                        q->stub_listener_extra ? ADVERTISE_EXTRA_DATAGRAM_SIZE_MAX : ADVERTISE_DATAGRAM_SIZE_MAX);
+        if (r < 0)
+                return log_debug_errno(r, "Failed to build failure packet: %m");
+
+        return dns_stub_send(q->manager, q->stub_listener_extra, q->request_stream, q->request_packet, reply);
+}
+
 static int dns_stub_send_failure(
                 Manager *m,
                 DnsStubListenerExtra *l,
@@ -240,12 +545,17 @@ static int dns_stub_send_failure(
                 bool authenticated) {
 
         _cleanup_(dns_packet_unrefp) DnsPacket *reply = NULL;
+        bool truncated;
         int r;
 
         assert(m);
         assert(p);
 
-        r = dns_stub_make_reply_packet(&reply, DNS_PACKET_PAYLOAD_SIZE_MAX(p), p->question, NULL, NULL);
+        r = dns_stub_make_reply_packet(
+                        &reply,
+                        DNS_PACKET_PAYLOAD_SIZE_MAX(p),
+                        p->question,
+                        &truncated);
         if (r < 0)
                 return log_debug_errno(r, "Failed to make failure packet: %m");
 
@@ -253,10 +563,11 @@ static int dns_stub_send_failure(
                         reply,
                         DNS_PACKET_ID(p),
                         rcode,
-                        /* truncated = */ false,
+                        truncated,
                         !!p->opt,
                         DNS_PACKET_DO(p),
-                        authenticated,
+                        DNS_PACKET_AD(p) && authenticated,
+                        DNS_PACKET_CD(p),
                         l ? ADVERTISE_EXTRA_DATAGRAM_SIZE_MAX : ADVERTISE_DATAGRAM_SIZE_MAX);
         if (r < 0)
                 return log_debug_errno(r, "Failed to build failure packet: %m");
@@ -264,27 +575,87 @@ static int dns_stub_send_failure(
         return dns_stub_send(m, l, s, p, reply);
 }
 
+static int dns_stub_patch_bypass_reply_packet(
+                DnsPacket **ret,       /* Where to place the patched packet */
+                DnsPacket *original,   /* The packet to patch */
+                DnsPacket *request) {  /* The packet the patched packet shall look like a reply to */
+        _cleanup_(dns_packet_unrefp) DnsPacket *c = NULL;
+        int r;
+
+        assert(ret);
+        assert(original);
+        assert(request);
+
+        r = dns_packet_dup(&c, original);
+        if (r < 0)
+                return r;
+
+        /* Extract the packet, so that we know where the OPT field is */
+        r = dns_packet_extract(c);
+        if (r < 0)
+                return r;
+
+        /* Copy over the original client request ID, so that we can make the upstream query look like our own reply. */
+        DNS_PACKET_HEADER(c)->id = DNS_PACKET_HEADER(request)->id;
+
+        /* Patch in our own maximum datagram size, if EDNS0 was on */
+        r = dns_packet_patch_max_udp_size(c, ADVERTISE_DATAGRAM_SIZE_MAX);
+        if (r < 0)
+                return r;
+
+        /* Lower all TTLs by the time passed since we received the datagram. */
+        if (timestamp_is_set(original->timestamp)) {
+                r = dns_packet_patch_ttls(c, original->timestamp);
+                if (r < 0)
+                        return r;
+        }
+
+        /* Our upstream connection might have supported larger DNS requests than our downstream one, hence
+         * set the TC bit if our reply is larger than what the client supports, and truncate. */
+        if (c->size > DNS_PACKET_PAYLOAD_SIZE_MAX(request)) {
+                log_debug("Artificially truncating stub response, as advertised size of client is smaller than upstream one.");
+                dns_packet_truncate(c, DNS_PACKET_PAYLOAD_SIZE_MAX(request));
+                DNS_PACKET_HEADER(c)->flags = htobe16(be16toh(DNS_PACKET_HEADER(c)->flags) | DNS_PACKET_FLAG_TC);
+        }
+
+        *ret = TAKE_PTR(c);
+        return 0;
+}
+
 static void dns_stub_query_complete(DnsQuery *q) {
         int r;
 
         assert(q);
-        assert(q->request_dns_packet);
+        assert(q->request_packet);
 
-        switch (q->state) {
+        if (q->question_bypass) {
+                /* This is a bypass reply. If so, let's propagate the upstream packet, if we have it and it
+                 * is regular DNS. (We can't do this if the upstream packet is LLMNR or mDNS, since the
+                 * packets are not 100% compatible.) */
 
-        case DNS_TRANSACTION_SUCCESS: {
-                bool truncated;
+                if (q->answer_full_packet &&
+                    q->answer_full_packet->protocol == DNS_PROTOCOL_DNS) {
+                        _cleanup_(dns_packet_unrefp) DnsPacket *reply = NULL;
 
-                r = dns_stub_make_reply_packet(&q->reply_dns_packet, DNS_PACKET_PAYLOAD_SIZE_MAX(q->request_dns_packet), q->question_idna, q->answer, &truncated);
-                if (r < 0) {
-                        log_debug_errno(r, "Failed to build reply packet: %m");
-                        break;
+                        r = dns_stub_patch_bypass_reply_packet(&reply, q->answer_full_packet, q->request_packet);
+                        if (r < 0)
+                                log_debug_errno(r, "Failed to patch bypass reply packet: %m");
+                        else
+                                (void) dns_stub_send(q->manager, q->stub_listener_extra, q->request_stream, q->request_packet, reply);
+
+                        dns_query_free(q);
+                        return;
                 }
+        }
 
-                if (!truncated) {
+        switch (q->state) {
+
+        case DNS_TRANSACTION_SUCCESS:
+                /* Follow CNAMEs, and accumulate answers. Except if DNSSEC is requested, then let the client do that. */
+                if (!DNS_PACKET_DO(q->request_packet)) {
                         r = dns_query_process_cname(q);
-                        if (r == -ELOOP) {
-                                (void) dns_stub_send_failure(q->manager, q->stub_listener_extra, q->request_dns_stream, q->request_dns_packet, DNS_RCODE_SERVFAIL, false);
+                        if (r == -ELOOP) { /* CNAME loop */
+                                (void) dns_stub_send_reply(q, DNS_RCODE_SERVFAIL);
                                 break;
                         }
                         if (r < 0) {
@@ -295,30 +666,15 @@ static void dns_stub_query_complete(DnsQuery *q) {
                                 return;
                 }
 
-                r = dns_stub_finish_reply_packet(
-                                q->reply_dns_packet,
-                                DNS_PACKET_ID(q->request_dns_packet),
-                                q->answer_rcode,
-                                truncated,
-                                !!q->request_dns_packet->opt,
-                                DNS_PACKET_DO(q->request_dns_packet),
-                                dns_query_fully_authenticated(q),
-                                q->stub_listener_extra ? ADVERTISE_EXTRA_DATAGRAM_SIZE_MAX : ADVERTISE_DATAGRAM_SIZE_MAX);
-                if (r < 0) {
-                        log_debug_errno(r, "Failed to finish reply packet: %m");
-                        break;
-                }
-
-                (void) dns_stub_send(q->manager, q->stub_listener_extra, q->request_dns_stream, q->request_dns_packet, q->reply_dns_packet);
+                (void) dns_stub_send_reply(q, q->answer_rcode);
                 break;
-        }
 
         case DNS_TRANSACTION_RCODE_FAILURE:
-                (void) dns_stub_send_failure(q->manager, q->stub_listener_extra, q->request_dns_stream, q->request_dns_packet, q->answer_rcode, dns_query_fully_authenticated(q));
+                (void) dns_stub_send_reply(q, q->answer_rcode);
                 break;
 
         case DNS_TRANSACTION_NOT_FOUND:
-                (void) dns_stub_send_failure(q->manager, q->stub_listener_extra, q->request_dns_stream, q->request_dns_packet, DNS_RCODE_NXDOMAIN, dns_query_fully_authenticated(q));
+                (void) dns_stub_send_reply(q, DNS_RCODE_NXDOMAIN);
                 break;
 
         case DNS_TRANSACTION_TIMEOUT:
@@ -334,7 +690,9 @@ static void dns_stub_query_complete(DnsQuery *q) {
         case DNS_TRANSACTION_NO_TRUST_ANCHOR:
         case DNS_TRANSACTION_RR_TYPE_UNSUPPORTED:
         case DNS_TRANSACTION_NETWORK_DOWN:
-                (void) dns_stub_send_failure(q->manager, q->stub_listener_extra, q->request_dns_stream, q->request_dns_packet, DNS_RCODE_SERVFAIL, false);
+        case DNS_TRANSACTION_NO_SOURCE:
+        case DNS_TRANSACTION_STUB_LOOP:
+                (void) dns_stub_send_reply(q, DNS_RCODE_SERVFAIL);
                 break;
 
         case DNS_TRANSACTION_NULL:
@@ -370,6 +728,8 @@ static int dns_stub_stream_complete(DnsStream *s, int error) {
 
 static void dns_stub_process_query(Manager *m, DnsStubListenerExtra *l, DnsStream *s, DnsPacket *p) {
         _cleanup_(dns_query_freep) DnsQuery *q = NULL;
+        Hashmap **queries_by_packet;
+        DnsQuery *existing;
         int r;
 
         assert(m);
@@ -383,6 +743,18 @@ static void dns_stub_process_query(Manager *m, DnsStubListenerExtra *l, DnsStrea
                 return;
         }
 
+        if (manager_packet_from_our_transaction(m, p)) {
+                log_debug("Got our own packet looped back, ignoring.");
+                return;
+        }
+
+        queries_by_packet = l ? &l->queries_by_packet : &m->stub_queries_by_packet;
+        existing = hashmap_get(*queries_by_packet, p);
+        if (existing && dns_packet_equal(existing->request_packet, p)) {
+                log_debug("Got repeat packet from client, ignoring.");
+                return;
+        }
+
         r = dns_packet_extract(p);
         if (r < 0) {
                 log_debug_errno(r, "Failed to extract resources from incoming packet, ignoring packet: %m");
@@ -398,13 +770,13 @@ static void dns_stub_process_query(Manager *m, DnsStubListenerExtra *l, DnsStrea
 
         if (dns_type_is_obsolete(p->question->keys[0]->type)) {
                 log_debug("Got message with obsolete key type, refusing.");
-                dns_stub_send_failure(m, l, s, p, DNS_RCODE_NOTIMP, false);
+                dns_stub_send_failure(m, l, s, p, DNS_RCODE_REFUSED, false);
                 return;
         }
 
         if (dns_type_is_zone_transer(p->question->keys[0]->type)) {
                 log_debug("Got request for zone transfer, refusing.");
-                dns_stub_send_failure(m, l, s, p, DNS_RCODE_NOTIMP, false);
+                dns_stub_send_failure(m, l, s, p, DNS_RCODE_REFUSED, false);
                 return;
         }
 
@@ -415,24 +787,36 @@ static void dns_stub_process_query(Manager *m, DnsStubListenerExtra *l, DnsStrea
                 return;
         }
 
-        if (DNS_PACKET_DO(p) && DNS_PACKET_CD(p)) {
-                log_debug("Got request with DNSSEC CD bit set, refusing.");
-                dns_stub_send_failure(m, l, s, p, DNS_RCODE_NOTIMP, false);
+        r = hashmap_ensure_allocated(queries_by_packet, &stub_packet_hash_ops);
+        if (r < 0) {
+                log_oom();
                 return;
         }
 
-        r = dns_query_new(m, &q, p->question, p->question, 0, SD_RESOLVED_PROTOCOLS_ALL|SD_RESOLVED_NO_SEARCH);
+        if (DNS_PACKET_DO(p) && DNS_PACKET_CD(p)) {
+                log_debug("Got request with DNSSEC checking disabled, enabling bypass logic.");
+
+                r = dns_query_new(m, &q, NULL, NULL, p, 0,
+                                  SD_RESOLVED_PROTOCOLS_ALL|
+                                  SD_RESOLVED_NO_CNAME|
+                                  SD_RESOLVED_NO_SEARCH|
+                                  SD_RESOLVED_NO_VALIDATE|
+                                  SD_RESOLVED_REQUIRE_PRIMARY|
+                                  SD_RESOLVED_CLAMP_TTL);
+        } else
+                r = dns_query_new(m, &q, p->question, p->question, NULL, 0,
+                                  SD_RESOLVED_PROTOCOLS_ALL|
+                                  SD_RESOLVED_NO_SEARCH|
+                                  (DNS_PACKET_DO(p) ? SD_RESOLVED_NO_CNAME|SD_RESOLVED_REQUIRE_PRIMARY : 0)|
+                                  SD_RESOLVED_CLAMP_TTL);
         if (r < 0) {
                 log_error_errno(r, "Failed to generate query object: %m");
                 dns_stub_send_failure(m, l, s, p, DNS_RCODE_SERVFAIL, false);
                 return;
         }
 
-        /* Request that the TTL is corrected by the cached time for this lookup, so that we return vaguely useful TTLs */
-        q->clamp_ttl = true;
-
-        q->request_dns_packet = dns_packet_ref(p);
-        q->request_dns_stream = dns_stream_ref(s); /* make sure the stream stays around until we can send a reply through it */
+        q->request_packet = dns_packet_ref(p);
+        q->request_stream = dns_stream_ref(s); /* make sure the stream stays around until we can send a reply through it */
         q->stub_listener_extra = l;
         q->complete = dns_stub_query_complete;
 
@@ -448,6 +832,11 @@ static void dns_stub_process_query(Manager *m, DnsStubListenerExtra *l, DnsStrea
                 assert(r > 0);
         }
 
+        /* Add the query to the hash table we use to determine repeat packets now. We don't care about
+         * failures here, since in the worst case we'll not recognize duplicate incoming requests, which
+         * isn't particularly bad. */
+        (void) hashmap_put(*queries_by_packet, q->request_packet, q);
+
         r = dns_query_go(q);
         if (r < 0) {
                 log_error_errno(r, "Failed to start query: %m");
@@ -640,13 +1029,13 @@ static int manager_dns_stub_fd_extra(Manager *m, DnsStubListenerExtra *l, int ty
         if (l->family == AF_INET)
                 sa = (union sockaddr_union) {
                         .in.sin_family = l->family,
-                        .in.sin_port = htobe16(l->port != 0 ? l->port : 53U),
+                        .in.sin_port = htobe16(dns_stub_listener_extra_port(l)),
                         .in.sin_addr = l->address.in,
                 };
         else
                 sa = (union sockaddr_union) {
                         .in6.sin6_family = l->family,
-                        .in6.sin6_port = htobe16(l->port != 0 ? l->port : 53U),
+                        .in6.sin6_port = htobe16(dns_stub_listener_extra_port(l)),
                         .in6.sin6_addr = l->address.in6,
                 };
 
index 5911ccdc3448592396f5ce966f163f827008b597..cf03d7f7000c08ec7acee5bea00de1bdddec7f08 100644 (file)
@@ -27,12 +27,15 @@ struct DnsStubListenerExtra {
 
         sd_event_source *udp_event_source;
         sd_event_source *tcp_event_source;
+
+        Hashmap *queries_by_packet;
 };
 
 extern const struct hash_ops dns_stub_listener_extra_hash_ops;
 
 int dns_stub_listener_extra_new(Manager *m, DnsStubListenerExtra **ret);
 DnsStubListenerExtra *dns_stub_listener_extra_free(DnsStubListenerExtra *p);
+uint16_t dns_stub_listener_extra_port(DnsStubListenerExtra *p);
 
 void manager_dns_stub_stop(Manager *m);
 int manager_dns_stub_start(Manager *m);
index f08d62116abda047156fd292032d3d34a4063c2b..23c9ba14a987c73cd4f0ed86174a9c31cdbb19ae 100644 (file)
@@ -76,7 +76,7 @@ static int synthesize_localhost_rr(Manager *m, const DnsResourceKey *key, int if
 
                 rr->a.in_addr.s_addr = htobe32(INADDR_LOOPBACK);
 
-                r = dns_answer_add(*answer, rr, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = dns_answer_add(*answer, rr, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
         }
@@ -90,7 +90,7 @@ static int synthesize_localhost_rr(Manager *m, const DnsResourceKey *key, int if
 
                 rr->aaaa.in6_addr = in6addr_loopback;
 
-                r = dns_answer_add(*answer, rr, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED);
+                r = dns_answer_add(*answer, rr, dns_synthesize_ifindex(ifindex), DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
         }
@@ -109,7 +109,7 @@ static int answer_add_ptr(DnsAnswer **answer, const char *from, const char *to,
         if (!rr->ptr.name)
                 return -ENOMEM;
 
-        return dns_answer_add(*answer, rr, ifindex, flags);
+        return dns_answer_add(*answer, rr, ifindex, flags, NULL);
 }
 
 static int synthesize_localhost_ptr(Manager *m, const DnsResourceKey *key, int ifindex, DnsAnswer **answer) {
@@ -155,7 +155,7 @@ static int answer_add_addresses_rr(
                 if (r < 0)
                         return r;
 
-                r = dns_answer_add(*answer, rr, addresses[j].ifindex, DNS_ANSWER_AUTHENTICATED);
+                r = dns_answer_add(*answer, rr, addresses[j].ifindex, DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
         }
@@ -197,7 +197,7 @@ static int answer_add_addresses_ptr(
                 if (r < 0)
                         return r;
 
-                r = dns_answer_add(*answer, rr, addresses[j].ifindex, DNS_ANSWER_AUTHENTICATED);
+                r = dns_answer_add(*answer, rr, addresses[j].ifindex, DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
 
index 7c966affe1b9b8f7237badb6361c759687795c1e..bd73aa5451e899b0200308ce5e892cce1b5a9da8 100644 (file)
@@ -88,13 +88,23 @@ DnsTransaction* dns_transaction_free(DnsTransaction *t) {
         dns_server_unref(t->server);
 
         if (t->scope) {
-                hashmap_remove_value(t->scope->transactions_by_key, t->key, t);
-                LIST_REMOVE(transactions_by_scope, t->scope->transactions, t);
+                if (t->key) {
+                        DnsTransaction *first;
+
+                        first = hashmap_get(t->scope->transactions_by_key, t->key);
+                        LIST_REMOVE(transactions_by_key, first, t);
+                        if (first)
+                                hashmap_replace(t->scope->transactions_by_key, first->key, first);
+                        else
+                                hashmap_remove(t->scope->transactions_by_key, t->key);
+                }
 
-                if (t->id != 0)
-                        hashmap_remove(t->scope->manager->dns_transactions, UINT_TO_PTR(t->id));
+                LIST_REMOVE(transactions_by_scope, t->scope->transactions, t);
         }
 
+        if (t->id != 0)
+                hashmap_remove(t->scope->manager->dns_transactions, UINT_TO_PTR(t->id));
+
         while ((c = set_steal_first(t->notify_query_candidates)))
                 set_remove(c->transactions, t);
         set_free(t->notify_query_candidates);
@@ -124,6 +134,7 @@ DnsTransaction* dns_transaction_free(DnsTransaction *t) {
 
         dns_answer_unref(t->validated_keys);
         dns_resource_key_unref(t->key);
+        dns_packet_unref(t->bypass);
 
         return mfree(t);
 }
@@ -165,13 +176,9 @@ static uint16_t pick_new_id(Manager *m) {
         return new_id;
 }
 
-int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key) {
-        _cleanup_(dns_transaction_freep) DnsTransaction *t = NULL;
-        int r;
-
-        assert(ret);
-        assert(s);
-        assert(key);
+static int key_ok(
+                DnsScope *scope,
+                DnsResourceKey *key) {
 
         /* Don't allow looking up invalid or pseudo RRs */
         if (!dns_type_is_valid_query(key->type))
@@ -183,6 +190,49 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key)
         if (!IN_SET(key->class, DNS_CLASS_IN, DNS_CLASS_ANY))
                 return -EOPNOTSUPP;
 
+        /* Don't allows DNSSEC RRs to be looked up via LLMNR/mDNS. They don't really make sense
+         * there, and it speeds up our queries if we refuse this early */
+        if (scope->protocol != DNS_PROTOCOL_DNS &&
+            dns_type_is_dnssec(key->type))
+                return -EOPNOTSUPP;
+
+        return 0;
+}
+
+int dns_transaction_new(
+                DnsTransaction **ret,
+                DnsScope *s,
+                DnsResourceKey *key,
+                DnsPacket *bypass,
+                uint64_t query_flags) {
+
+        _cleanup_(dns_transaction_freep) DnsTransaction *t = NULL;
+        int r;
+
+        assert(ret);
+        assert(s);
+
+        if (key) {
+                assert(!bypass);
+
+                r = key_ok(s, key);
+                if (r < 0)
+                        return r;
+        } else {
+                DnsResourceKey *qk;
+                assert(bypass);
+
+                r = dns_packet_validate_query(bypass);
+                if (r < 0)
+                        return r;
+
+                DNS_QUESTION_FOREACH(qk, bypass->question) {
+                        r = key_ok(s, qk);
+                        if (r < 0)
+                                return r;
+                }
+        }
+
         if (hashmap_size(s->manager->dns_transactions) >= TRANSACTIONS_MAX)
                 return -EBUSY;
 
@@ -190,9 +240,11 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key)
         if (r < 0)
                 return r;
 
-        r = hashmap_ensure_allocated(&s->transactions_by_key, &dns_resource_key_hash_ops);
-        if (r < 0)
-                return r;
+        if (key) {
+                r = hashmap_ensure_allocated(&s->transactions_by_key, &dns_resource_key_hash_ops);
+                if (r < 0)
+                        return r;
+        }
 
         t = new(DnsTransaction, 1);
         if (!t)
@@ -204,6 +256,8 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key)
                 .answer_dnssec_result = _DNSSEC_RESULT_INVALID,
                 .answer_nsec_ttl = (uint32_t) -1,
                 .key = dns_resource_key_ref(key),
+                .query_flags = query_flags,
+                .bypass = dns_packet_ref(bypass),
                 .current_feature_level = _DNS_SERVER_FEATURE_LEVEL_INVALID,
                 .clamp_feature_level = _DNS_SERVER_FEATURE_LEVEL_INVALID,
                 .id = pick_new_id(s->manager),
@@ -215,10 +269,17 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key)
                 return r;
         }
 
-        r = hashmap_replace(s->transactions_by_key, t->key, t);
-        if (r < 0) {
-                hashmap_remove(s->manager->dns_transactions, UINT_TO_PTR(t->id));
-                return r;
+        if (t->key) {
+                DnsTransaction *first;
+
+                first = hashmap_get(s->transactions_by_key, t->key);
+                LIST_PREPEND(transactions_by_key, first, t);
+
+                r = hashmap_replace(s->transactions_by_key, first->key, first);
+                if (r < 0) {
+                        LIST_REMOVE(transactions_by_key, first, t);
+                        return r;
+                }
         }
 
         LIST_PREPEND(transactions_by_scope, s->transactions, t);
@@ -229,8 +290,7 @@ int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key)
         if (ret)
                 *ret = t;
 
-        t = NULL;
-
+        TAKE_PTR(t);
         return 0;
 }
 
@@ -257,15 +317,16 @@ static void dns_transaction_tentative(DnsTransaction *t, DnsPacket *p) {
 
         assert(t);
         assert(p);
+        assert(t->scope->protocol == DNS_PROTOCOL_LLMNR);
 
-        if (manager_our_packet(t->scope->manager, p) != 0)
+        if (manager_packet_from_local_address(t->scope->manager, p) != 0)
                 return;
 
         (void) in_addr_to_string(p->family, &p->sender, &pretty);
 
         log_debug("Transaction %" PRIu16 " for <%s> on scope %s on %s/%s got tentative packet from %s.",
                   t->id,
-                  dns_resource_key_to_string(t->key, key_str, sizeof key_str),
+                  dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str),
                   dns_protocol_to_string(t->scope->protocol),
                   t->scope->link ? t->scope->link->ifname : "*",
                   af_to_name_short(t->scope->family),
@@ -307,7 +368,7 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
         assert(!DNS_TRANSACTION_IS_LIVE(state));
 
         if (state == DNS_TRANSACTION_DNSSEC_FAILED) {
-                dns_resource_key_to_string(t->key, key_str, sizeof key_str);
+                dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str);
 
                 log_struct(LOG_NOTICE,
                            "MESSAGE_ID=" SD_MESSAGE_DNSSEC_FAILURE_STR,
@@ -328,15 +389,17 @@ void dns_transaction_complete(DnsTransaction *t, DnsTransactionState state) {
         else
                 st = dns_transaction_state_to_string(state);
 
-        log_debug("Transaction %" PRIu16 " for <%s> on scope %s on %s/%s now complete with <%s> from %s (%s).",
+        log_debug("%s transaction %" PRIu16 " for <%s> on scope %s on %s/%s now complete with <%s> from %s (%s).",
+                  t->bypass ? "Bypass" : "Regular",
                   t->id,
-                  dns_resource_key_to_string(t->key, key_str, sizeof key_str),
+                  dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str),
                   dns_protocol_to_string(t->scope->protocol),
                   t->scope->link ? t->scope->link->ifname : "*",
                   af_to_name_short(t->scope->family),
                   st,
                   t->answer_source < 0 ? "none" : dns_transaction_source_to_string(t->answer_source),
-                  t->answer_authenticated ? "authenticated" : "unsigned");
+                  FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE) ? "not validated" :
+                  (t->answer_authenticated ? "authenticated" : "unsigned"));
 
         t->state = state;
 
@@ -421,7 +484,7 @@ static void dns_transaction_retry(DnsTransaction *t, bool next_server) {
 
         /* Before we try again, switch to a new server. */
         if (next_server)
-                dns_scope_next_dns_server(t->scope);
+                dns_scope_next_dns_server(t->scope, t->server);
 
         r = dns_transaction_go(t);
         if (r < 0)
@@ -550,8 +613,11 @@ static int on_stream_packet(DnsStream *s) {
 }
 
 static uint16_t dns_transaction_port(DnsTransaction *t) {
+        assert(t);
+
         if (t->server->port > 0)
                 return t->server->port;
+
         return DNS_SERVER_FEATURE_LEVEL_IS_TLS(t->current_feature_level) ? 853 : 53;
 }
 
@@ -563,6 +629,7 @@ static int dns_transaction_emit_tcp(DnsTransaction *t) {
         int r;
 
         assert(t);
+        assert(t->sent);
 
         dns_transaction_close_connection(t);
 
@@ -573,12 +640,17 @@ static int dns_transaction_emit_tcp(DnsTransaction *t) {
                 if (r < 0)
                         return r;
 
-                if (!dns_server_dnssec_supported(t->server) && dns_type_is_dnssec(t->key->type))
-                        return -EOPNOTSUPP;
+                if (manager_server_is_stub(t->scope->manager, t->server))
+                        return -ELOOP;
 
-                r = dns_server_adjust_opt(t->server, t->sent, t->current_feature_level);
-                if (r < 0)
-                        return r;
+                if (!t->bypass) {
+                        if (!dns_server_dnssec_supported(t->server) && dns_type_is_dnssec(dns_transaction_key(t)->type))
+                                return -EOPNOTSUPP;
+
+                        r = dns_server_adjust_opt(t->server, t->sent, t->current_feature_level);
+                        if (r < 0)
+                                return r;
+                }
 
                 if (t->server->stream && (DNS_SERVER_FEATURE_LEVEL_IS_TLS(t->current_feature_level) == t->server->stream->encrypted))
                         s = dns_stream_ref(t->server->stream);
@@ -600,7 +672,7 @@ static int dns_transaction_emit_tcp(DnsTransaction *t) {
                          * the IP address, in case this is a reverse
                          * PTR lookup */
 
-                        r = dns_name_address(dns_resource_key_name(t->key), &family, &address);
+                        r = dns_name_address(dns_resource_key_name(dns_transaction_key(t)), &family, &address);
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -682,6 +754,10 @@ static void dns_transaction_cache_answer(DnsTransaction *t) {
         if (t->scope->manager->enable_cache == DNS_CACHE_MODE_NO)
                 return;
 
+        /* If validation is turned off for this transaction, but DNSSEC is on, then let's not cache this */
+        if (FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE) && t->scope->dnssec_mode != DNSSEC_NO)
+                return;
+
         /* Packet from localhost? */
         if (!t->scope->manager->cache_from_localhost &&
             in_addr_is_localhost(t->received->family, &t->received->sender) != 0)
@@ -689,12 +765,16 @@ static void dns_transaction_cache_answer(DnsTransaction *t) {
 
         dns_cache_put(&t->scope->cache,
                       t->scope->manager->enable_cache,
-                      t->key,
+                      dns_transaction_key(t),
                       t->answer_rcode,
                       t->answer,
+                      DNS_PACKET_CD(t->received) ? t->received : NULL, /* only cache full packets with CD on,
+                                                                        * since our usecase for caching them
+                                                                        * is "bypass" mode which is only
+                                                                        * enabled for CD packets. */
                       t->answer_authenticated,
+                      t->answer_dnssec_result,
                       t->answer_nsec_ttl,
-                      0,
                       t->received->family,
                       &t->received->sender);
 }
@@ -848,11 +928,11 @@ static int dns_transaction_has_positive_answer(DnsTransaction *t, DnsAnswerFlags
         /* Checks whether the answer is positive, i.e. either a direct
          * answer to the question, or a CNAME/DNAME for it */
 
-        r = dns_answer_match_key(t->answer, t->key, flags);
+        r = dns_answer_match_key(t->answer, dns_transaction_key(t), flags);
         if (r != 0)
                 return r;
 
-        r = dns_answer_find_cname_or_dname(t->answer, t->key, NULL, flags);
+        r = dns_answer_find_cname_or_dname(t->answer, dns_transaction_key(t), NULL, flags);
         if (r != 0)
                 return r;
 
@@ -977,7 +1057,8 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
         case DNS_PROTOCOL_DNS:
                 assert(t->server);
 
-                if (IN_SET(DNS_PACKET_RCODE(p), DNS_RCODE_FORMERR, DNS_RCODE_SERVFAIL, DNS_RCODE_NOTIMP)) {
+                if (!t->bypass &&
+                    IN_SET(DNS_PACKET_RCODE(p), DNS_RCODE_FORMERR, DNS_RCODE_SERVFAIL, DNS_RCODE_NOTIMP)) {
 
                         /* Request failed, immediately try again with reduced features */
 
@@ -1112,7 +1193,7 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
          * to the request. For mDNS this check doesn't make sense, because the section 6 of RFC6762 states
          * that "Multicast DNS responses MUST NOT contain any questions in the Question Section". */
         if (t->scope->protocol != DNS_PROTOCOL_MDNS) {
-                r = dns_packet_is_reply_for(p, t->key);
+                r = dns_packet_is_reply_for(p, dns_transaction_key(t));
                 if (r < 0)
                         goto fail;
                 if (r == 0) {
@@ -1121,7 +1202,10 @@ void dns_transaction_process_reply(DnsTransaction *t, DnsPacket *p) {
                 }
         }
 
-        /* Install the answer as answer to the transaction */
+        /* Install the answer as answer to the transaction. We ref the answer twice here: the main `answer`
+         * field is later replaced by the DNSSEC validated subset. The 'answer_auxiliary' field carries the
+         * original complete record set, including RRSIG and friends. We use this when passing data to
+         * clients that ask for DNSSEC metadata. */
         dns_answer_unref(t->answer);
         t->answer = dns_answer_ref(p->answer);
         t->answer_rcode = DNS_PACKET_RCODE(p);
@@ -1223,10 +1307,13 @@ static int dns_transaction_emit_udp(DnsTransaction *t) {
                 if (r < 0)
                         return r;
 
+                if (manager_server_is_stub(t->scope->manager, t->server))
+                        return -ELOOP;
+
                 if (t->current_feature_level < DNS_SERVER_FEATURE_LEVEL_UDP || DNS_SERVER_FEATURE_LEVEL_IS_TLS(t->current_feature_level))
                         return -EAGAIN; /* Sorry, can't do UDP, try TCP! */
 
-                if (!dns_server_dnssec_supported(t->server) && dns_type_is_dnssec(t->key->type))
+                if (!t->bypass && !dns_server_dnssec_supported(t->server) && dns_type_is_dnssec(dns_transaction_key(t)->type))
                         return -EOPNOTSUPP;
 
                 if (r > 0 || t->dns_udp_fd < 0) { /* Server changed, or no connection yet. */
@@ -1248,9 +1335,11 @@ static int dns_transaction_emit_udp(DnsTransaction *t) {
                         t->dns_udp_fd = fd;
                 }
 
-                r = dns_server_adjust_opt(t->server, t->sent, t->current_feature_level);
-                if (r < 0)
-                        return r;
+                if (!t->bypass) {
+                        r = dns_server_adjust_opt(t->server, t->sent, t->current_feature_level);
+                        if (r < 0)
+                                return r;
+                }
         } else
                 dns_transaction_close_connection(t);
 
@@ -1328,6 +1417,30 @@ static usec_t transaction_get_resend_timeout(DnsTransaction *t) {
         }
 }
 
+static void dns_transaction_randomize_answer(DnsTransaction *t) {
+        int r;
+
+        assert(t);
+
+        /* Randomizes the order of the answer array. This is done for all cached responses, so that we return
+         * a different order each time. We do this only for DNS traffic, in order to do some minimal, crappy
+         * load balancing. We don't do this for LLMNR or mDNS, since the order (preferring link-local
+         * addresses, and such like) might have meaning there, and load balancing is pointless. */
+
+        if (t->scope->protocol != DNS_PROTOCOL_DNS)
+                return;
+
+        /* No point in randomizing, if there's just one RR */
+        if (dns_answer_size(t->answer) <= 1)
+                return;
+
+        r = dns_answer_reserve_or_clone(&t->answer, 0);
+        if (r < 0) /* If this fails, just don't randomize, this is non-essential stuff after all */
+                return (void) log_debug_errno(r, "Failed to clone answer record, not randomizing RR order of answer: %m");
+
+        dns_answer_randomize(t->answer);
+}
+
 static int dns_transaction_prepare(DnsTransaction *t, usec_t ts) {
         int r;
 
@@ -1372,8 +1485,9 @@ static int dns_transaction_prepare(DnsTransaction *t, usec_t ts) {
         dns_transaction_flush_dnssec_transactions(t);
 
         /* Check the trust anchor. Do so only on classic DNS, since DNSSEC does not apply otherwise. */
-        if (t->scope->protocol == DNS_PROTOCOL_DNS) {
-                r = dns_trust_anchor_lookup_positive(&t->scope->manager->trust_anchor, t->key, &t->answer);
+        if (t->scope->protocol == DNS_PROTOCOL_DNS &&
+            !FLAGS_SET(t->query_flags, SD_RESOLVED_NO_TRUST_ANCHOR)) {
+                r = dns_trust_anchor_lookup_positive(&t->scope->manager->trust_anchor, dns_transaction_key(t), &t->answer);
                 if (r < 0)
                         return r;
                 if (r > 0) {
@@ -1384,46 +1498,36 @@ static int dns_transaction_prepare(DnsTransaction *t, usec_t ts) {
                         return 0;
                 }
 
-                if (dns_name_is_root(dns_resource_key_name(t->key)) &&
-                    t->key->type == DNS_TYPE_DS) {
+                if (dns_name_is_root(dns_resource_key_name(dns_transaction_key(t))) &&
+                    dns_transaction_key(t)->type == DNS_TYPE_DS) {
 
-                        /* Hmm, this is a request for the root DS? A
-                         * DS RR doesn't exist in the root zone, and
-                         * if our trust anchor didn't know it either,
-                         * this means we cannot do any DNSSEC logic
-                         * anymore. */
+                        /* Hmm, this is a request for the root DS? A DS RR doesn't exist in the root zone,
+                         * and if our trust anchor didn't know it either, this means we cannot do any DNSSEC
+                         * logic anymore. */
 
                         if (t->scope->dnssec_mode == DNSSEC_ALLOW_DOWNGRADE) {
-                                /* We are in downgrade mode. In this
-                                 * case, synthesize an unsigned empty
-                                 * response, so that the any lookup
-                                 * depending on this one can continue
-                                 * assuming there was no DS, and hence
-                                 * the root zone was unsigned. */
+                                /* We are in downgrade mode. In this case, synthesize an unsigned empty
+                                 * response, so that the any lookup depending on this one can continue
+                                 * assuming there was no DS, and hence the root zone was unsigned. */
 
                                 t->answer_rcode = DNS_RCODE_SUCCESS;
                                 t->answer_source = DNS_TRANSACTION_TRUST_ANCHOR;
                                 t->answer_authenticated = false;
                                 dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS);
                         } else
-                                /* If we are not in downgrade mode,
-                                 * then fail the lookup, because we
-                                 * cannot reasonably answer it. There
-                                 * might be DS RRs, but we don't know
-                                 * them, and the DNS server won't tell
-                                 * them to us (and even if it would,
-                                 * we couldn't validate and trust them. */
+                                /* If we are not in downgrade mode, then fail the lookup, because we cannot
+                                 * reasonably answer it. There might be DS RRs, but we don't know them, and
+                                 * the DNS server won't tell them to us (and even if it would, we couldn't
+                                 * validate and trust them. */
                                 dns_transaction_complete(t, DNS_TRANSACTION_NO_TRUST_ANCHOR);
 
                         return 0;
                 }
         }
 
-        /* Check the zone, but only if this transaction is not used
-         * for probing or verifying a zone item. */
-        if (set_isempty(t->notify_zone_items)) {
-
-                r = dns_zone_lookup(&t->scope->zone, t->key, dns_scope_ifindex(t->scope), &t->answer, NULL, NULL);
+        /* Check the zone. */
+        if (!FLAGS_SET(t->query_flags, SD_RESOLVED_NO_ZONE)) {
+                r = dns_zone_lookup(&t->scope->zone, dns_transaction_key(t), dns_scope_ifindex(t->scope), &t->answer, NULL, NULL);
                 if (r < 0)
                         return r;
                 if (r > 0) {
@@ -1435,31 +1539,50 @@ static int dns_transaction_prepare(DnsTransaction *t, usec_t ts) {
                 }
         }
 
-        /* Check the cache, but only if this transaction is not used
-         * for probing or verifying a zone item. */
-        if (set_isempty(t->notify_zone_items)) {
+        /* Check the cache. */
+        if (!FLAGS_SET(t->query_flags, SD_RESOLVED_NO_CACHE)) {
 
-                /* Before trying the cache, let's make sure we figured out a
-                 * server to use. Should this cause a change of server this
-                 * might flush the cache. */
+                /* Before trying the cache, let's make sure we figured out a server to use. Should this cause
+                 * a change of server this might flush the cache. */
                 (void) dns_scope_get_dns_server(t->scope);
 
                 /* Let's then prune all outdated entries */
                 dns_cache_prune(&t->scope->cache);
 
-                r = dns_cache_lookup(&t->scope->cache, t->key, t->clamp_ttl, &t->answer_rcode, &t->answer, &t->answer_authenticated);
+                r = dns_cache_lookup(
+                                &t->scope->cache,
+                                dns_transaction_key(t),
+                                t->query_flags,
+                                &t->answer_rcode,
+                                &t->answer,
+                                &t->received,
+                                &t->answer_authenticated,
+                                &t->answer_dnssec_result);
                 if (r < 0)
                         return r;
                 if (r > 0) {
-                        t->answer_source = DNS_TRANSACTION_CACHE;
-                        if (t->answer_rcode == DNS_RCODE_SUCCESS)
-                                dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS);
-                        else
-                                dns_transaction_complete(t, DNS_TRANSACTION_RCODE_FAILURE);
-                        return 0;
+                        dns_transaction_randomize_answer(t);
+
+                        if (t->bypass && t->scope->protocol == DNS_PROTOCOL_DNS && !t->received)
+                                /* When bypass mode is on, do not use cached data unless it came with a full
+                                 * packet. */
+                                dns_transaction_reset_answer(t);
+                        else {
+                                t->answer_source = DNS_TRANSACTION_CACHE;
+                                if (t->answer_rcode == DNS_RCODE_SUCCESS)
+                                        dns_transaction_complete(t, DNS_TRANSACTION_SUCCESS);
+                                else
+                                        dns_transaction_complete(t, DNS_TRANSACTION_RCODE_FAILURE);
+                                return 0;
+                        }
                 }
         }
 
+        if (FLAGS_SET(t->query_flags, SD_RESOLVED_NO_NETWORK)) {
+                dns_transaction_complete(t, DNS_TRANSACTION_NO_SOURCE);
+                return 0;
+        }
+
         return 1;
 }
 
@@ -1484,17 +1607,17 @@ static int dns_transaction_make_packet_mdns(DnsTransaction *t) {
         if (r < 0)
                 return r;
 
-        r = dns_packet_append_key(p, t->key, 0, NULL);
+        r = dns_packet_append_key(p, dns_transaction_key(t), 0, NULL);
         if (r < 0)
                 return r;
 
         qdcount = 1;
 
-        if (dns_key_is_shared(t->key))
+        if (dns_key_is_shared(dns_transaction_key(t)))
                 add_known_answers = true;
 
-        if (t->key->type == DNS_TYPE_ANY) {
-                r = set_ensure_put(&keys, &dns_resource_key_hash_ops, t->key);
+        if (dns_transaction_key(t)->type == DNS_TYPE_ANY) {
+                r = set_ensure_put(&keys, &dns_resource_key_hash_ops, dns_transaction_key(t));
                 if (r < 0)
                         return r;
         }
@@ -1522,7 +1645,7 @@ static int dns_transaction_make_packet_mdns(DnsTransaction *t) {
                 if (qdcount >= UINT16_MAX)
                         break;
 
-                r = dns_packet_append_key(p, other->key, 0, NULL);
+                r = dns_packet_append_key(p, dns_transaction_key(other), 0, NULL);
 
                 /*
                  * If we can't stuff more questions into the packet, just give up.
@@ -1556,11 +1679,11 @@ static int dns_transaction_make_packet_mdns(DnsTransaction *t) {
 
                 qdcount++;
 
-                if (dns_key_is_shared(other->key))
+                if (dns_key_is_shared(dns_transaction_key(other)))
                         add_known_answers = true;
 
-                if (other->key->type == DNS_TYPE_ANY) {
-                        r = set_ensure_put(&keys, &dns_resource_key_hash_ops, other->key);
+                if (dns_transaction_key(other)->type == DNS_TYPE_ANY) {
+                        r = set_ensure_put(&keys, &dns_resource_key_hash_ops, dns_transaction_key(other));
                         if (r < 0)
                                 return r;
                 }
@@ -1583,11 +1706,9 @@ static int dns_transaction_make_packet_mdns(DnsTransaction *t) {
                 if (r < 0)
                         return r;
 
-                r = dns_packet_append_answer(p, answer);
+                r = dns_packet_append_answer(p, answer, &nscount);
                 if (r < 0)
                         return r;
-
-                nscount += dns_answer_size(answer);
         }
         DNS_PACKET_HEADER(p)->nscount = htobe16(nscount);
 
@@ -1608,19 +1729,31 @@ static int dns_transaction_make_packet(DnsTransaction *t) {
         if (t->sent)
                 return 0;
 
-        r = dns_packet_new_query(&p, t->scope->protocol, 0, t->scope->dnssec_mode != DNSSEC_NO);
-        if (r < 0)
-                return r;
+        if (t->bypass && t->bypass->protocol == t->scope->protocol) {
+                /* If bypass logic is enabled and the protocol if the original packet and our scope match,
+                 * take the original packet, copy it, and patch in our new ID */
+                r = dns_packet_dup(&p, t->bypass);
+                if (r < 0)
+                        return r;
+        } else {
+                r = dns_packet_new_query(
+                                &p, t->scope->protocol,
+                                /* min_alloc_dsize = */ 0,
+                                /* dnssec_cd = */ !FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE) &&
+                                                  t->scope->dnssec_mode != DNSSEC_NO);
+                if (r < 0)
+                        return r;
 
-        r = dns_packet_append_key(p, t->key, 0, NULL);
-        if (r < 0)
-                return r;
+                r = dns_packet_append_key(p, dns_transaction_key(t), 0, NULL);
+                if (r < 0)
+                        return r;
+
+                DNS_PACKET_HEADER(p)->qdcount = htobe16(1);
+        }
 
-        DNS_PACKET_HEADER(p)->qdcount = htobe16(1);
         DNS_PACKET_HEADER(p)->id = t->id;
 
         t->sent = TAKE_PTR(p);
-
         return 0;
 }
 
@@ -1641,12 +1774,14 @@ int dns_transaction_go(DnsTransaction *t) {
         if (r <= 0)
                 return r;
 
-        log_debug("Transaction %" PRIu16 " for <%s> scope %s on %s/%s.",
+        log_debug("%s transaction %" PRIu16 " for <%s> scope %s on %s/%s (validate=%s).",
+                  t->bypass ? "Bypass" : "Regular",
                   t->id,
-                  dns_resource_key_to_string(t->key, key_str, sizeof key_str),
+                  dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str),
                   dns_protocol_to_string(t->scope->protocol),
                   t->scope->link ? t->scope->link->ifname : "*",
-                  af_to_name_short(t->scope->family));
+                  af_to_name_short(t->scope->family),
+                  yes_no(!FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE)));
 
         if (!t->initial_jitter_scheduled &&
             IN_SET(t->scope->protocol, DNS_PROTOCOL_LLMNR, DNS_PROTOCOL_MDNS)) {
@@ -1700,8 +1835,8 @@ int dns_transaction_go(DnsTransaction *t) {
                 return r;
 
         if (t->scope->protocol == DNS_PROTOCOL_LLMNR &&
-            (dns_name_endswith(dns_resource_key_name(t->key), "in-addr.arpa") > 0 ||
-             dns_name_endswith(dns_resource_key_name(t->key), "ip6.arpa") > 0)) {
+            (dns_name_endswith(dns_resource_key_name(dns_transaction_key(t)), "in-addr.arpa") > 0 ||
+             dns_name_endswith(dns_resource_key_name(dns_transaction_key(t)), "ip6.arpa") > 0)) {
 
                 /* RFC 4795, Section 2.4. says reverse lookups shall
                  * always be made via TCP on LLMNR */
@@ -1717,7 +1852,23 @@ int dns_transaction_go(DnsTransaction *t) {
                 if (IN_SET(r, -EMSGSIZE, -EAGAIN))
                         r = dns_transaction_emit_tcp(t);
         }
+        if (r == -ELOOP) {
+                if (t->scope->protocol != DNS_PROTOCOL_DNS)
+                        return r;
+
+                /* One of our own stub listeners */
+                log_debug_errno(r, "Detected that specified DNS server is our own extra listener, switching DNS servers.");
+
+                dns_scope_next_dns_server(t->scope, t->server);
+
+                if (dns_scope_get_dns_server(t->scope) == t->server) {
+                        log_debug_errno(r, "Still pointing to extra listener after switching DNS servers, refusing operation.");
+                        dns_transaction_complete(t, DNS_TRANSACTION_STUB_LOOP);
+                        return 0;
+                }
 
+                return dns_transaction_go(t);
+        }
         if (r == -ESRCH) {
                 /* No servers to send this to? */
                 dns_transaction_complete(t, DNS_TRANSACTION_NO_SERVERS);
@@ -1739,7 +1890,7 @@ int dns_transaction_go(DnsTransaction *t) {
                         return r;
 
                 /* Couldn't send? Try immediately again, with a new server */
-                dns_scope_next_dns_server(t->scope);
+                dns_scope_next_dns_server(t->scope, t->server);
 
                 return dns_transaction_go(t);
         }
@@ -1792,9 +1943,9 @@ static int dns_transaction_add_dnssec_transaction(DnsTransaction *t, DnsResource
         assert(ret);
         assert(key);
 
-        aux = dns_scope_find_transaction(t->scope, key, true);
+        aux = dns_scope_find_transaction(t->scope, key, t->query_flags);
         if (!aux) {
-                r = dns_transaction_new(&aux, t->scope, key);
+                r = dns_transaction_new(&aux, t->scope, key, NULL, t->query_flags);
                 if (r < 0)
                         return r;
         } else {
@@ -1812,9 +1963,9 @@ static int dns_transaction_add_dnssec_transaction(DnsTransaction *t, DnsResource
                         return log_debug_errno(SYNTHETIC_ERRNO(ELOOP),
                                                "Potential cyclic dependency, refusing to add transaction %" PRIu16 " (%s) as dependency for %" PRIu16 " (%s).",
                                                aux->id,
-                                               dns_resource_key_to_string(t->key, s, sizeof s),
+                                               dns_resource_key_to_string(dns_transaction_key(t), s, sizeof s),
                                                t->id,
-                                               dns_resource_key_to_string(aux->key, saux, sizeof saux));
+                                               dns_resource_key_to_string(dns_transaction_key(aux), saux, sizeof saux));
                 }
         }
 
@@ -1907,7 +2058,7 @@ static int dns_transaction_has_unsigned_negative_answer(DnsTransaction *t) {
 
         /* Is this key explicitly listed as a negative trust anchor?
          * If so, it's nothing we need to care about */
-        r = dns_transaction_negative_trust_anchor_lookup(t, dns_resource_key_name(t->key));
+        r = dns_transaction_negative_trust_anchor_lookup(t, dns_resource_key_name(dns_transaction_key(t)));
         if (r < 0)
                 return r;
         if (r > 0)
@@ -1936,11 +2087,11 @@ static int dns_transaction_is_primary_response(DnsTransaction *t, DnsResourceRec
          * i.e. either matches the question precisely or is a
          * CNAME/DNAME for it. */
 
-        r = dns_resource_key_match_rr(t->key, rr, NULL);
+        r = dns_resource_key_match_rr(dns_transaction_key(t), rr, NULL);
         if (r != 0)
                 return r;
 
-        return dns_resource_key_match_cname_or_dname(t->key, rr->key, NULL);
+        return dns_resource_key_match_cname_or_dname(dns_transaction_key(t), rr->key, NULL);
 }
 
 static bool dns_transaction_dnssec_supported(DnsTransaction *t) {
@@ -2004,7 +2155,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
          * - For other queries with no matching response RRs, and no NSEC/NSEC3, the SOA RR
          */
 
-        if (t->scope->dnssec_mode == DNSSEC_NO)
+        if (FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE) || t->scope->dnssec_mode == DNSSEC_NO)
                 return 0;
         if (t->answer_source != DNS_TRANSACTION_NETWORK)
                 return 0; /* We only need to validate stuff from the network */
@@ -2052,7 +2203,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                          * in another transaction whose additional RRs
                          * point back to the original transaction, and
                          * we deadlock. */
-                        r = dns_name_endswith(dns_resource_key_name(t->key), rr->rrsig.signer);
+                        r = dns_name_endswith(dns_resource_key_name(dns_transaction_key(t)), rr->rrsig.signer);
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -2081,7 +2232,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                          * up in request loops, and want to keep
                          * additional traffic down. */
 
-                        r = dns_name_endswith(dns_resource_key_name(t->key), dns_resource_key_name(rr->key));
+                        r = dns_name_endswith(dns_resource_key_name(dns_transaction_key(t)), dns_resource_key_name(rr->key));
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -2111,7 +2262,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                          * this RR matches our original question,
                          * however. */
 
-                        r = dns_resource_key_match_rr(t->key, rr, NULL);
+                        r = dns_resource_key_match_rr(dns_transaction_key(t), rr, NULL);
                         if (r < 0)
                                 return r;
                         if (r == 0) {
@@ -2119,7 +2270,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                                  * a negative reply, and we need the SOA RR's TTL in order to cache a negative entry?
                                  * If so, we need to validate it, too. */
 
-                                r = dns_answer_match_key(t->answer, t->key, NULL);
+                                r = dns_answer_match_key(t->answer, dns_transaction_key(t), NULL);
                                 if (r < 0)
                                         return r;
                                 if (r > 0) /* positive reply, we won't need the SOA and hence don't need to validate
@@ -2128,7 +2279,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
 
                                 /* Only bother with this if the SOA/NS RR we are looking at is actually a parent of
                                  * what we are looking for, otherwise there's no value in it for us. */
-                                r = dns_name_endswith(dns_resource_key_name(t->key), dns_resource_key_name(rr->key));
+                                r = dns_name_endswith(dns_resource_key_name(dns_transaction_key(t)), dns_resource_key_name(rr->key));
                                 if (r < 0)
                                         return r;
                                 if (r == 0)
@@ -2254,7 +2405,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                 const char *name;
                 uint16_t type = 0;
 
-                name = dns_resource_key_name(t->key);
+                name = dns_resource_key_name(dns_transaction_key(t));
 
                 /* If this was a SOA or NS request, then check if there's a DS RR for the same domain. Note that this
                  * could also be used as indication that we are not at a zone apex, but in real world setups there are
@@ -2263,16 +2414,16 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                  * is signed, hence ask the parent SOA in that case. If this was any other RR then ask for the SOA RR,
                  * to see if that is signed. */
 
-                if (t->key->type == DNS_TYPE_DS) {
+                if (dns_transaction_key(t)->type == DNS_TYPE_DS) {
                         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(t->key));
+                                          name, t->id, dns_resource_key_name(dns_transaction_key(t)));
                         } else
                                 name = NULL;
 
-                } else if (IN_SET(t->key->type, DNS_TYPE_SOA, DNS_TYPE_NS)) {
+                } 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).",
@@ -2287,7 +2438,7 @@ int dns_transaction_request_dnssec_keys(DnsTransaction *t) {
                 if (name) {
                         _cleanup_(dns_resource_key_unrefp) DnsResourceKey *soa = NULL;
 
-                        soa = dns_resource_key_new(t->key->class, type, name);
+                        soa = dns_resource_key_new(dns_transaction_key(t)->class, type, name);
                         if (!soa)
                                 return -ENOMEM;
 
@@ -2313,8 +2464,8 @@ void dns_transaction_notify(DnsTransaction *t, DnsTransaction *source) {
 }
 
 static int dns_transaction_validate_dnskey_by_ds(DnsTransaction *t) {
-        DnsResourceRecord *rr;
-        int ifindex, r;
+        DnsAnswerItem *item;
+        int r;
 
         assert(t);
 
@@ -2322,16 +2473,16 @@ static int dns_transaction_validate_dnskey_by_ds(DnsTransaction *t) {
          * RRs from the list of validated keys to the list of
          * validated keys. */
 
-        DNS_ANSWER_FOREACH_IFINDEX(rr, ifindex, t->answer) {
+        DNS_ANSWER_FOREACH_ITEM(item, t->answer) {
 
-                r = dnssec_verify_dnskey_by_ds_search(rr, t->validated_keys);
+                r = dnssec_verify_dnskey_by_ds_search(item->rr, t->validated_keys);
                 if (r < 0)
                         return r;
                 if (r == 0)
                         continue;
 
                 /* If so, the DNSKEY is validated too. */
-                r = dns_answer_add_extend(&t->validated_keys, rr, ifindex, DNS_ANSWER_AUTHENTICATED);
+                r = dns_answer_add_extend(&t->validated_keys, item->rr, item->ifindex, item->flags|DNS_ANSWER_AUTHENTICATED, item->rrsig);
                 if (r < 0)
                         return r;
         }
@@ -2374,12 +2525,12 @@ static int dns_transaction_requires_rrsig(DnsTransaction *t, DnsResourceRecord *
 
                 SET_FOREACH(dt, t->dnssec_transactions) {
 
-                        if (dt->key->class != rr->key->class)
+                        if (dns_transaction_key(dt)->class != rr->key->class)
                                 continue;
-                        if (dt->key->type != DNS_TYPE_DS)
+                        if (dns_transaction_key(dt)->type != DNS_TYPE_DS)
                                 continue;
 
-                        r = dns_name_equal(dns_resource_key_name(dt->key), dns_resource_key_name(rr->key));
+                        r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), dns_resource_key_name(rr->key));
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -2392,7 +2543,7 @@ static int dns_transaction_requires_rrsig(DnsTransaction *t, DnsResourceRecord *
                         if (!dt->answer_authenticated)
                                 return false;
 
-                        return dns_answer_match_key(dt->answer, dt->key, NULL);
+                        return dns_answer_match_key(dt->answer, dns_transaction_key(dt), NULL);
                 }
 
                 /* We found nothing that proves this is safe to leave
@@ -2415,9 +2566,9 @@ static int dns_transaction_requires_rrsig(DnsTransaction *t, DnsResourceRecord *
 
                 SET_FOREACH(dt, t->dnssec_transactions) {
 
-                        if (dt->key->class != rr->key->class)
+                        if (dns_transaction_key(dt)->class != rr->key->class)
                                 continue;
-                        if (dt->key->type != DNS_TYPE_SOA)
+                        if (dns_transaction_key(dt)->type != DNS_TYPE_SOA)
                                 continue;
 
                         if (!parent) {
@@ -2435,7 +2586,7 @@ static int dns_transaction_requires_rrsig(DnsTransaction *t, DnsResourceRecord *
                                 }
                         }
 
-                        r = dns_name_equal(dns_resource_key_name(dt->key), parent);
+                        r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), parent);
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -2454,12 +2605,12 @@ static int dns_transaction_requires_rrsig(DnsTransaction *t, DnsResourceRecord *
 
                 SET_FOREACH(dt, t->dnssec_transactions) {
 
-                        if (dt->key->class != rr->key->class)
+                        if (dns_transaction_key(dt)->class != rr->key->class)
                                 continue;
-                        if (dt->key->type != DNS_TYPE_SOA)
+                        if (dns_transaction_key(dt)->type != DNS_TYPE_SOA)
                                 continue;
 
-                        r = dns_name_equal(dns_resource_key_name(dt->key), dns_resource_key_name(rr->key));
+                        r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), dns_resource_key_name(rr->key));
                         if (r < 0)
                                 return r;
                         if (r == 0)
@@ -2517,10 +2668,10 @@ static int dns_transaction_in_private_tld(DnsTransaction *t, const DnsResourceKe
 
         SET_FOREACH(dt, t->dnssec_transactions) {
 
-                if (dt->key->class != key->class)
+                if (dns_transaction_key(dt)->class != key->class)
                         continue;
 
-                r = dns_name_equal(dns_resource_key_name(dt->key), tld);
+                r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), tld);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -2551,16 +2702,16 @@ static int dns_transaction_requires_nsec(DnsTransaction *t) {
         if (t->scope->dnssec_mode == DNSSEC_NO)
                 return false;
 
-        if (dns_type_is_pseudo(t->key->type))
+        if (dns_type_is_pseudo(dns_transaction_key(t)->type))
                 return -EINVAL;
 
-        r = dns_transaction_negative_trust_anchor_lookup(t, dns_resource_key_name(t->key));
+        r = dns_transaction_negative_trust_anchor_lookup(t, dns_resource_key_name(dns_transaction_key(t)));
         if (r < 0)
                 return r;
         if (r > 0)
                 return false;
 
-        r = dns_transaction_in_private_tld(t, t->key);
+        r = dns_transaction_in_private_tld(t, dns_transaction_key(t));
         if (r < 0)
                 return r;
         if (r > 0) {
@@ -2569,13 +2720,13 @@ static int dns_transaction_requires_nsec(DnsTransaction *t) {
                  * that fact that we didn't get any NSEC RRs. */
 
                 log_info("Detected a negative query %s in a private DNS zone, permitting unsigned response.",
-                         dns_resource_key_to_string(t->key, key_str, sizeof key_str));
+                         dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str));
                 return false;
         }
 
-        name = dns_resource_key_name(t->key);
+        name = dns_resource_key_name(dns_transaction_key(t));
 
-        if (t->key->type == DNS_TYPE_DS) {
+        if (dns_transaction_key(t)->type == DNS_TYPE_DS) {
 
                 /* We got a negative reply for this DS lookup? DS RRs are signed when their parent zone is signed,
                  * hence check the parent SOA in this case. */
@@ -2588,7 +2739,7 @@ static int dns_transaction_requires_nsec(DnsTransaction *t) {
 
                 type = DNS_TYPE_SOA;
 
-        } else if (IN_SET(t->key->type, DNS_TYPE_SOA, DNS_TYPE_NS))
+        } else if (IN_SET(dns_transaction_key(t)->type, DNS_TYPE_SOA, DNS_TYPE_NS))
                 /* We got a negative reply for this SOA/NS lookup? If so, check if there's a DS RR for this */
                 type = DNS_TYPE_DS;
         else
@@ -2600,12 +2751,12 @@ static int dns_transaction_requires_nsec(DnsTransaction *t) {
 
         SET_FOREACH(dt, t->dnssec_transactions) {
 
-                if (dt->key->class != t->key->class)
+                if (dns_transaction_key(dt)->class != dns_transaction_key(t)->class)
                         continue;
-                if (dt->key->type != type)
+                if (dns_transaction_key(dt)->type != type)
                         continue;
 
-                r = dns_name_equal(dns_resource_key_name(dt->key), name);
+                r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), name);
                 if (r < 0)
                         return r;
                 if (r == 0)
@@ -2644,12 +2795,12 @@ static int dns_transaction_dnskey_authenticated(DnsTransaction *t, DnsResourceRe
 
                 SET_FOREACH(dt, t->dnssec_transactions) {
 
-                        if (dt->key->class != rr->key->class)
+                        if (dns_transaction_key(dt)->class != rr->key->class)
                                 continue;
 
-                        if (dt->key->type == DNS_TYPE_DNSKEY) {
+                        if (dns_transaction_key(dt)->type == DNS_TYPE_DNSKEY) {
 
-                                r = dns_name_equal(dns_resource_key_name(dt->key), rrsig->rrsig.signer);
+                                r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), rrsig->rrsig.signer);
                                 if (r < 0)
                                         return r;
                                 if (r == 0)
@@ -2664,9 +2815,9 @@ static int dns_transaction_dnskey_authenticated(DnsTransaction *t, DnsResourceRe
 
                                 found = true;
 
-                        } else if (dt->key->type == DNS_TYPE_DS) {
+                        } else if (dns_transaction_key(dt)->type == DNS_TYPE_DS) {
 
-                                r = dns_name_equal(dns_resource_key_name(dt->key), rrsig->rrsig.signer);
+                                r = dns_name_equal(dns_resource_key_name(dns_transaction_key(dt)), rrsig->rrsig.signer);
                                 if (r < 0)
                                         return r;
                                 if (r == 0)
@@ -2680,7 +2831,7 @@ static int dns_transaction_dnskey_authenticated(DnsTransaction *t, DnsResourceRe
                                 if (!dt->answer_authenticated)
                                         return false;
 
-                                return dns_answer_match_key(dt->answer, dt->key, NULL);
+                                return dns_answer_match_key(dt->answer, dns_transaction_key(dt), NULL);
                         }
                 }
         }
@@ -2822,19 +2973,26 @@ static int dnssec_validate_records(
                                 continue;
                 }
 
-                r = dnssec_verify_rrset_search(t->answer, rr->key, t->validated_keys, USEC_INFINITY, &result, &rrsig);
+                r = dnssec_verify_rrset_search(
+                                t->answer,
+                                rr->key,
+                                t->validated_keys,
+                                USEC_INFINITY,
+                                &result,
+                                &rrsig);
                 if (r < 0)
                         return r;
 
                 log_debug("Looking at %s: %s", strna(dns_resource_record_to_string(rr)), dnssec_result_to_string(result));
 
                 if (result == DNSSEC_VALIDATED) {
+                        assert(rrsig);
 
                         if (rr->key->type == DNS_TYPE_DNSKEY) {
                                 /* If we just validated a DNSKEY RRset, then let's add these keys to
                                  * the set of validated keys for this transaction. */
 
-                                r = dns_answer_copy_by_key(&t->validated_keys, t->answer, rr->key, DNS_ANSWER_AUTHENTICATED);
+                                r = dns_answer_copy_by_key(&t->validated_keys, t->answer, rr->key, DNS_ANSWER_AUTHENTICATED, rrsig);
                                 if (r < 0)
                                         return r;
 
@@ -2845,10 +3003,9 @@ static int dnssec_validate_records(
                                         return r;
                         }
 
-                        /* Add the validated RRset to the new list of validated
-                         * RRsets, and remove it from the unvalidated RRsets.
-                         * We mark the RRset as authenticated and cacheable. */
-                        r = dns_answer_move_by_key(validated, &t->answer, rr->key, DNS_ANSWER_AUTHENTICATED|DNS_ANSWER_CACHEABLE);
+                        /* Add the validated RRset to the new list of validated RRsets, and remove it from
+                         * the unvalidated RRsets.  We mark the RRset as authenticated and cacheable. */
+                        r = dns_answer_move_by_key(validated, &t->answer, rr->key, DNS_ANSWER_AUTHENTICATED|DNS_ANSWER_CACHEABLE, rrsig);
                         if (r < 0)
                                 return r;
 
@@ -2868,6 +3025,8 @@ static int dnssec_validate_records(
                         bool authenticated = false;
                         const char *source;
 
+                        assert(rrsig);
+
                         /* This RRset validated, but as a wildcard. This means we need
                          * to prove via NSEC/NSEC3 that no matching non-wildcard RR exists. */
 
@@ -2886,8 +3045,12 @@ static int dnssec_validate_records(
                         if (r == 0)
                                 result = DNSSEC_INVALID;
                         else {
-                                r = dns_answer_move_by_key(validated, &t->answer, rr->key,
-                                                           authenticated ? (DNS_ANSWER_AUTHENTICATED|DNS_ANSWER_CACHEABLE) : 0);
+                                r = dns_answer_move_by_key(
+                                                validated,
+                                                &t->answer,
+                                                rr->key,
+                                                authenticated ? (DNS_ANSWER_AUTHENTICATED|DNS_ANSWER_CACHEABLE) : 0,
+                                                rrsig);
                                 if (r < 0)
                                         return r;
 
@@ -2905,7 +3068,12 @@ static int dnssec_validate_records(
                         if (r == 0) {
                                 /* Data does not require signing. In that case, just copy it over,
                                  * but remember that this is by no means authenticated. */
-                                r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0);
+                                r = dns_answer_move_by_key(
+                                                validated,
+                                                &t->answer,
+                                                rr->key,
+                                                0,
+                                                NULL);
                                 if (r < 0)
                                         return r;
 
@@ -2926,7 +3094,7 @@ static int dnssec_validate_records(
 
                                         /* Downgrading is OK? If so, just consider the information unsigned */
 
-                                        r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0);
+                                        r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0, NULL);
                                         if (r < 0)
                                                 return r;
 
@@ -2951,7 +3119,7 @@ static int dnssec_validate_records(
                                 log_info("Detected RRset %s is in a private DNS zone, permitting unsigned RRs.",
                                          dns_resource_key_to_string(rr->key, s, sizeof s));
 
-                                r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0);
+                                r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0, NULL);
                                 if (r < 0)
                                         return r;
 
@@ -2972,7 +3140,7 @@ static int dnssec_validate_records(
                                 /* The DNSKEY transaction was not authenticated, this means there's
                                  * no DS for this, which means it's OK if no keys are found for this signature. */
 
-                                r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0);
+                                r = dns_answer_move_by_key(validated, &t->answer, rr->key, 0, NULL);
                                 if (r < 0)
                                         return r;
 
@@ -3037,11 +3205,10 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
 
         assert(t);
 
-        /* We have now collected all DS and DNSKEY RRs in
-         * t->validated_keys, let's see which RRs we can now
+        /* We have now collected all DS and DNSKEY RRs in t->validated_keys, let's see which RRs we can now
          * authenticate with that. */
 
-        if (t->scope->dnssec_mode == DNSSEC_NO)
+        if (FLAGS_SET(t->query_flags, SD_RESOLVED_NO_VALIDATE) || t->scope->dnssec_mode == DNSSEC_NO)
                 return 0;
 
         /* Already validated */
@@ -3068,7 +3235,7 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
 
         log_debug("Validating response from transaction %" PRIu16 " (%s).",
                   t->id,
-                  dns_resource_key_to_string(t->key, key_str, sizeof key_str));
+                  dns_resource_key_to_string(dns_transaction_key(t), key_str, sizeof key_str));
 
         /* First, see if this response contains any revoked trust
          * anchors we care about */
@@ -3151,7 +3318,7 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
                 bool authenticated = false;
 
                 /* Bummer! Let's check NSEC/NSEC3 */
-                r = dnssec_nsec_test(t->answer, t->key, &nr, &authenticated, &t->answer_nsec_ttl);
+                r = dnssec_nsec_test(t->answer, dns_transaction_key(t), &nr, &authenticated, &t->answer_nsec_ttl);
                 if (r < 0)
                         return r;
 
@@ -3164,7 +3331,7 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
                         t->answer_rcode = DNS_RCODE_NXDOMAIN;
                         t->answer_authenticated = authenticated;
 
-                        manager_dnssec_verdict(t->scope->manager, authenticated ? DNSSEC_SECURE : DNSSEC_INSECURE, t->key);
+                        manager_dnssec_verdict(t->scope->manager, authenticated ? DNSSEC_SECURE : DNSSEC_INSECURE, dns_transaction_key(t));
                         break;
 
                 case DNSSEC_NSEC_NODATA:
@@ -3174,7 +3341,7 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
                         t->answer_rcode = DNS_RCODE_SUCCESS;
                         t->answer_authenticated = authenticated;
 
-                        manager_dnssec_verdict(t->scope->manager, authenticated ? DNSSEC_SECURE : DNSSEC_INSECURE, t->key);
+                        manager_dnssec_verdict(t->scope->manager, authenticated ? DNSSEC_SECURE : DNSSEC_INSECURE, dns_transaction_key(t));
                         break;
 
                 case DNSSEC_NSEC_OPTOUT:
@@ -3183,7 +3350,7 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
                         t->answer_dnssec_result = DNSSEC_UNSIGNED;
                         t->answer_authenticated = false;
 
-                        manager_dnssec_verdict(t->scope->manager, DNSSEC_INSECURE, t->key);
+                        manager_dnssec_verdict(t->scope->manager, DNSSEC_INSECURE, dns_transaction_key(t));
                         break;
 
                 case DNSSEC_NSEC_NO_RR:
@@ -3194,11 +3361,11 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
                                 return r;
                         if (r > 0) {
                                 t->answer_dnssec_result = DNSSEC_NO_SIGNATURE;
-                                manager_dnssec_verdict(t->scope->manager, DNSSEC_BOGUS, t->key);
+                                manager_dnssec_verdict(t->scope->manager, DNSSEC_BOGUS, dns_transaction_key(t));
                         } else {
                                 t->answer_dnssec_result = DNSSEC_UNSIGNED;
                                 t->answer_authenticated = false;
-                                manager_dnssec_verdict(t->scope->manager, DNSSEC_INSECURE, t->key);
+                                manager_dnssec_verdict(t->scope->manager, DNSSEC_INSECURE, dns_transaction_key(t));
                         }
 
                         break;
@@ -3206,14 +3373,14 @@ int dns_transaction_validate_dnssec(DnsTransaction *t) {
                 case DNSSEC_NSEC_UNSUPPORTED_ALGORITHM:
                         /* We don't know the NSEC3 algorithm used? */
                         t->answer_dnssec_result = DNSSEC_UNSUPPORTED_ALGORITHM;
-                        manager_dnssec_verdict(t->scope->manager, DNSSEC_INDETERMINATE, t->key);
+                        manager_dnssec_verdict(t->scope->manager, DNSSEC_INDETERMINATE, dns_transaction_key(t));
                         break;
 
                 case DNSSEC_NSEC_FOUND:
                 case DNSSEC_NSEC_CNAME:
                         /* NSEC says it needs to be there, but we couldn't find it? Bummer! */
                         t->answer_dnssec_result = DNSSEC_NSEC_MISMATCH;
-                        manager_dnssec_verdict(t->scope->manager, DNSSEC_BOGUS, t->key);
+                        manager_dnssec_verdict(t->scope->manager, DNSSEC_BOGUS, dns_transaction_key(t));
                         break;
 
                 default:
@@ -3241,6 +3408,8 @@ static const char* const dns_transaction_state_table[_DNS_TRANSACTION_STATE_MAX]
         [DNS_TRANSACTION_RR_TYPE_UNSUPPORTED] = "rr-type-unsupported",
         [DNS_TRANSACTION_NETWORK_DOWN] = "network-down",
         [DNS_TRANSACTION_NOT_FOUND] = "not-found",
+        [DNS_TRANSACTION_NO_SOURCE] = "no-source",
+        [DNS_TRANSACTION_STUB_LOOP] = "stub-loop",
 };
 DEFINE_STRING_TABLE_LOOKUP(dns_transaction_state, DnsTransactionState);
 
index 3cad567a8c966d6a45b7c6b99e5966fedf97fa9f..9376d504bfee9e382d358fd579dc3d6d2d106f00 100644 (file)
@@ -5,6 +5,7 @@
 #include "in-addr-util.h"
 
 typedef struct DnsTransaction DnsTransaction;
+typedef struct DnsTransactionFinder DnsTransactionFinder;
 typedef enum DnsTransactionState DnsTransactionState;
 typedef enum DnsTransactionSource DnsTransactionSource;
 
@@ -31,6 +32,8 @@ enum DnsTransactionState {
         DNS_TRANSACTION_RR_TYPE_UNSUPPORTED,
         DNS_TRANSACTION_NETWORK_DOWN,
         DNS_TRANSACTION_NOT_FOUND, /* like NXDOMAIN, but when LLMNR/TCP connections fail */
+        DNS_TRANSACTION_NO_SOURCE, /* All suitable DnsTransactionSource turned off */
+        DNS_TRANSACTION_STUB_LOOP,
         _DNS_TRANSACTION_STATE_MAX,
         _DNS_TRANSACTION_STATE_INVALID = -EINVAL,
 };
@@ -49,7 +52,10 @@ enum DnsTransactionSource {
 struct DnsTransaction {
         DnsScope *scope;
 
-        DnsResourceKey *key;
+        DnsResourceKey *key;         /* For regular lookups the RR key to look for */
+        DnsPacket *bypass;           /* For bypass lookups the full original request packet */
+
+        uint64_t query_flags;
 
         DnsTransactionState state;
 
@@ -60,8 +66,6 @@ struct DnsTransaction {
         bool initial_jitter_scheduled:1;
         bool initial_jitter_elapsed:1;
 
-        bool clamp_ttl:1;
-
         bool probing:1;
 
         DnsPacket *sent, *received;
@@ -133,9 +137,10 @@ struct DnsTransaction {
 
         LIST_FIELDS(DnsTransaction, transactions_by_scope);
         LIST_FIELDS(DnsTransaction, transactions_by_stream);
+        LIST_FIELDS(DnsTransaction, transactions_by_key);
 };
 
-int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key);
+int dns_transaction_new(DnsTransaction **ret, DnsScope *s, DnsResourceKey *key, DnsPacket *bypass, uint64_t flags);
 DnsTransaction* dns_transaction_free(DnsTransaction *t);
 
 bool dns_transaction_gc(DnsTransaction *t);
@@ -150,6 +155,23 @@ void dns_transaction_notify(DnsTransaction *t, DnsTransaction *source);
 int dns_transaction_validate_dnssec(DnsTransaction *t);
 int dns_transaction_request_dnssec_keys(DnsTransaction *t);
 
+static inline DnsResourceKey *dns_transaction_key(DnsTransaction *t) {
+        assert(t);
+
+        /* Return the lookup key of this transaction. Either takes the lookup key from the bypass packet if
+         * we are a bypass transaction. Or take the configured key for regular transactions. */
+
+        if (t->key)
+                return t->key;
+
+        assert(t->bypass);
+
+        if (dns_question_isempty(t->bypass->question))
+                return NULL;
+
+        return t->bypass->question->keys[0];
+}
+
 const char* dns_transaction_state_to_string(DnsTransactionState p) _const_;
 DnsTransactionState dns_transaction_state_from_string(const char *s) _pure_;
 
index 3e5d25586c7a34c6066449a7b2e9db8921aea095..8ba459b3e53bfa19e90d34e6dd2a9f57aeb62ed3 100644 (file)
@@ -60,7 +60,7 @@ static int add_root_ksk(
         if (!rr->ds.digest)
                 return  -ENOMEM;
 
-        r = dns_answer_add(answer, rr, 0, DNS_ANSWER_AUTHENTICATED);
+        r = dns_answer_add(answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
         if (r < 0)
                 return r;
 
@@ -354,7 +354,7 @@ static int dns_trust_anchor_load_positive(DnsTrustAnchor *d, const char *path, u
         old_answer = hashmap_get(d->positive_by_key, rr->key);
         answer = dns_answer_ref(old_answer);
 
-        r = dns_answer_add_extend(&answer, rr, 0, DNS_ANSWER_AUTHENTICATED);
+        r = dns_answer_add_extend(&answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
         if (r < 0)
                 return log_error_errno(r, "Failed to add trust anchor RR: %m");
 
index 00eb6725f9ff753eb68ffd7602cd4cf4ba06fb5b..4c5e1fe3727308616abaa4fec69bde9f9f9f870f 100644 (file)
@@ -170,7 +170,10 @@ static int dns_zone_item_probe_start(DnsZoneItem *i)  {
         if (i->probe_transaction)
                 return 0;
 
-        t = dns_scope_find_transaction(i->scope, &DNS_RESOURCE_KEY_CONST(i->rr->key->class, DNS_TYPE_ANY, dns_resource_key_name(i->rr->key)), false);
+        t = dns_scope_find_transaction(
+                        i->scope,
+                        &DNS_RESOURCE_KEY_CONST(i->rr->key->class, DNS_TYPE_ANY, dns_resource_key_name(i->rr->key)),
+                        SD_RESOLVED_NO_CACHE|SD_RESOLVED_NO_ZONE);
         if (!t) {
                 _cleanup_(dns_resource_key_unrefp) DnsResourceKey *key = NULL;
 
@@ -178,7 +181,7 @@ static int dns_zone_item_probe_start(DnsZoneItem *i)  {
                 if (!key)
                         return -ENOMEM;
 
-                r = dns_transaction_new(&t, i->scope, key);
+                r = dns_transaction_new(&t, i->scope, key, NULL, SD_RESOLVED_NO_CACHE|SD_RESOLVED_NO_ZONE);
                 if (r < 0)
                         return r;
         }
@@ -296,7 +299,7 @@ static int dns_zone_add_authenticated_answer(DnsAnswer *a, DnsZoneItem *i, int i
         else
                 flags = DNS_ANSWER_AUTHENTICATED;
 
-        return dns_answer_add(a, i->rr, ifindex, flags);
+        return dns_answer_add(a, i->rr, ifindex, flags, NULL);
 }
 
 int dns_zone_lookup(DnsZone *z, DnsResourceKey *key, int ifindex, DnsAnswer **ret_answer, DnsAnswer **ret_soa, bool *ret_tentative) {
index 2cb90d201a3f86b07c53ba115910f64f12619266..0c35d91a83d077a18f25ef993eba5eca50bfc471 100644 (file)
@@ -406,7 +406,7 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) {
                                 if (!rr->ptr.name)
                                         return -ENOMEM;
 
-                                r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED);
+                                r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
                                 if (r < 0)
                                         return r;
                         }
@@ -458,7 +458,7 @@ int manager_etc_hosts_lookup(Manager *m, DnsQuestion* q, DnsAnswer **answer) {
                 if (r < 0)
                         return r;
 
-                r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED);
+                r = dns_answer_add(*answer, rr, 0, DNS_ANSWER_AUTHENTICATED, NULL);
                 if (r < 0)
                         return r;
         }
index 3a549691c8dd1f77d3fd002f2be5c45db24e37b2..9778ebfff72b209c91d3b331a5b9022a1b047d04 100644 (file)
@@ -731,19 +731,27 @@ DnsServer *link_get_dns_server(Link *l) {
         return l->current_dns_server;
 }
 
-void link_next_dns_server(Link *l) {
+void link_next_dns_server(Link *l, DnsServer *if_current) {
         assert(l);
 
+        /* If the current server of the transaction is specified, and we already are at a different one,
+         * don't do anything */
+        if (if_current && l->current_dns_server != if_current)
+                return;
+
+        /* If currently have no DNS server, then don't do anything, we'll pick it lazily the next time a DNS
+         * server is needed. */
         if (!l->current_dns_server)
                 return;
 
-        /* Change to the next one, but make sure to follow the linked
-         * list only if this server is actually still linked. */
+        /* Change to the next one, but make sure to follow the linked list only if this server is actually
+         * still linked. */
         if (l->current_dns_server->linked && l->current_dns_server->servers_next) {
                 link_set_dns_server(l, l->current_dns_server->servers_next);
                 return;
         }
 
+        /* Pick the first one again, after we reached the end */
         link_set_dns_server(l, l->dns_servers);
 }
 
index 26b0d13127d5652e0e8f0dbe8dca35fcd7cdaf48..2be724376e08282de4e5f6602cef7c9539251c11 100644 (file)
@@ -91,7 +91,7 @@ void link_allocate_scopes(Link *l);
 
 DnsServer* link_set_dns_server(Link *l, DnsServer *s);
 DnsServer* link_get_dns_server(Link *l);
-void link_next_dns_server(Link *l);
+void link_next_dns_server(Link *l, DnsServer *if_current);
 
 DnssecMode link_get_dnssec_mode(Link *l);
 bool link_dnssec_supported(Link *l);
index 2ddf08815ad40774131553c4f5e24cb7e4c2c7d1..b1b8351e00be631079d367acfe0042bd3cb51f39 100644 (file)
@@ -83,7 +83,7 @@ static int on_llmnr_packet(sd_event_source *s, int fd, uint32_t revents, void *u
         if (r <= 0)
                 return r;
 
-        if (manager_our_packet(m, p))
+        if (manager_packet_from_local_address(m, p))
                 return 0;
 
         scope = manager_find_scope(m, p);
index cc684841693333ff098de7cd611fd4f02f2e5e72..a0997700540d0be550b1303fe23c67307e218137 100644 (file)
@@ -739,6 +739,8 @@ Manager *manager_free(Manager *m) {
         while (m->dns_queries)
                 dns_query_free(m->dns_queries);
 
+        m->stub_queries_by_packet = hashmap_free(m->stub_queries_by_packet);
+
         dns_scope_free(m->unicast_scope);
 
         /* At this point only orphaned streams should remain. All others should have been freed already by their
@@ -1255,13 +1257,31 @@ LinkAddress* manager_find_link_address(Manager *m, int family, const union in_ad
         return NULL;
 }
 
-bool manager_our_packet(Manager *m, DnsPacket *p) {
+bool manager_packet_from_local_address(Manager *m, DnsPacket *p) {
         assert(m);
         assert(p);
 
+        /* Let's see if this packet comes from an IP address we have on any local interface */
+
         return !!manager_find_link_address(m, p->family, &p->sender);
 }
 
+bool manager_packet_from_our_transaction(Manager *m, DnsPacket *p) {
+        DnsTransaction *t;
+
+        assert(m);
+        assert(p);
+
+        /* Let's see if we have a transaction with a query message with the exact same binary contents as the
+         * one we just got. If so, it's almost definitely a packet loop of some kind. */
+
+        t = hashmap_get(m->dns_transactions, UINT_TO_PTR(DNS_PACKET_ID(p)));
+        if (!t)
+                return false;
+
+        return t->sent && dns_packet_equal(t->sent, p);
+}
+
 DnsScope* manager_find_scope(Manager *m, DnsPacket *p) {
         Link *l;
 
@@ -1600,3 +1620,27 @@ bool manager_next_dnssd_names(Manager *m) {
 
         return tried;
 }
+
+bool manager_server_is_stub(Manager *m, DnsServer *s) {
+        DnsStubListenerExtra *l;
+
+        assert(m);
+        assert(s);
+
+        /* Safety check: we generally already skip the main stub when parsing configuration. But let's be
+         * extra careful, and check here again */
+        if (s->family == AF_INET &&
+            s->address.in.s_addr == htobe32(INADDR_DNS_STUB) &&
+            dns_server_port(s) == 53)
+                return true;
+
+        /* Main reason to call this is to check server data against the extra listeners, and filter things
+         * out. */
+        ORDERED_SET_FOREACH(l, m->dns_extra_stub_listeners)
+                if (s->family == l->family &&
+                    in_addr_equal(s->family, &s->address, &l->address) &&
+                    dns_server_port(s) == dns_stub_listener_extra_port(l))
+                        return true;
+
+        return false;
+}
index 5471b20ff9741598d667458f65f62d6d960548db..4dc55e6e41c4b18c93a8b19732a4441b6497c5f8 100644 (file)
@@ -59,6 +59,7 @@ struct Manager {
         Hashmap *dns_transactions;
         LIST_HEAD(DnsQuery, dns_queries);
         unsigned n_dns_queries;
+        Hashmap *stub_queries_by_packet;
 
         LIST_HEAD(DnsStream, dns_streams);
         unsigned n_dns_streams[_DNS_STREAM_TYPE_MAX];
@@ -97,13 +98,12 @@ struct Manager {
         /* mDNS */
         int mdns_ipv4_fd;
         int mdns_ipv6_fd;
+        sd_event_source *mdns_ipv4_event_source;
+        sd_event_source *mdns_ipv6_event_source;
 
         /* DNS-SD */
         Hashmap *dnssd_services;
 
-        sd_event_source *mdns_ipv4_event_source;
-        sd_event_source *mdns_ipv6_event_source;
-
         /* dbus */
         sd_bus *bus;
 
@@ -165,7 +165,9 @@ LinkAddress* manager_find_link_address(Manager *m, int family, const union in_ad
 void manager_refresh_rrs(Manager *m);
 int manager_next_hostname(Manager *m);
 
-bool manager_our_packet(Manager *m, DnsPacket *p);
+bool manager_packet_from_local_address(Manager *m, DnsPacket *p);
+bool manager_packet_from_our_transaction(Manager *m, DnsPacket *p);
+
 DnsScope* manager_find_scope(Manager *m, DnsPacket *p);
 
 void manager_verify_all(Manager *m);
@@ -195,3 +197,5 @@ void manager_reset_server_features(Manager *m);
 void manager_cleanup_saved_user(Manager *m);
 
 bool manager_next_dnssd_names(Manager *m);
+
+bool manager_server_is_stub(Manager *m, DnsServer *s);
index a09374719892a26fb575d2b05d3cd790cf18ec3e..6fccc5a1e5a081edfa670fd7de1f5b3f8c6bfb08 100644 (file)
@@ -254,7 +254,7 @@ static int on_mdns_packet(sd_event_source *s, int fd, uint32_t revents, void *us
         if (r <= 0)
                 return r;
 
-        if (manager_our_packet(m, p))
+        if (manager_packet_from_local_address(m, p))
                 return 0;
 
         scope = manager_find_scope(m, p);
@@ -301,25 +301,25 @@ static int on_mdns_packet(sd_event_source *s, int fd, uint32_t revents, void *us
                                 rr->ttl = 1;
                         }
 
-                        t = dns_scope_find_transaction(scope, rr->key, false);
+                        t = dns_scope_find_transaction(scope, rr->key, SD_RESOLVED_NO_CACHE|SD_RESOLVED_NO_ZONE);
                         if (t)
                                 dns_transaction_process_reply(t, p);
 
                         /* Also look for the various types of ANY transactions */
-                        t = dns_scope_find_transaction(scope, &DNS_RESOURCE_KEY_CONST(rr->key->class, DNS_TYPE_ANY, dns_resource_key_name(rr->key)), false);
+                        t = dns_scope_find_transaction(scope, &DNS_RESOURCE_KEY_CONST(rr->key->class, DNS_TYPE_ANY, dns_resource_key_name(rr->key)), SD_RESOLVED_NO_CACHE|SD_RESOLVED_NO_ZONE);
                         if (t)
                                 dns_transaction_process_reply(t, p);
 
-                        t = dns_scope_find_transaction(scope, &DNS_RESOURCE_KEY_CONST(DNS_CLASS_ANY, rr->key->type, dns_resource_key_name(rr->key)), false);
+                        t = dns_scope_find_transaction(scope, &DNS_RESOURCE_KEY_CONST(DNS_CLASS_ANY, rr->key->type, dns_resource_key_name(rr->key)), SD_RESOLVED_NO_CACHE|SD_RESOLVED_NO_ZONE);
                         if (t)
                                 dns_transaction_process_reply(t, p);
 
-                        t = dns_scope_find_transaction(scope, &DNS_RESOURCE_KEY_CONST(DNS_CLASS_ANY, DNS_TYPE_ANY, dns_resource_key_name(rr->key)), false);
+                        t = dns_scope_find_transaction(scope, &DNS_RESOURCE_KEY_CONST(DNS_CLASS_ANY, DNS_TYPE_ANY, dns_resource_key_name(rr->key)), SD_RESOLVED_NO_CACHE|SD_RESOLVED_NO_ZONE);
                         if (t)
                                 dns_transaction_process_reply(t, p);
                 }
 
-                dns_cache_put(&scope->cache, scope->manager->enable_cache, NULL, DNS_PACKET_RCODE(p), p->answer, false, (uint32_t) -1, 0, p->family, &p->sender);
+                dns_cache_put(&scope->cache, scope->manager->enable_cache, NULL, DNS_PACKET_RCODE(p), p->answer, NULL, false, _DNSSEC_RESULT_INVALID, (uint32_t) -1, p->family, &p->sender);
 
         } else if (dns_packet_validate_query(p) > 0)  {
                 log_debug("Got mDNS query packet for id %u", DNS_PACKET_ID(p));
index 9a8a4f3013f6e7717849d1aff842a0b6ebfcac0d..b691e59d3ee0242a8baa221eb191517f2b4136bd 100644 (file)
@@ -57,6 +57,12 @@ static int reply_query_state(DnsQuery *q) {
         case DNS_TRANSACTION_NETWORK_DOWN:
                 return varlink_error(q->varlink_request, "io.systemd.Resolve.NetworkDown", NULL);
 
+        case DNS_TRANSACTION_NO_SOURCE:
+                return varlink_error(q->varlink_request, "io.systemd.Resolve.NoSource", NULL);
+
+        case DNS_TRANSACTION_STUB_LOOP:
+                return varlink_error(q->varlink_request, "io.systemd.Resolve.StubLoop", NULL);
+
         case DNS_TRANSACTION_NOT_FOUND:
                 /* We return this as NXDOMAIN. This is only generated when a host doesn't implement LLMNR/TCP, and we
                  * thus quickly know that we cannot resolve an in-addr.arpa or ip6.arpa address. */
@@ -103,7 +109,7 @@ static bool validate_and_mangle_flags(
         /* This checks that the specified client-provided flags parameter actually makes sense, and mangles
          * it slightly. Specifically:
          *
-         * 1. We check that only the protocol flags and the NO_CNAME flag are on at most, plus the
+         * 1. We check that only the protocol flags and a bunch of NO_XYZ flags are on at most, plus the
          *    method-specific flags specified in 'ok'.
          *
          * 2. If no protocols are enabled we automatically convert that to "all protocols are enabled".
@@ -114,7 +120,15 @@ static bool validate_and_mangle_flags(
          * "everything".
          */
 
-        if (*flags & ~(SD_RESOLVED_PROTOCOLS_ALL|SD_RESOLVED_NO_CNAME|ok))
+        if (*flags & ~(SD_RESOLVED_PROTOCOLS_ALL|
+                       SD_RESOLVED_NO_CNAME|
+                       SD_RESOLVED_NO_VALIDATE|
+                       SD_RESOLVED_NO_SYNTHESIZE|
+                       SD_RESOLVED_NO_CACHE|
+                       SD_RESOLVED_NO_ZONE|
+                       SD_RESOLVED_NO_TRUST_ANCHOR|
+                       SD_RESOLVED_NO_NETWORK|
+                       ok))
                 return false;
 
         if ((*flags & SD_RESOLVED_PROTOCOLS_ALL) == 0) /* If no protocol is enabled, enable all */
@@ -312,7 +326,7 @@ static int vl_method_resolve_hostname(Varlink *link, JsonVariant *parameters, Va
         if (r < 0 && r != -EALREADY)
                 return r;
 
-        r = dns_query_new(m, &q, question_utf8, question_idna ?: question_utf8, p.ifindex, p.flags);
+        r = dns_query_new(m, &q, question_utf8, question_idna ?: question_utf8, NULL, p.ifindex, p.flags);
         if (r < 0)
                 return r;
 
@@ -481,7 +495,7 @@ static int vl_method_resolve_address(Varlink *link, JsonVariant *parameters, Var
         if (r < 0)
                 return r;
 
-        r = dns_query_new(m, &q, question, question, p.ifindex, p.flags|SD_RESOLVED_NO_SEARCH);
+        r = dns_query_new(m, &q, question, question, NULL, p.ifindex, p.flags|SD_RESOLVED_NO_SEARCH);
         if (r < 0)
                 return r;
 
index 0275d0eb948bf8b09f13cf4666f594c4c50367c3..b0763694dc90bbd26d65bc4f1b9287e4973330ae 100644 (file)
@@ -170,7 +170,7 @@ static void test_dnssec_verify_rfc8080_ed25519_example1(void) {
 
         answer = dns_answer_new(1);
         assert_se(answer);
-        assert_se(dns_answer_add(answer, mx, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
+        assert_se(dns_answer_add(answer, mx, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         assert_se(dnssec_verify_rrset(answer, mx->key, rrsig, dnskey,
                                 rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
@@ -262,7 +262,7 @@ static void test_dnssec_verify_rfc8080_ed25519_example2(void) {
 
         answer = dns_answer_new(1);
         assert_se(answer);
-        assert_se(dns_answer_add(answer, mx, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
+        assert_se(dns_answer_add(answer, mx, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         assert_se(dnssec_verify_rrset(answer, mx->key, rrsig, dnskey,
                                 rrsig->rrsig.inception * USEC_PER_SEC, &result) >= 0);
@@ -344,7 +344,7 @@ static void test_dnssec_verify_rrset(void) {
 
         answer = dns_answer_new(1);
         assert_se(answer);
-        assert_se(dns_answer_add(answer, a, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
+        assert_se(dns_answer_add(answer, a, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         /* Validate the RR as it if was 2015-12-2 today */
         assert_se(dnssec_verify_rrset(answer, a->key, rrsig, dnskey, 1449092754*USEC_PER_SEC, &result) >= 0);
@@ -436,7 +436,7 @@ static void test_dnssec_verify_rrset2(void) {
 
         answer = dns_answer_new(1);
         assert_se(answer);
-        assert_se(dns_answer_add(answer, nsec, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
+        assert_se(dns_answer_add(answer, nsec, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         /* Validate the RR as it if was 2015-12-11 today */
         assert_se(dnssec_verify_rrset(answer, nsec->key, rrsig, dnskey, 1449849318*USEC_PER_SEC, &result) >= 0);
@@ -563,10 +563,10 @@ static void test_dnssec_verify_rrset3(void) {
 
         answer = dns_answer_new(4);
         assert_se(answer);
-        assert_se(dns_answer_add(answer, mx1, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
-        assert_se(dns_answer_add(answer, mx2, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
-        assert_se(dns_answer_add(answer, mx3, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
-        assert_se(dns_answer_add(answer, mx4, 0, DNS_ANSWER_AUTHENTICATED) >= 0);
+        assert_se(dns_answer_add(answer, mx1, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
+        assert_se(dns_answer_add(answer, mx2, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
+        assert_se(dns_answer_add(answer, mx3, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
+        assert_se(dns_answer_add(answer, mx4, 0, DNS_ANSWER_AUTHENTICATED, NULL) >= 0);
 
         /* Validate the RR as it if was 2020-02-24 today */
         assert_se(dnssec_verify_rrset(answer, mx1->key, rrsig, dnskey, 1582534685*USEC_PER_SEC, &result) >= 0);
index 11e7d9e83103ea22f4ed13a934fed8708e2ecb66..29b511f8e12d23b6c4fbfcdfab0af60c92c11b00 100644 (file)
@@ -39,16 +39,14 @@ static int parse(const char *key, const char *value, void *data) {
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_success_action, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_success_action, value);
 
         } else if (proc_cmdline_key_streq(key, "systemd.run_failure_action")) {
 
                 if (proc_cmdline_value_missing(key, value))
                         return 0;
 
-                if (free_and_strdup(&arg_failure_action, value) < 0)
-                        return log_oom();
+                return free_and_strdup_warn(&arg_failure_action, value);
         }
 
         return 0;
index 29b182718b74ee403abb1f92121d4d13d9f411aa..11166d2e78bafd16789a4e10b05e0e706aad7bac 100644 (file)
@@ -21,6 +21,7 @@
 #include "fd-util.h"
 #include "format-util.h"
 #include "main-func.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-util.h"
 #include "pretty-print.h"
@@ -470,7 +471,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_WORKING_DIRECTORY:
-                        r = parse_path_argument_and_warn(optarg, true, &arg_working_directory);
+                        r = parse_path_argument(optarg, true, &arg_working_directory);
                         if (r < 0)
                                 return r;
 
index 80345ef46ae07b13364734a35874c1ffddd038fc..2ce507aa1ce67a9a794cec5b8b783cffd708bedf 100644 (file)
@@ -435,7 +435,8 @@ static int bus_append_cgroup_property(sd_bus_message *m, const char *field, cons
         if (STR_IN_SET(field, "DevicePolicy",
                               "Slice",
                               "ManagedOOMSwap",
-                              "ManagedOOMMemoryPressure"))
+                              "ManagedOOMMemoryPressure",
+                              "ManagedOOMPreference"))
                 return bus_append_string(m, field, eq);
 
         if (STR_IN_SET(field, "ManagedOOMMemoryPressureLimit")) {
index 8b00697762cb66583c43945382c798ba27b9aeae..485b3bab39e58607d7a49a0df964548eb27fd3e3 100644 (file)
@@ -487,6 +487,17 @@ static int has_tpm2(void) {
          * class device */
 
         r = dir_is_empty("/sys/class/tpmrm");
+        if (r == 0)
+                return true; /* nice! we have a device */
+
+        /* Hmm, so Linux doesn't know of the TPM2 device (or we couldn't check for it), most likely because
+         * the driver wasn't loaded yet. Let's see if the firmware knows about a TPM2 device, in this
+         * case. This way we can answer the TPM2 question already during early boot (where we most likely
+         * need it) */
+        if (efi_has_tpm2())
+                return true;
+
+        /* OK, this didn't work either, in this case propagate the original errors */
         if (r == -ENOENT)
                 return false;
         if (r < 0)
index f838d4513d65dd92e59a04c2613ab000157ae81a..c3d7e536ec088cbd955c310240080f7e1ecea3b6 100644 (file)
@@ -731,10 +731,7 @@ int config_parse_string(
         assert(rvalue);
         assert(data);
 
-        if (free_and_strdup(s, empty_to_null(rvalue)) < 0)
-                return log_oom();
-
-        return 0;
+        return free_and_strdup_warn(s, empty_to_null(rvalue));
 }
 
 int config_parse_path(
@@ -874,7 +871,7 @@ int config_parse_log_facility(
 
         x = log_facility_unshifted_from_string(rvalue);
         if (x < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse log facility, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, x, "Failed to parse log facility, ignoring: %s", rvalue);
                 return 0;
         }
 
@@ -904,7 +901,7 @@ int config_parse_log_level(
 
         x = log_level_from_string(rvalue);
         if (x < 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse log level, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, x, "Failed to parse log level, ignoring: %s", rvalue);
                 return 0;
         }
 
@@ -937,7 +934,7 @@ int config_parse_signal(
 
         r = signal_from_string(rvalue);
         if (r <= 0) {
-                log_syntax(unit, LOG_WARNING, filename, line, 0, "Failed to parse signal name, ignoring: %s", rvalue);
+                log_syntax(unit, LOG_WARNING, filename, line, r, "Failed to parse signal name, ignoring: %s", rvalue);
                 return 0;
         }
 
index 283d60a47326986115a9a4b8ead24c28dee83784..5a7dc7ff597885cd33f1b45bf8142d2989fd8662 100644 (file)
@@ -207,7 +207,7 @@ typedef enum Disabled {
                                                                         \
                 x = from_string(rvalue);                                \
                 if (x < 0) {                                            \
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, \
+                        log_syntax(unit, LOG_WARNING, filename, line, x, \
                                    msg ", ignoring: %s", rvalue);       \
                         return 0;                                       \
                 }                                                       \
@@ -235,7 +235,7 @@ typedef enum Disabled {
                                                                         \
                 x = name##_from_string(rvalue);                         \
                 if (x < 0) {                                            \
-                        log_syntax(unit, LOG_WARNING, filename, line, 0, \
+                        log_syntax(unit, LOG_WARNING, filename, line, x, \
                                    msg ", ignoring: %s", rvalue);       \
                         return 0;                                       \
                 }                                                       \
@@ -269,14 +269,17 @@ typedef enum Disabled {
                         r = extract_first_word(&p, &en, NULL, 0);              \
                         if (r == -ENOMEM)                                      \
                                 return log_oom();                              \
-                        if (r < 0)                                             \
-                                return log_syntax(unit, LOG_ERR, filename, line, 0,   \
-                                                  msg ": %s", en);             \
+                        if (r < 0) {                                           \
+                                log_syntax(unit, LOG_WARNING, filename, line, r, \
+                                           msg ", ignoring: %s", en);          \
+                                return 0;                                      \
+                        }                                                      \
                         if (r == 0)                                            \
                                 break;                                         \
                                                                                \
-                        if ((x = name##_from_string(en)) < 0) {                \
-                                log_syntax(unit, LOG_WARNING, filename, line, 0,        \
+                        x = name##_from_string(en);                            \
+                        if (x < 0) {                                           \
+                                log_syntax(unit, LOG_WARNING, filename, line, x, \
                                            msg ", ignoring: %s", en);          \
                                 continue;                                      \
                         }                                                      \
index 20f70da31a87295d68ff0bcf1c7f528a3ccc8445..2aab39c32d500ce16ec0e1c766c3fc5d66055380 100644 (file)
@@ -783,6 +783,29 @@ int efi_loader_update_entry_one_shot_cache(char **cache, struct stat *cache_stat
         return 0;
 }
 
+bool efi_has_tpm2(void) {
+        static int cache = -1;
+
+        /* Returns whether the system has a TPM2 chip which is known to the EFI firmware. */
+
+        if (cache < 0) {
+
+                /* First, check if we are on an EFI boot at all. */
+                if (!is_efi_boot())
+                        cache = false;
+                else {
+                        /* Then, check if the ACPI table "TPM2" exists, which is the TPM2 event log table, see:
+                         * https://trustedcomputinggroup.org/wp-content/uploads/TCG_ACPIGeneralSpecification_v1.20_r8.pdf
+                         * This table exists whenever the firmware is hooked up to TPM2. */
+                        cache = access("/sys/firmware/acpi/tables/TPM2", F_OK) >= 0;
+                        if (!cache && errno != ENOENT)
+                                log_debug_errno(errno, "Unable to test whether /sys/firmware/acpi/tables/TPM2 exists, assuming it doesn't: %m");
+                }
+        }
+
+        return cache;
+}
+
 #endif
 
 bool efi_loader_entry_name_valid(const char *s) {
index 76217947362447fb9281ead55b9dfc5ddc80fae4..bc5769bb6b2ce77ccf55ac707ad487cfc8a2a839 100644 (file)
@@ -29,6 +29,8 @@ int efi_loader_get_features(uint64_t *ret);
 int efi_loader_get_config_timeout_one_shot(usec_t *ret);
 int efi_loader_update_entry_one_shot_cache(char **cache, struct stat *cache_stat);
 
+bool efi_has_tpm2(void);
+
 #else
 
 static inline int efi_reboot_to_firmware_supported(void) {
@@ -91,6 +93,10 @@ static inline int efi_loader_update_entry_one_shot_cache(char **cache, struct st
         return -EOPNOTSUPP;
 }
 
+static inline bool efi_has_tpm2(void) {
+        return false;
+}
+
 #endif
 
 bool efi_loader_entry_name_valid(const char *s);
index 3b3d37ccccac1f87a424375c9a02e8297c8c1228..654d36a83a24fb0adb952050dbe5534b92f05380 100644 (file)
@@ -1092,7 +1092,7 @@ int config_parse_advertise(const char *unit,
                 /* We reuse the kernel provided enum which does not contain negative value. So, the cast
                  * below is mandatory. Otherwise, the check below always passes and access an invalid address. */
                 if ((int) mode < 0) {
-                        log_syntax(unit, LOG_WARNING, filename, line, 0,
+                        log_syntax(unit, LOG_WARNING, filename, line, mode,
                                    "Failed to parse advertise mode, ignoring: %s", w);
                         continue;
                 }
index b8616cf1f2b2a563e2ba7d398b9eb0252413482b..8b95c772db184b75cac7df3ef74f9d603276eda9 100644 (file)
@@ -652,7 +652,7 @@ int generator_write_veritysetup_service_section(
                 const char *roothash,
                 const char *options) {
 
-        _cleanup_free_ char *name_escaped = NULL, *data_what_escaped = NULL, *hash_what_escaped,
+        _cleanup_free_ char *name_escaped = NULL, *data_what_escaped = NULL, *hash_what_escaped = NULL,
                             *roothash_escaped = NULL, *options_escaped = NULL;
 
         assert(f);
index b8f8292e74bc32833d4a9db574daa239fa26bed8..cc79375410f2b245d5d08bebea9178505a6302b4 100644 (file)
@@ -4459,27 +4459,6 @@ int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size) {
         return unhexmem(json_variant_string(v), (size_t) -1, ret, ret_size);
 }
 
-int json_parse_cmdline_parameter_and_warn(const char *s, JsonFormatFlags *ret) {
-        assert(s);
-        assert(ret);
-
-        if (streq(s, "pretty"))
-                *ret = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
-        else if (streq(s, "short"))
-                *ret = JSON_FORMAT_NEWLINE;
-        else if (streq(s, "off"))
-                *ret = JSON_FORMAT_OFF;
-        else if (streq(s, "help")) {
-                puts("pretty\n"
-                     "short\n"
-                     "off");
-                return 0; /* 0 means â†’ we showed a brief help, exit now */
-        } else
-                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json= switch: %s", s);
-
-        return 1; /* 1 means â†’ properly parsed */
-}
-
 static const char* const json_variant_type_table[_JSON_VARIANT_TYPE_MAX] = {
         [JSON_VARIANT_STRING] = "string",
         [JSON_VARIANT_INTEGER] = "integer",
index a335dd3623093d6552cf12200f46105eb8667cf5..d4290667616fc451c94b50dae7342d7cc7b6e74c 100644 (file)
@@ -357,7 +357,5 @@ int json_log_internal(JsonVariant *variant, int level, int error, const char *fi
 int json_variant_unbase64(JsonVariant *v, void **ret, size_t *ret_size);
 int json_variant_unhex(JsonVariant *v, void **ret, size_t *ret_size);
 
-int json_parse_cmdline_parameter_and_warn(const char *s, JsonFormatFlags *ret);
-
 const char *json_variant_type_to_string(JsonVariantType t);
 JsonVariantType json_variant_type_from_string(const char *s);
index e60ee50e1cbcb218f2bd9c17f58ada94cfbae764..948bdb5ce9576993b296059f5849ec76b43d6306 100644 (file)
@@ -1398,7 +1398,7 @@ int show_journal(
                         if (line == 0 && noaccess)
                                 fprintf(f, "Warning: some journal files were not opened due to insufficient permissions.");
                         else if (!noaccess)
-                                fprintf(f, "Warning: journal has been rotated since unit was started, output may be incomplete.\n");
+                                fprintf(f, "Notice: journal has been rotated since unit was started, output may be incomplete.\n");
                         else
                                 fprintf(f, "Warning: journal has been rotated since unit was started and some journal "
                                         "files were not opened due to insufficient permissions, output may be incomplete.\n");
index 4e47e15c09dff26b1b7de90aaa64b4d98d82029e..6d9a5c5b65c2e8279c47deb78724fb9a945fce1a 100644 (file)
@@ -202,6 +202,8 @@ shared_sources = files('''
         output-mode.h
         pager.c
         pager.h
+        parse-argument.c
+        parse-argument.h
         pe-header.h
         pkcs11-util.c
         pkcs11-util.h
diff --git a/src/shared/parse-argument.c b/src/shared/parse-argument.c
new file mode 100644 (file)
index 0000000..cd1d0dd
--- /dev/null
@@ -0,0 +1,102 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "format-table.h"
+#include "parse-argument.h"
+#include "path-util.h"
+#include "signal-util.h"
+#include "stdio-util.h"
+#include "string-table.h"
+#include "string-util.h"
+
+/* All functions in this file emit warnigs. */
+
+int parse_json_argument(const char *s, JsonFormatFlags *ret) {
+        assert(s);
+        assert(ret);
+
+        if (streq(s, "pretty"))
+                *ret = JSON_FORMAT_PRETTY|JSON_FORMAT_COLOR_AUTO;
+        else if (streq(s, "short"))
+                *ret = JSON_FORMAT_NEWLINE;
+        else if (streq(s, "off"))
+                *ret = JSON_FORMAT_OFF;
+        else if (streq(s, "help")) {
+                puts("pretty\n"
+                     "short\n"
+                     "off");
+                return 0; /* 0 means â†’ we showed a brief help, exit now */
+        } else
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown argument to --json= switch: %s", s);
+
+        return 1; /* 1 means â†’ properly parsed */
+}
+
+int parse_path_argument(const char *path, bool suppress_root, char **arg) {
+        char *p;
+        int r;
+
+        /*
+         * This function is intended to be used in command line parsers, to handle paths that are passed
+         * in. It makes the path absolute, and reduces it to NULL if omitted or root (the latter optionally).
+         *
+         * NOTE THAT THIS WILL FREE THE PREVIOUS ARGUMENT POINTER ON SUCCESS!
+         * Hence, do not pass in uninitialized pointers.
+         */
+
+        if (isempty(path)) {
+                *arg = mfree(*arg);
+                return 0;
+        }
+
+        r = path_make_absolute_cwd(path, &p);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse path \"%s\" and make it absolute: %m", path);
+
+        path_simplify(p, false);
+        if (suppress_root && empty_or_root(p))
+                p = mfree(p);
+
+        return free_and_replace(*arg, p);
+}
+
+int parse_signal_argument(const char *s, int *ret) {
+        int r;
+
+        assert(s);
+        assert(ret);
+
+        if (streq(s, "help")) {
+                DUMP_STRING_TABLE(signal, int, _NSIG);
+                return 0;
+        }
+
+        if (streq(s, "list")) {
+                _cleanup_(table_unrefp) Table *table = NULL;
+
+                table = table_new("signal", "name");
+                if (!table)
+                        return log_oom();
+
+                for (int i = 1; i < _NSIG; i++) {
+                        r = table_add_many(
+                                        table,
+                                        TABLE_INT, i,
+                                        TABLE_SIGNAL, i);
+                        if (r < 0)
+                                return table_log_add_error(r);
+                }
+
+                r = table_print(table, NULL);
+                if (r < 0)
+                        return table_log_print_error(r);
+
+                return 0;
+        }
+
+        r = signal_from_string(s);
+        if (r < 0)
+                return log_error_errno(r, "Failed to parse signal string \"%s\".", s);
+
+        *ret = r;
+        return 1; /* work to do */
+}
diff --git a/src/shared/parse-argument.h b/src/shared/parse-argument.h
new file mode 100644 (file)
index 0000000..28b58cc
--- /dev/null
@@ -0,0 +1,8 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+#pragma once
+
+#include "json.h"
+
+int parse_json_argument(const char *s, JsonFormatFlags *ret);
+int parse_path_argument(const char *path, bool suppress_root, char **arg);
+int parse_signal_argument(const char *s, int *ret);
index 1ce9939afb03405e2ce1bd666db67d32a7d5e323..57a36d478a2e6b0466efd61bd6146900a3d517f2 100644 (file)
@@ -22,6 +22,7 @@
 #include "mountpoint-util.h"
 #include "os-util.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "pretty-print.h"
 #include "process-util.h"
@@ -943,13 +944,13 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_root);
+                        r = parse_path_argument(optarg, false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
 
                 case ARG_JSON:
-                        r = json_parse_cmdline_parameter_and_warn(optarg, &arg_json_format_flags);
+                        r = parse_json_argument(optarg, &arg_json_format_flags);
                         if (r <= 0)
                                 return r;
 
index 315202a64b0f2713c0f5b8fe4eeba38c24793e1a..b82e541d7a6a03d8b78b76648c6b1bcd96a40853 100644 (file)
@@ -11,6 +11,7 @@
 #include "main-func.h"
 #include "output-mode.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "rlimit-util.h"
@@ -496,14 +497,12 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                 case ARG_VERSION:
                         return version();
 
-                case 't': {
-                        const char *p;
-
+                case 't':
                         if (isempty(optarg))
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "--type= requires arguments.");
 
-                        for (p = optarg;;) {
+                        for (const char *p = optarg;;) {
                                 _cleanup_free_ char *type = NULL;
 
                                 r = extract_first_word(&p, &type, ",", 0);
@@ -537,7 +536,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         }
 
                         break;
-                }
 
                 case 'P':
                         arg_value = true;
@@ -550,10 +548,8 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                                 arg_properties = new0(char*, 1);
                                 if (!arg_properties)
                                         return log_oom();
-                        } else {
-                                const char *p;
-
-                                for (p = optarg;;) {
+                        } else
+                                for (const char *p = optarg;;) {
                                         _cleanup_free_ char *prop = NULL;
 
                                         r = extract_first_word(&p, &prop, ",", 0);
@@ -565,7 +561,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                                         if (strv_consume(&arg_properties, TAKE_PTR(prop)) < 0)
                                                 return log_oom();
                                 }
-                        }
 
                         /* If the user asked for a particular property, show it, even if it is empty. */
                         arg_all = true;
@@ -647,7 +642,7 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, false, &arg_root);
+                        r = parse_path_argument(optarg, false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -683,16 +678,9 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         break;
 
                 case 's':
-                        if (streq(optarg, "help")) {
-                                DUMP_STRING_TABLE(signal, int, _NSIG);
-                                return 0;
-                        }
-
-                        arg_signal = signal_from_string(optarg);
-                        if (arg_signal < 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                                       "Failed to parse signal string %s.",
-                                                       optarg);
+                        r = parse_signal_argument(optarg, &arg_signal);
+                        if (r <= 0)
+                                return r;
                         break;
 
                 case ARG_NO_ASK_PASSWORD:
@@ -782,14 +770,12 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         arg_boot_loader_entry = empty_to_null(optarg);
                         break;
 
-                case ARG_STATE: {
-                        const char *p;
-
+                case ARG_STATE:
                         if (isempty(optarg))
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
                                                        "--state= requires arguments.");
 
-                        for (p = optarg;;) {
+                        for (const char *p = optarg;;) {
                                 _cleanup_free_ char *s = NULL;
 
                                 r = extract_first_word(&p, &s, ",", 0);
@@ -807,7 +793,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                                         return log_oom();
                         }
                         break;
-                }
 
                 case 'r':
                         if (geteuid() != 0)
@@ -847,13 +832,11 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         arg_with_dependencies = true;
                         break;
 
-                case ARG_WHAT: {
-                        const char *p;
-
+                case ARG_WHAT:
                         if (isempty(optarg))
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "--what= requires arguments.");
 
-                        for (p = optarg;;) {
+                        for (const char *p = optarg;;) {
                                 _cleanup_free_ char *k = NULL;
 
                                 r = extract_first_word(&p, &k, ",", 0);
@@ -877,7 +860,6 @@ static int systemctl_parse_argv(int argc, char *argv[]) {
                         }
 
                         break;
-                }
 
                 case ARG_REBOOT_ARG:
                         arg_reboot_argument = optarg;
@@ -959,57 +941,53 @@ int systemctl_dispatch_parse_argv(int argc, char *argv[]) {
         assert(argc >= 0);
         assert(argv);
 
-        if (program_invocation_short_name) {
-
-                if (strstr(program_invocation_short_name, "halt")) {
-                        arg_action = ACTION_HALT;
-                        return halt_parse_argv(argc, argv);
-
-                } else if (strstr(program_invocation_short_name, "poweroff")) {
-                        arg_action = ACTION_POWEROFF;
-                        return halt_parse_argv(argc, argv);
-
-                } else if (strstr(program_invocation_short_name, "reboot")) {
-                        if (kexec_loaded())
-                                arg_action = ACTION_KEXEC;
-                        else
-                                arg_action = ACTION_REBOOT;
-                        return halt_parse_argv(argc, argv);
-
-                } else if (strstr(program_invocation_short_name, "shutdown")) {
-                        arg_action = ACTION_POWEROFF;
-                        return shutdown_parse_argv(argc, argv);
-
-                } else if (strstr(program_invocation_short_name, "init")) {
-
-                        /* Matches invocations as "init" as well as "telinit", which are synonymous when run
-                         * as PID != 1 on SysV.
-                         *
-                         * On SysV "telinit" was the official command to communicate with PID 1, but "init" would
-                         * redirect itself to "telinit" if called with PID != 1. We follow the same logic here still,
-                         * though we add one level of indirection, as we implement "telinit" in "systemctl". Hence, for
-                         * us if you invoke "init" you get "systemd", but it will execve() "systemctl" immediately with
-                         * argv[] unmodified if PID is != 1. If you invoke "telinit" you directly get "systemctl". In
-                         * both cases we shall do the same thing, which is why we do strstr(p_i_s_n, "init") here, as a
-                         * quick way to match both.
-                         *
-                         * Also see redirect_telinit() in src/core/main.c. */
-
-                        if (sd_booted() > 0) {
-                                arg_action = _ACTION_INVALID;
-                                return telinit_parse_argv(argc, argv);
-                        } else {
-                                /* Hmm, so some other init system is running, we need to forward this request
-                                 * to it. */
-
-                                arg_action = ACTION_TELINIT;
-                                return 1;
-                        }
-
-                } else if (strstr(program_invocation_short_name, "runlevel")) {
-                        arg_action = ACTION_RUNLEVEL;
-                        return runlevel_parse_argv(argc, argv);
+        if (strstr_ptr(argv[0], "halt")) {
+                arg_action = ACTION_HALT;
+                return halt_parse_argv(argc, argv);
+
+        } else if (strstr_ptr(argv[0], "poweroff")) {
+                arg_action = ACTION_POWEROFF;
+                return halt_parse_argv(argc, argv);
+
+        } else if (strstr_ptr(argv[0], "reboot")) {
+                if (kexec_loaded())
+                        arg_action = ACTION_KEXEC;
+                else
+                        arg_action = ACTION_REBOOT;
+                return halt_parse_argv(argc, argv);
+
+        } else if (strstr_ptr(argv[0], "shutdown")) {
+                arg_action = ACTION_POWEROFF;
+                return shutdown_parse_argv(argc, argv);
+
+        } else if (strstr_ptr(argv[0], "init")) {
+
+                /* Matches invocations as "init" as well as "telinit", which are synonymous when run
+                 * as PID != 1 on SysV.
+                 *
+                 * On SysV "telinit" was the official command to communicate with PID 1, but "init" would
+                 * redirect itself to "telinit" if called with PID != 1. We follow the same logic here still,
+                 * though we add one level of indirection, as we implement "telinit" in "systemctl". Hence,
+                 * for us if you invoke "init" you get "systemd", but it will execve() "systemctl"
+                 * immediately with argv[] unmodified if PID is != 1. If you invoke "telinit" you directly
+                 * get "systemctl". In both cases we shall do the same thing, which is why we do
+                 * strstr_ptr(argv[0], "init") here, as a quick way to match both.
+                 *
+                 * Also see redirect_telinit() in src/core/main.c. */
+
+                if (sd_booted() > 0) {
+                        arg_action = _ACTION_INVALID;
+                        return telinit_parse_argv(argc, argv);
+                } else {
+                        /* Hmm, so some other init system is running, we need to forward this request to it.
+                         */
+                        arg_action = ACTION_TELINIT;
+                        return 1;
                 }
+
+        } else if (strstr_ptr(argv[0], "runlevel")) {
+                arg_action = ACTION_RUNLEVEL;
+                return runlevel_parse_argv(argc, argv);
         }
 
         arg_action = ACTION_SYSTEMCTL;
index 969896c0b5d87e717f7172b523d642c0ab6933ac..4e231be856ebd63f9f37f9660588f36b2aa78715 100644 (file)
@@ -17,6 +17,7 @@
 #include "mount-util.h"
 #include "nscd-flush.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "path-util.h"
 #include "pretty-print.h"
 #include "selinux-util.h"
@@ -1813,7 +1814,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_root);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -1823,7 +1824,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                                "This systemd-sysusers version is compiled without support for --image=.");
 #else
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_image);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
                         if (r < 0)
                                 return r;
                         break;
index 93870e87732bd86d11794181ffd03990b2272bc9..5bf1ca3490f5dc401a02510192aaaa6a8a507fde 100644 (file)
@@ -222,6 +222,8 @@ tests += [
 
         [['src/test/test-extract-word.c']],
 
+        [['src/test/test-parse-argument.c']],
+
         [['src/test/test-parse-util.c'],
          [],
          [libseccomp]],
diff --git a/src/test/test-parse-argument.c b/src/test/test-parse-argument.c
new file mode 100644 (file)
index 0000000..4081a9f
--- /dev/null
@@ -0,0 +1,63 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include "parse-argument.h"
+#include "stdio-util.h"
+#include "tests.h"
+
+static void test_parse_json_argument(void) {
+        log_info("/* %s */", __func__);
+
+        JsonFormatFlags flags = JSON_FORMAT_PRETTY;
+
+        assert_se(parse_json_argument("help", &flags) == 0);
+        assert_se(flags == JSON_FORMAT_PRETTY);
+
+        assert_se(parse_json_argument("off", &flags) == 1);
+        assert_se(flags == JSON_FORMAT_OFF);
+}
+
+static void test_parse_path_argument(void) {
+        log_info("/* %s */", __func__);
+
+        _cleanup_free_ char *path = NULL;
+
+        assert_se(parse_path_argument("help", false, &path) == 0);
+        assert_se(streq(basename(path), "help"));
+
+        assert_se(parse_path_argument("/", false, &path) == 0);
+        assert_se(streq(path, "/"));
+
+        assert_se(parse_path_argument("/", true, &path) == 0);
+        assert_se(path == NULL);
+}
+
+static void test_parse_signal_argument(void) {
+        log_info("/* %s */", __func__);
+
+        int  signal = -1;
+
+        assert_se(parse_signal_argument("help", &signal) == 0);
+        assert_se(signal == -1);
+
+        assert_se(parse_signal_argument("list", &signal) == 0);
+        assert_se(signal == -1);
+
+        assert_se(parse_signal_argument("SIGABRT", &signal) == 1);
+        assert_se(signal == SIGABRT);
+
+        assert_se(parse_signal_argument("ABRT", &signal) == 1);
+        assert_se(signal == SIGABRT);
+
+        char buf[DECIMAL_STR_MAX(int)];
+        xsprintf(buf, "%d", SIGABRT);
+        assert_se(parse_signal_argument(buf, &signal) == 1);
+        assert_se(signal == SIGABRT);
+}
+
+int main(int argc, char *argv[]) {
+        test_setup_logging(LOG_INFO);
+
+        test_parse_json_argument();
+        test_parse_path_argument();
+        test_parse_signal_argument();
+}
index 641cadec858b20ae54cc9f18980387ff0a7bc30a..cc93bbbc749263fda4930b4f25c40cb82279360e 100644 (file)
@@ -73,6 +73,7 @@ int main(int argc, char **argv) {
         test_table(log_target, LOG_TARGET);
         test_table(mac_address_policy, MAC_ADDRESS_POLICY);
         test_table(managed_oom_mode, MANAGED_OOM_MODE);
+        test_table(managed_oom_preference, MANAGED_OOM_PREFERENCE);
         test_table(manager_state, MANAGER_STATE);
         test_table(manager_timestamp, MANAGER_TIMESTAMP);
         test_table(mount_exec_command, MOUNT_EXEC_COMMAND);
index 6bebf234bc60c9049f6782558f5cdcb450354d2a..846e456551ee66d7e1822f09725e5be2a7669f2a 100644 (file)
@@ -27,6 +27,7 @@
 #include "def.h"
 #include "dirent-util.h"
 #include "dissect-image.h"
+#include "env-util.h"
 #include "escape.h"
 #include "fd-util.h"
 #include "fileio.h"
@@ -45,6 +46,7 @@
 #include "mountpoint-util.h"
 #include "offline-passwd.h"
 #include "pager.h"
+#include "parse-argument.h"
 #include "parse-util.h"
 #include "path-lookup.h"
 #include "path-util.h"
@@ -1614,8 +1616,13 @@ static int create_directory_or_subvolume(const char *path, mode_t mode, bool sub
                 return pfd;
 
         if (subvol) {
-                if (btrfs_is_subvol(empty_to_root(arg_root)) <= 0)
-
+                r = getenv_bool("SYSTEMD_TMPFILES_FORCE_SUBVOL");
+                if (r < 0) {
+                        if (r != -ENXIO) /* env var is unset */
+                                log_warning_errno(r, "Cannot parse value of $SYSTEMD_TMPFILES_FORCE_SUBVOL, ignoring.");
+                        r = btrfs_is_subvol(empty_to_root(arg_root)) > 0;
+                }
+                if (!r)
                         /* Don't create a subvolume unless the root directory is
                          * one, too. We do this under the assumption that if the
                          * root directory is just a plain directory (i.e. very
@@ -3108,7 +3115,7 @@ static int parse_argv(int argc, char *argv[]) {
                         break;
 
                 case ARG_ROOT:
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_root);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_root);
                         if (r < 0)
                                 return r;
                         break;
@@ -3118,7 +3125,7 @@ static int parse_argv(int argc, char *argv[]) {
                         return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP),
                                                "This systemd-tmpfiles version is compiled without support for --image=.");
 #else
-                        r = parse_path_argument_and_warn(optarg, /* suppress_root= */ false, &arg_image);
+                        r = parse_path_argument(optarg, /* suppress_root= */ false, &arg_image);
                         if (r < 0)
                                 return r;
 #endif
@@ -3365,6 +3372,16 @@ static int run(int argc, char *argv[]) {
 
         log_setup();
 
+        /* We require /proc/ for a lot of our operations, i.e. for adjusting access modes, for anything
+         * SELinux related, for recursive operation, for xattr, acl and chattr handling, for btrfs stuff and
+         * a lot more. It's probably the majority of invocations where /proc/ is required. Since people
+         * apparently invoke it without anyway and are surprised about the failures, let's catch this early
+         * and output a nice and friendly warning. */
+        if (proc_mounted() == 0)
+                return log_error_errno(SYNTHETIC_ERRNO(ENOSYS),
+                                       "/proc/ is not mounted, but required for successful operation of systemd-tmpfiles. "
+                                       "Please mount /proc/. Alternatively, consider using the --root= or --image= switches.");
+
         /* Descending down file system trees might take a lot of fds */
         (void) rlimit_nofile_bump(HIGH_RLIMIT_NOFILE);
 
index 0653ae7a9cd1bfbf46614d1a837b06ba8cb198bc..9209f8f4b4bf5f639f97aacd99c71c96cab9850e 100644 (file)
@@ -702,10 +702,7 @@ int config_parse_ifalias(
                 return 0;
         }
 
-        if (free_and_strdup(s, rvalue) < 0)
-                return log_oom();
-
-        return 0;
+        return free_and_strdup_warn(s, rvalue);
 }
 
 int config_parse_rx_tx_queues(
index cb12b943fe7d95d04b1e561229be87540a08cc6d..87e1fb133ef9c9768d525390be87cb4f3572a561 100644 (file)
@@ -1,7 +1,8 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
-#include "device-util.h"
 #include "alloc-util.h"
+#include "device-util.h"
+#include "errno-util.h"
 #include "link-config.h"
 #include "log.h"
 #include "string-util.h"
@@ -20,7 +21,7 @@ static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool te
 
         r = link_get_driver(ctx, dev, &driver);
         if (r < 0)
-                log_device_full_errno(dev, r == -EOPNOTSUPP ? LOG_DEBUG : LOG_WARNING,
+                log_device_full_errno(dev, ERRNO_IS_NOT_SUPPORTED(r) || r == -ENODEV ? LOG_DEBUG : LOG_WARNING,
                                       r, "Failed to query device driver: %m");
         else
                 udev_builtin_add_property(dev, test, "ID_NET_DRIVER", driver);
@@ -29,13 +30,17 @@ static int builtin_net_setup_link(sd_device *dev, int argc, char **argv, bool te
         if (r < 0) {
                 if (r == -ENOENT)
                         return log_device_debug_errno(dev, r, "No matching link configuration found.");
+                if (r == -ENODEV)
+                        return log_device_debug_errno(dev, r, "Link vanished while searching for configuration for it.");
 
                 return log_device_error_errno(dev, r, "Failed to get link config: %m");
         }
 
         r = link_config_apply(ctx, link, dev, &name);
-        if (r < 0)
-                log_device_warning_errno(dev, r, "Could not apply link config, ignoring: %m");
+        if (r == -ENODEV)
+                log_device_debug_errno(dev, r, "Link vanished while applying configuration, ignoring.");
+        else if (r < 0)
+                log_device_warning_errno(dev, r, "Could not apply link configuration, ignoring: %m");
 
         udev_builtin_add_property(dev, test, "ID_NET_LINK_FILE", link->filename);
 
index e12225ca39c258b223c53df028799f06acac2917..fb4de17a5cbfbf47246f7a1c7b9b1e7645607390 100644 (file)
@@ -1773,6 +1773,7 @@ static int udev_rule_apply_token_to_event(
         }
         case TK_M_IMPORT_BUILTIN: {
                 UdevBuiltinCommand cmd = PTR_TO_UDEV_BUILTIN_CMD(token->data);
+                assert(cmd >= 0 && cmd < _UDEV_BUILTIN_MAX);
                 unsigned mask = 1U << (int) cmd;
 
                 if (udev_builtin_run_once(cmd)) {
@@ -2054,8 +2055,9 @@ static int udev_rule_apply_token_to_event(
                                        token->value);
                         break;
                 }
-                if (free_and_strdup(&event->name, buf) < 0)
-                        return log_oom();
+                r = free_and_strdup_warn(&event->name, buf);
+                if (r < 0)
+                        return r;
 
                 log_rule_debug(dev, rules, "NAME '%s'", event->name);
                 break;
index 7a9f968128950364f2f38d39374d11123ae70d18..a4588cb4e4f5097c68268de8a052b366ff534c3a 100644 (file)
@@ -210,16 +210,21 @@ int trigger_main(int argc, char *argv[], void *userdata) {
                         else
                                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown type --type=%s", optarg);
                         break;
-                case 'c':
+                case 'c': {
+                        DeviceAction a;
+
                         if (streq(optarg, "help")) {
                                 dump_device_action_table();
                                 return 0;
                         }
-                        if (device_action_from_string(optarg) < 0)
-                                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Unknown action '%s'", optarg);
+
+                        a = device_action_from_string(optarg);
+                        if (a < 0)
+                                return log_error_errno(a, "Unknown action '%s'", optarg);
 
                         action = optarg;
                         break;
+                }
                 case 's':
                         r = sd_device_enumerator_add_match_subsystem(e, optarg, true);
                         if (r < 0)
index c9e4faf5cbd16500bf6c8e61cd0436bba036d014..2ff81bf4fa9626532fda72e64033aa3be3d4ba61 100755 (executable)
@@ -5,11 +5,10 @@ set -e
 TEST_DESCRIPTION="test systemd-dissect"
 IMAGE_NAME="dissect"
 TEST_NO_NSPAWN=1
+TEST_INSTALL_VERITY_MINIMAL=1
 
 . $TEST_BASE_DIR/test-functions
 
-command -v mksquashfs >/dev/null 2>&1 || exit 0
-command -v veritysetup >/dev/null 2>&1 || exit 0
 command -v sfdisk >/dev/null 2>&1 || exit 0
 
 # Need loop devices for systemd-dissect
@@ -21,23 +20,7 @@ test_append_files() {
         install_dmevent
         generate_module_dependencies
         inst_binary losetup
-
-        BASICTOOLS=(
-            bash
-            cat
-            mount
-        )
-        oldinitdir=$initdir
-        export initdir=$TESTDIR/minimal
-        mkdir -p $initdir/usr/lib $initdir/etc
-        setup_basic_dirs
-        install_basic_tools
-        cp $os_release $initdir/usr/lib/os-release
-        ln -s ../usr/lib/os-release $initdir/etc/os-release
-        echo MARKER=1 >> $initdir/usr/lib/os-release
-        mksquashfs $initdir $oldinitdir/usr/share/minimal.raw
-        veritysetup format $oldinitdir/usr/share/minimal.raw $oldinitdir/usr/share/minimal.verity | grep '^Root hash:' | cut -f2 | tr -d '\n' > $oldinitdir/usr/share/minimal.roothash
-        export initdir=$oldinitdir
+        install_verity_minimal
     )
 }
 
diff --git a/test/TEST-58-PORTABLE/Makefile b/test/TEST-58-PORTABLE/Makefile
new file mode 120000 (symlink)
index 0000000..e9f93b1
--- /dev/null
@@ -0,0 +1 @@
+../TEST-01-BASIC/Makefile
\ No newline at end of file
diff --git a/test/TEST-58-PORTABLE/test.sh b/test/TEST-58-PORTABLE/test.sh
new file mode 100755 (executable)
index 0000000..98e6979
--- /dev/null
@@ -0,0 +1,27 @@
+#!/usr/bin/env bash
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+set -e
+TEST_DESCRIPTION="test systemd-portabled"
+IMAGE_NAME="portabled"
+TEST_NO_NSPAWN=1
+TEST_INSTALL_VERITY_MINIMAL=1
+
+. $TEST_BASE_DIR/test-functions
+
+# Need loop devices for mounting images
+test_append_files() {
+    (
+        instmods loop =block
+        instmods squashfs =squashfs
+        instmods dm_verity =md
+        install_dmevent
+        generate_module_dependencies
+        inst_binary losetup
+        inst_binary mksquashfs
+        inst_binary unsquashfs
+        install_verity_minimal
+    )
+}
+
+do_test "$@" 58
index 1c4f338ad0954a51a602ef3b3ca8b0391380090a..51dd56ade92d7dcefbaf5d3bb997da08d86774c2 100644 (file)
@@ -127,6 +127,7 @@ FallbackLeaseLifetimeSec=
 UseAddress=
 UseNTP=
 UseDNS=
+UseFQDN=
 RapidCommit=
 ForceDHCPv6PDOtherInformation=
 PrefixDelegationHint=
index 95626348b0620c4c71b4260c8b093082f1d00df6..be0631301b69721b8054f04f9144e5d0b9f8afc4 100644 (file)
Binary files a/test/fuzz/fuzz-systemctl-parse-argv/help.input and b/test/fuzz/fuzz-systemctl-parse-argv/help.input differ
index 15fa556dd64b6f1e9464d6af815ae0abd3625793..0c7ded6786a2dc457e3d6c031242c5006bd44f9a 100644 (file)
@@ -138,6 +138,10 @@ MakeDirectory=
 Mark=
 MaxConnections=
 MaxConnectionsPerSource=
+ManagedOOMSwap=
+ManagedOOMMemoryPressure=
+ManagedOOMMemoryPressureLimitPercent=
+ManagedOOMPreference=
 MemoryAccounting=
 MemoryHigh=
 MemoryLimit=
index 44696aff3b71aae0187cede15643ba4741274223..7b8a1a32077ee4c0ff5b7cc57dcb4ad9482efdd6 100644 (file)
@@ -124,6 +124,7 @@ BASICTOOLS=(
     rmdir
     sed
     seq
+    setfattr
     setfont
     setsid
     sfdisk
@@ -462,6 +463,53 @@ run_nspawn() {
     return 0
 }
 
+# Build two very minimal root images, with two units, one is the same and one is different across them
+install_verity_minimal() {
+    if [ -e $initdir/usr/share/minimal.raw ]; then
+        return
+    fi
+    if ! command -v mksquashfs >/dev/null 2>&1; then
+        dfatal "mksquashfs not found"
+        exit 1
+    fi
+    if ! command -v veritysetup >/dev/null 2>&1; then
+        dfatal "veritysetup not found"
+        exit 1
+    fi
+    (
+        BASICTOOLS=(
+            bash
+            cat
+            mount
+            sleep
+        )
+        oldinitdir=$initdir
+        rm -rfv $TESTDIR/minimal
+        export initdir=$TESTDIR/minimal
+        mkdir -p $initdir/usr/lib/systemd/system $initdir/etc
+        setup_basic_dirs
+        install_basic_tools
+        cp $os_release $initdir/usr/lib/os-release
+        ln -s ../usr/lib/os-release $initdir/etc/os-release
+        touch $initdir/etc/machine-id $initdir/etc/resolv.conf
+        echo MARKER=1 >> $initdir/usr/lib/os-release
+        echo -e "[Service]\nExecStartPre=cat /usr/lib/os-release\nExecStart=sleep 120" > $initdir/usr/lib/systemd/system/app0.service
+        cp $initdir/usr/lib/systemd/system/app0.service $initdir/usr/lib/systemd/system/app0-foo.service
+
+        mksquashfs $initdir $oldinitdir/usr/share/minimal_0.raw
+        veritysetup format $oldinitdir/usr/share/minimal_0.raw $oldinitdir/usr/share/minimal_0.verity | \
+            grep '^Root hash:' | cut -f2 | tr -d '\n' > $oldinitdir/usr/share/minimal_0.roothash
+
+        sed -i "s/MARKER=1/MARKER=2/g" $initdir/usr/lib/os-release
+        rm $initdir/usr/lib/systemd/system/app0-foo.service
+        cp $initdir/usr/lib/systemd/system/app0.service $initdir/usr/lib/systemd/system/app0-bar.service
+
+        mksquashfs $initdir $oldinitdir/usr/share/minimal_1.raw
+        veritysetup format $oldinitdir/usr/share/minimal_1.raw $oldinitdir/usr/share/minimal_1.verity | \
+            grep '^Root hash:' | cut -f2 | tr -d '\n' > $oldinitdir/usr/share/minimal_1.roothash
+    )
+}
+
 setup_basic_environment() {
     # create the basic filesystem layout
     setup_basic_dirs
@@ -492,6 +540,9 @@ setup_basic_environment() {
     if [[ "$IS_BUILT_WITH_ASAN" = "yes" ]]; then
         create_asan_wrapper
     fi
+    if [ -n "$TEST_INSTALL_VERITY_MINIMAL" ]; then
+        install_verity_minimal
+    fi
 }
 
 setup_selinux() {
@@ -699,7 +750,7 @@ install_compiled_systemd() {
 install_debian_systemd() {
     ddebug "Install debian systemd"
 
-    local _systemd_pkgs=$(apt-cache showsrc systemd | grep -m 1 -E '^Binary:' | cut -d ':' -f 2 | tr -d ,)
+    local _systemd_pkgs=$(grep -E '^Package:' ${SOURCE_DIR}/debian/control | cut -d ':' -f 2)
     local _files=""
     for deb in $_systemd_pkgs; do
         _files=$(dpkg-query -L $deb 2>/dev/null) || continue
@@ -1056,6 +1107,7 @@ install_config_files() {
     # we want an empty environment
     > $initdir/etc/environment
     > $initdir/etc/machine-id
+    > $initdir/etc/resolv.conf
 
     # set the hostname
     echo systemd-testsuite > $initdir/etc/hostname
@@ -1271,7 +1323,7 @@ setup_basic_dirs() {
     mkdir -p $initdir/etc/systemd/system
     mkdir -p $initdir/var/log/journal
 
-    for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log dev proc sys sysroot root run run/lock run/initramfs; do
+    for d in usr/bin usr/sbin bin etc lib "$libdir" sbin tmp usr var var/log var/tmp dev proc sys sysroot root run run/lock run/initramfs; do
         if [ -L "/$d" ]; then
             inst_symlink "/$d"
         else
diff --git a/test/test-network/conf/25-address-preferred-lifetime-zero.network b/test/test-network/conf/25-address-preferred-lifetime-zero.network
deleted file mode 100644 (file)
index d3d02d2..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-[Match]
-Name=dummy98
-
-[Network]
-IPv6AcceptRA=no
-
-# these lines are ignored
-Address=hogehoge
-Address=foofoo
-
-[Route]
-Gateway=20.20.20.1
-
-[Address]
-Address=10.2.3.4/16
-PreferredLifetime=0
-Scope=link
-
-[Address]
-Address=2001:0db8:0:f101::1/64
-
-[Address]
-Address=20.20.20.100/24
-
-[Address]
-# this section must be ignored
-Peer=hoge
-Address=10.10.0.1/16
-Label=30
-
-[Address]
-# this section must be ignored
-Label=30
-Peer=hoge
-Address=10.10.0.2/16
index 506cdd2264db11653f6f8680a067f2b2c6fad0c1..da57bf735109a0c30ac8ef68f8aa83baa7f5699c 100644 (file)
@@ -52,6 +52,15 @@ Peer=2001:db8:0:f103::10/128
 [Address]
 Address=::/64
 
+[Address]
+Address=10.7.8.9/16
+PreferredLifetime=0
+Scope=link
+
+[Address]
+Address=2001:0db8:1:f101::1/64
+PreferredLifetime=0
+
 # test for ENOBUFS issue #17012
 [Network]
 Address=10.3.3.1/16
index 5179b936431f065848d3e6c5e4cfd03ec4dedbef..0740003ed345c9f5fcdb1484a8f670adba8b9e30 100755 (executable)
@@ -1753,7 +1753,6 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         '25-address-dad-veth99.network',
         '25-address-link-section.network',
         '25-address-peer-ipv4.network',
-        '25-address-preferred-lifetime-zero.network',
         '25-address-static.network',
         '25-activation-policy.network',
         '25-bind-carrier.network',
@@ -1830,38 +1829,40 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
 
         output = check_output('ip -4 address show dev dummy98')
         print(output)
-        self.assertRegex(output, 'inet 10.1.2.3/16 brd 10.1.255.255 scope global dummy98')
-        self.assertRegex(output, 'inet 10.1.2.4/16 brd 10.1.255.255 scope global secondary dummy98')
-        self.assertRegex(output, 'inet 10.2.2.4/16 brd 10.2.255.255 scope global dummy98')
+        self.assertIn('inet 10.1.2.3/16 brd 10.1.255.255 scope global dummy98', output)
+        self.assertIn('inet 10.1.2.4/16 brd 10.1.255.255 scope global secondary dummy98', output)
+        self.assertIn('inet 10.2.2.4/16 brd 10.2.255.255 scope global dummy98', output)
+        self.assertIn('inet 10.7.8.9/16 brd 10.7.255.255 scope link deprecated dummy98', output)
 
         # test for ENOBUFS issue #17012
         for i in range(1,254):
-            self.assertRegex(output, f'inet 10.3.3.{i}/16 brd 10.3.255.255')
+            self.assertIn(f'inet 10.3.3.{i}/16 brd 10.3.255.255', output)
 
         # invalid sections
-        self.assertNotRegex(output, '10.10.0.1/16')
-        self.assertNotRegex(output, '10.10.0.2/16')
+        self.assertNotIn('10.10.0.1/16', output)
+        self.assertNotIn('10.10.0.2/16', output)
 
         output = check_output('ip -4 address show dev dummy98 label 32')
-        self.assertRegex(output, 'inet 10.3.2.3/16 brd 10.3.255.255 scope global 32')
+        self.assertIn('inet 10.3.2.3/16 brd 10.3.255.255 scope global 32', output)
 
         output = check_output('ip -4 address show dev dummy98 label 33')
-        self.assertRegex(output, 'inet 10.4.2.3 peer 10.4.2.4/16 scope global 33')
+        self.assertIn('inet 10.4.2.3 peer 10.4.2.4/16 scope global 33', output)
 
         output = check_output('ip -4 address show dev dummy98 label 34')
-        self.assertRegex(output, 'inet 192.168.[0-9]*.1/24 brd 192.168.[0-9]*.255 scope global 34')
+        self.assertRegex(output, r'inet 192.168.[0-9]*.1/24 brd 192.168.[0-9]*.255 scope global 34')
 
         output = check_output('ip -4 address show dev dummy98 label 35')
-        self.assertRegex(output, 'inet 172.[0-9]*.0.1/16 brd 172.[0-9]*.255.255 scope global 35')
+        self.assertRegex(output, r'inet 172.[0-9]*.0.1/16 brd 172.[0-9]*.255.255 scope global 35')
 
         output = check_output('ip -6 address show dev dummy98')
         print(output)
-        self.assertRegex(output, 'inet6 2001:db8:0:f101::15/64 scope global')
-        self.assertRegex(output, 'inet6 2001:db8:0:f101::16/64 scope global')
-        self.assertRegex(output, 'inet6 2001:db8:0:f102::15/64 scope global')
-        self.assertRegex(output, 'inet6 2001:db8:0:f102::16/64 scope global')
-        self.assertRegex(output, 'inet6 2001:db8:0:f103::20 peer 2001:db8:0:f103::10/128 scope global')
-        self.assertRegex(output, 'inet6 fd[0-9a-f:]*1/64 scope global')
+        self.assertIn('inet6 2001:db8:0:f101::15/64 scope global', output)
+        self.assertIn('inet6 2001:db8:0:f101::16/64 scope global', output)
+        self.assertIn('inet6 2001:db8:0:f102::15/64 scope global', output)
+        self.assertIn('inet6 2001:db8:0:f102::16/64 scope global', output)
+        self.assertIn('inet6 2001:db8:0:f103::20 peer 2001:db8:0:f103::10/128 scope global', output)
+        self.assertIn('inet6 2001:db8:1:f101::1/64 scope global deprecated', output)
+        self.assertRegex(output, r'inet6 fd[0-9a-f:]*1/64 scope global')
 
         restart_networkd()
         self.wait_online(['dummy98:routable'])
@@ -1869,22 +1870,7 @@ class NetworkdNetworkTests(unittest.TestCase, Utilities):
         # test for ENOBUFS issue #17012
         output = check_output('ip -4 address show dev dummy98')
         for i in range(1,254):
-            self.assertRegex(output, f'inet 10.3.3.{i}/16 brd 10.3.255.255')
-
-    def test_address_preferred_lifetime_zero_ipv6(self):
-        copy_unit_to_networkd_unit_path('25-address-preferred-lifetime-zero.network', '12-dummy.netdev')
-        start_networkd(5)
-
-        self.wait_online(['dummy98:routable'])
-
-        output = check_output('ip address show dummy98')
-        print(output)
-        self.assertRegex(output, 'inet 10.2.3.4/16 brd 10.2.255.255 scope link deprecated dummy98')
-        self.assertRegex(output, 'inet6 2001:db8:0:f101::1/64 scope global')
-
-        output = check_output('ip route show dev dummy98')
-        print(output)
-        self.assertRegex(output, 'default via 20.20.20.1 proto static')
+            self.assertIn(f'inet 10.3.3.{i}/16 brd 10.3.255.255', output)
 
     def test_address_dad(self):
         copy_unit_to_networkd_unit_path('25-address-dad-veth99.network', '25-address-dad-veth-peer.network',
index b872a24c200c99ca661feffb1382545917e0be1c..bf6a5c7a8763a85e4283679bbd757d8c40477ddc 100755 (executable)
@@ -124,6 +124,32 @@ EOF
     clear_services test15-a test15-b test15-c
 }
 
+test_linked_units () {
+    echo "Testing linked units..."
+    echo "*** test linked unit (same basename)"
+
+    create_service test15-a
+    mv /etc/systemd/system/test15-a.service /
+    ln -s /test15-a.service /etc/systemd/system/
+    ln -s test15-a.service /etc/systemd/system/test15-b.service
+
+    check_ok test15-a Names test15-a.service
+    check_ok test15-a Names test15-b.service
+
+    echo "*** test linked unit (cross basename)"
+
+    mv /test15-a.service /test15-a@.scope
+    ln -fs /test15-a@.scope /etc/systemd/system/test15-a.service
+    systemctl daemon-reload
+
+    check_ok test15-a Names test15-a.service
+    check_ok test15-a Names test15-b.service
+    check_ko test15-a Names test15-b@
+
+    rm /test15-a@.scope
+    clear_services test15-a test15-b
+}
+
 test_hierarchical_dropins () {
     echo "Testing hierarchical dropins..."
     echo "*** test service.d/ top level drop-in"
@@ -465,6 +491,7 @@ test_invalid_dropins () {
 }
 
 test_basic_dropins
+test_linked_units
 test_hierarchical_dropins
 test_template_dropins
 test_alias_dropins
index 783dfbf50e88e33cb5df73545dcf1a3ee4666bb2..1dd4b5dbd1cbfc447c69b55a3ea46dff76316e73 100755 (executable)
@@ -24,8 +24,8 @@ fi
 
 trap cleanup EXIT
 
-cp /usr/share/minimal.* "${image_dir}/"
-image="${image_dir}/minimal"
+cp /usr/share/minimal* "${image_dir}/"
+image="${image_dir}/minimal_0"
 roothash="$(cat ${image}.roothash)"
 
 os_release=$(test -e /etc/os-release && echo /etc/os-release || echo /usr/lib/os-release)
diff --git a/test/units/testsuite-56-testmunch.service b/test/units/testsuite-56-testmunch.service
new file mode 100644 (file)
index 0000000..b4b925a
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=Create some memory pressure
+
+[Service]
+MemoryHigh=2M
+Slice=testsuite-56-workload.slice
+ExecStart=/usr/lib/systemd/tests/testdata/units/testsuite-56-slowgrowth.sh
index 8b01fe37ed4d56e7ab950a75d6302af2cb3127d3..1884f814689ab9358b3e4ac0c6fa9dea22c6bc9c 100755 (executable)
@@ -13,6 +13,8 @@ if [[ "$cgroup_type" != *"cgroup2"* ]] && [[ "$cgroup_type" != *"0x63677270"* ]]
 fi
 [[ -e /skipped ]] && exit 0 || true
 
+rm -rf /etc/systemd/system/testsuite-56-testbloat.service.d
+
 echo "DefaultMemoryPressureDurationSec=5s" >> /etc/systemd/oomd.conf
 
 systemctl start testsuite-56-testchill.service
@@ -23,20 +25,47 @@ oomctl | grep "/testsuite-56-workload.slice"
 oomctl | grep "1.00%"
 oomctl | grep "Default Memory Pressure Duration: 5s"
 
-# systemd-oomd watches for elevated pressure for 30 seconds before acting.
-# It can take time to build up pressure so either wait 5 minutes or for the service to fail.
-timeout=$(date -ud "5 minutes" +%s)
+# systemd-oomd watches for elevated pressure for 5 seconds before acting.
+# It can take time to build up pressure so either wait 2 minutes or for the service to fail.
+timeout=$(date -ud "2 minutes" +%s)
 while [[ $(date -u +%s) -le $timeout ]]; do
     if ! systemctl status testsuite-56-testbloat.service; then
         break
     fi
-    sleep 15
+    sleep 5
 done
 
 # testbloat should be killed and testchill should be fine
 if systemctl status testsuite-56-testbloat.service; then exit 42; fi
 if ! systemctl status testsuite-56-testchill.service; then exit 24; fi
 
+# only run this portion of the test if we can set xattrs
+if setfattr -n user.xattr_test -v 1 /sys/fs/cgroup/; then
+    sleep 120 # wait for systemd-oomd kill cool down and elevated memory pressure to come down
+
+    mkdir -p /etc/systemd/system/testsuite-56-testbloat.service.d/
+    echo "[Service]" > /etc/systemd/system/testsuite-56-testbloat.service.d/override.conf
+    echo "ManagedOOMPreference=avoid" >> /etc/systemd/system/testsuite-56-testbloat.service.d/override.conf
+
+    systemctl daemon-reload
+    systemctl start testsuite-56-testchill.service
+    systemctl start testsuite-56-testmunch.service
+    systemctl start testsuite-56-testbloat.service
+
+    timeout=$(date -ud "2 minutes" +%s)
+    while [[ $(date -u +%s) -le $timeout ]]; do
+        if ! systemctl status testsuite-56-testmunch.service; then
+            break
+        fi
+        sleep 5
+    done
+
+    # testmunch should be killed since testbloat had the avoid xattr on it
+    if ! systemctl status testsuite-56-testbloat.service; then exit 25; fi
+    if systemctl status testsuite-56-testmunch.service; then exit 43; fi
+    if ! systemctl status testsuite-56-testchill.service; then exit 24; fi
+fi
+
 systemd-analyze log-level info
 
 echo OK > /testok
diff --git a/test/units/testsuite-58.service b/test/units/testsuite-58.service
new file mode 100644 (file)
index 0000000..47deba7
--- /dev/null
@@ -0,0 +1,7 @@
+[Unit]
+Description=TEST-58-PORTABLE
+
+[Service]
+ExecStartPre=rm -f /failed /testok
+ExecStart=/usr/lib/systemd/tests/testdata/units/%N.sh
+Type=oneshot
diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
new file mode 100755 (executable)
index 0000000..b5b05b4
--- /dev/null
@@ -0,0 +1,68 @@
+#!/usr/bin/env bash
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+set -ex
+set -o pipefail
+
+export SYSTEMD_LOG_LEVEL=debug
+
+portablectl attach --now --runtime /usr/share/minimal_0.raw app0
+
+systemctl is-active app0.service
+systemctl is-active app0-foo.service
+set +o pipefail
+set +e
+systemctl is-active app0-bar.service && exit 1
+set -e
+set -o pipefail
+
+portablectl reattach --now --runtime /usr/share/minimal_1.raw app0
+
+systemctl is-active app0.service
+systemctl is-active app0-bar.service
+set +o pipefail
+set +e
+systemctl is-active app0-foo.service && exit 1
+set -e
+set -o pipefail
+
+portablectl list | grep -q -F "minimal_1"
+
+portablectl detach --now --runtime /usr/share/minimal_1.raw app0
+
+portablectl list | grep -q -F "No images."
+
+# portablectl also works with directory paths rather than images
+
+unsquashfs -dest /tmp/minimal_0 /usr/share/minimal_0.raw
+unsquashfs -dest /tmp/minimal_1 /usr/share/minimal_1.raw
+
+portablectl attach --copy=symlink --now --runtime /tmp/minimal_0 app0
+
+systemctl is-active app0.service
+systemctl is-active app0-foo.service
+set +o pipefail
+set +e
+systemctl is-active app0-bar.service && exit 1
+set -e
+set -o pipefail
+
+portablectl reattach --now --enable --runtime /tmp/minimal_1 app0
+
+systemctl is-active app0.service
+systemctl is-active app0-bar.service
+set +o pipefail
+set +e
+systemctl is-active app0-foo.service && exit 1
+set -e
+set -o pipefail
+
+portablectl list | grep -q -F "minimal_1"
+
+portablectl detach --now --enable --runtime /tmp/minimal_1 app0
+
+portablectl list | grep -q -F "No images."
+
+echo OK > /testok
+
+exit 0
index c0d63f5c708ce205e0a3e4be4a5e6506cedc1161..6226ab7a40c8ffa39a4768ec2cad53d3dfe12ca2 100644 (file)
@@ -22,6 +22,10 @@ Wants=time-set.target
 AmbientCapabilities=CAP_SYS_TIME
 BusName=org.freedesktop.timesync1
 CapabilityBoundingSet=CAP_SYS_TIME
+# Turn off DNSSEC validation for hostname look-ups, since those need the
+# correct time to work, but we likely won't acquire that without NTP. Let's
+# break this chicken-and-egg cycle here.
+Environment=SYSTEMD_NSS_RESOLVE_VALIDATE=0
 ExecStart=!!@rootlibexecdir@/systemd-timesyncd
 LockPersonality=yes
 MemoryDenyWriteExecute=yes